<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -71,6 +71,9 @@
 - (void)loadView {
   [super loadView];
   
+//  NSString* kText = @&quot;\
+//&lt;span&gt;Thisisareallylongwordthatshouldwrapisareallylongwordthatshouldwrapisareallylongwordthatshould\
+//wrapisareallylongwordthatshouldwrapisareallylongwordthatshouldwrap&lt;/span&gt;&quot;;
   NSString* kText = @&quot;\
 This is a test of styled labels.  Styled labels support \
 &lt;b&gt;bold text&lt;/b&gt;, &lt;i&gt;italic text&lt;/i&gt;, &lt;span class=\&quot;blueText\&quot;&gt;colored text&lt;/span&gt;, \</diff>
      <filename>samples/TTCatalog/Classes/StyledTextTestController.m</filename>
    </modified>
    <modified>
      <diff>@@ -28,7 +28,7 @@
     textView.font = TTSTYLEVAR(font);
     
     TTTextEditor* editor = [[[TTTextEditor alloc] init] autorelease];
-    editor.textView.font = TTSTYLEVAR(font);
+    editor.font = TTSTYLEVAR(font);
     editor.backgroundColor = TTSTYLEVAR(backgroundColor);
     editor.autoresizesToText = NO;
     editor.minNumberOfLines = 3;</diff>
      <filename>samples/TTCatalog/Classes/TableControlsTestController.m</filename>
    </modified>
    <modified>
      <diff>@@ -476,18 +476,27 @@
 }
 
 - (TTStyle*)textBar {
-  UIColor* color = TTSTYLEVAR(searchBarTintColor);
-  UIColor* highlight = [color multiplyHue:0 saturation:0 value:1.2];
-  UIColor* shadow = [color multiplyHue:0 saturation:0 value:0.82];
   return
-    [TTLinearGradientFillStyle styleWithColor1:highlight color2:color next:
-    [TTFourBorderStyle styleWithTop:shadow right:nil bottom:nil left:nil width:1 next:nil]];
+    [TTLinearGradientFillStyle styleWithColor1:RGBCOLOR(237, 239, 241)
+                               color2:RGBCOLOR(206, 208, 212) next:
+    [TTFourBorderStyle styleWithTop:RGBCOLOR(187, 189, 190) right:nil bottom:nil left:nil width:1 next:
+    [TTFourBorderStyle styleWithTop:RGBCOLOR(255, 255, 255) right:nil bottom:nil left:nil width:1
+                       next:nil]]];
+}
+
+- (TTStyle*)textBarFooter {
+  return
+    [TTLinearGradientFillStyle styleWithColor1:RGBCOLOR(206, 208, 212)
+                               color2:RGBCOLOR(184, 186, 190) next:
+    [TTFourBorderStyle styleWithTop:RGBCOLOR(161, 161, 161) right:nil bottom:nil left:nil width:1 next:
+    [TTFourBorderStyle styleWithTop:RGBCOLOR(230, 232, 235) right:nil bottom:nil left:nil width:1
+                       next:nil]]];
 }
 
 - (TTStyle*)textBarTextField {
   return 
     [TTInsetStyle styleWithInset:UIEdgeInsetsMake(6, 0, 3, 6) next:
-    [TTShapeStyle styleWithShape:[TTRoundedRectangleShape shapeWithRadius:11] next:
+    [TTShapeStyle styleWithShape:[TTRoundedRectangleShape shapeWithRadius:12.5] next:
     [TTInsetStyle styleWithInset:UIEdgeInsetsMake(1, 0, 1, 0) next:
     [TTShadowStyle styleWithColor:RGBACOLOR(255,255,255,0.4) blur:0 offset:CGSizeMake(0, 1) next:
     [TTSolidFillStyle styleWithColor:TTSTYLEVAR(backgroundColor) next:
@@ -497,11 +506,24 @@
 }
 
 - (TTStyle*)textBarPostButton:(UIControlState)state {
-  return
-    [self toolbarButtonForState:state
-          shape:[TTRoundedRectangleShape shapeWithRadius:TT_ROUNDED]
-          tintColor:TTSTYLEVAR(postButtonColor)
-          font:[UIFont boldSystemFontOfSize:14]];
+  UIColor* fillColor = state == UIControlStateHighlighted
+                       ? RGBCOLOR(19, 61, 126)
+                       : RGBCOLOR(31, 100, 206);
+  UIColor* textColor = state == UIControlStateDisabled
+                       ? RGBACOLOR(255, 255, 255, 0.5)
+                       : RGBCOLOR(255, 255, 255);
+  return 
+    [TTShapeStyle styleWithShape:[TTRoundedRectangleShape shapeWithRadius:13] next:
+    [TTInsetStyle styleWithInset:UIEdgeInsetsMake(2, 0, 1, 0) next:
+    [TTShadowStyle styleWithColor:RGBACOLOR(255,255,255,0.5) blur:0 offset:CGSizeMake(0, 1) next:
+    [TTReflectiveFillStyle styleWithColor:fillColor next:
+    [TTLinearGradientBorderStyle styleWithColor1:fillColor
+                                 color2:RGBCOLOR(14, 83, 187) width:1 next:
+    [TTInsetStyle styleWithInset:UIEdgeInsetsMake(0, -1, 0, -1) next:
+    [TTBoxStyle styleWithPadding:UIEdgeInsetsMake(8, 9, 8, 9) next:
+    [TTTextStyle styleWithFont:[UIFont boldSystemFontOfSize:15]
+                 color:textColor shadowColor:[UIColor colorWithWhite:0 alpha:0.3]
+                 shadowOffset:CGSizeMake(0, -1) next:nil]]]]]]]];
 }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////</diff>
      <filename>src/TTDefaultStyleSheet.m</filename>
    </modified>
    <modified>
      <diff>@@ -536,56 +536,90 @@
     CGFloat availWidth = _width ? _width : CGFLOAT_MAX;
 
     // Measure the word and check to see if it fits on the current line
-    CGSize wordSize = [word sizeWithFont:_font
-                            constrainedToSize:CGSizeMake(availWidth, CGFLOAT_MAX)
-                            lineBreakMode:UILineBreakModeWordWrap];
-    if (_lineWidth + wordSize.width &gt; _width) {
-      // The word will be placed on the next line, so create a new frame for
-      // the current line and mark it with a line break
+    CGSize wordSize = [word sizeWithFont:_font];
+    if (wordSize.width &gt; _width) {
+      for (NSInteger i = 0; i &lt; word.length; ++i) {
+        NSString* c = [word substringWithRange:NSMakeRange(i, 1)];
+        CGSize letterSize = [c sizeWithFont:_font];
+
+        if (_lineWidth + letterSize.width &gt; _width) {
+          NSRange lineRange = NSMakeRange(lineStartIndex, index - lineStartIndex);
+          if (lineRange.length) {
+            NSString* line = [text substringWithRange:lineRange];
+            [self addFrameForText:line element:element node:textNode width:frameWidth
+                  height:_lineHeight ? _lineHeight : [_font lineHeight]];
+          }
+
+          if (_lineWidth) {
+            [self breakLine];
+          }
+
+          lineStartIndex = lineRange.location + lineRange.length;
+          frameWidth = 0;
+        }
+        
+        frameWidth += letterSize.width;
+        [self expandLineWidth:letterSize.width];
+        [self inflateLineHeight:wordSize.height];
+        ++index;
+      }
+
       NSRange lineRange = NSMakeRange(lineStartIndex, index - lineStartIndex);
       if (lineRange.length) {
         NSString* line = [text substringWithRange:lineRange];
         [self addFrameForText:line element:element node:textNode width:frameWidth
               height:_lineHeight ? _lineHeight : [_font lineHeight]];
+
+        lineStartIndex = lineRange.location + lineRange.length;
+        frameWidth = 0;
       }
-      
-      if (_lineWidth) {
-        [self breakLine];
-      } else {
-        _width = wordSize.width;
+    } else {
+      if (_lineWidth + wordSize.width &gt; _width) {
+        // The word will be placed on the next line, so create a new frame for
+        // the current line and mark it with a line break
+        NSRange lineRange = NSMakeRange(lineStartIndex, index - lineStartIndex);
+        if (lineRange.length) {
+          NSString* line = [text substringWithRange:lineRange];
+          [self addFrameForText:line element:element node:textNode width:frameWidth
+                height:_lineHeight ? _lineHeight : [_font lineHeight]];
+        }
+        
+        if (_lineWidth) {
+          [self breakLine];
+        }
+        lineStartIndex = lineRange.location + lineRange.length;
+        frameWidth = 0;
       }
-      lineStartIndex = lineRange.location + lineRange.length;
-      frameWidth = 0;
-    }
 
-    if (!_lineWidth &amp;&amp; textNode == _lastNode) {
-      // We are at the start of a new line, and this is the last node, so we don't need to
-      // keep measuring every word.  We can just measure all remaining text and create a new
-      // frame for all of it.
-      NSString* lines = [text substringWithRange:searchRange];
-      CGSize linesSize = [lines sizeWithFont:_font
-                                constrainedToSize:CGSizeMake(availWidth, CGFLOAT_MAX)
-                                lineBreakMode:UILineBreakModeWordWrap];
-
-      [self addFrameForText:lines element:element node:textNode width:linesSize.width
-           height:linesSize.height];
-      _height += linesSize.height;
-      break;
-    }
+      if (!_lineWidth &amp;&amp; textNode == _lastNode) {
+        // We are at the start of a new line, and this is the last node, so we don't need to
+        // keep measuring every word.  We can just measure all remaining text and create a new
+        // frame for all of it.
+        NSString* lines = [text substringWithRange:searchRange];
+        CGSize linesSize = [lines sizeWithFont:_font
+                                  constrainedToSize:CGSizeMake(availWidth, CGFLOAT_MAX)
+                                  lineBreakMode:UILineBreakModeWordWrap];
+
+        [self addFrameForText:lines element:element node:textNode width:linesSize.width
+             height:linesSize.height];
+        _height += linesSize.height;
+        break;
+      }
+
+      frameWidth += wordSize.width;
+      [self expandLineWidth:wordSize.width];
+      [self inflateLineHeight:wordSize.height];
 
-    frameWidth += wordSize.width;
-    [self expandLineWidth:wordSize.width];
-    [self inflateLineHeight:wordSize.height];
-
-    index = wordRange.location + wordRange.length;
-    if (index &gt;= length) {
-      // The current word was at the very end of the string
-      NSRange lineRange = NSMakeRange(lineStartIndex, (wordRange.location + wordRange.length)
-                                                      - lineStartIndex);
-      NSString* line = !_lineWidth ? word : [text substringWithRange:lineRange];
-      [self addFrameForText:line element:element node:textNode width:frameWidth
-            height:[_font lineHeight]];
-      frameWidth = 0;
+      index = wordRange.location + wordRange.length;
+      if (index &gt;= length) {
+        // The current word was at the very end of the string
+        NSRange lineRange = NSMakeRange(lineStartIndex, (wordRange.location + wordRange.length)
+                                                        - lineStartIndex);
+        NSString* line = !_lineWidth ? word : [text substringWithRange:lineRange];
+        [self addFrameForText:line element:element node:textNode width:frameWidth
+              height:[_font lineHeight]];
+        frameWidth = 0;
+      }
     }
   }
 }</diff>
      <filename>src/TTStyledLayout.m</filename>
    </modified>
    <modified>
      <diff>@@ -408,8 +408,9 @@ static const CGFloat kBannerViewHeight = 22;
             TTLOG(@&quot;INSERTING ROW AT %@&quot;, newIndexPath);
             [_tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath]
                         withRowAnimation:UITableViewRowAnimationTop];
+            
             [_tableView scrollToRowAtIndexPath:newIndexPath
-                        atScrollPosition:UITableViewScrollPositionBottom animated:NO];
+                        atScrollPosition:UITableViewScrollPositionNone animated:NO];
           }
           [self invalidateView];
         } else {</diff>
      <filename>src/TTTableViewController.m</filename>
    </modified>
    <modified>
      <diff>@@ -13,7 +13,8 @@ static CGFloat kPadding = 5;
 
 @implementation TTTextBarController
 
-@synthesize delegate = _delegate, textEditor = _textEditor, postButton = _postButton;
+@synthesize delegate = _delegate, textEditor = _textEditor, postButton = _postButton,
+            footerBar = _footerBar;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // private
@@ -25,6 +26,7 @@ static CGFloat kPadding = 5;
 }
 
 - (void)dismissAnimationDidStop {
+  [self release];
 }
 
 - (void)dismissWithCancel {
@@ -45,6 +47,7 @@ static CGFloat kPadding = 5;
     _defaultText = nil;
     _textEditor = nil;
     _postButton = nil;
+    _footerBar = nil;
     _previousRightBarButtonItem = nil;
 
     if (query) {
@@ -62,6 +65,7 @@ static CGFloat kPadding = 5;
 - (void)dealloc {
   TT_RELEASE_SAFELY(_result);
   TT_RELEASE_SAFELY(_defaultText);
+  TT_RELEASE_SAFELY(_footerBar);
   TT_RELEASE_SAFELY(_previousRightBarButtonItem);
   [super dealloc];
 }
@@ -70,43 +74,93 @@ static CGFloat kPadding = 5;
 // UIViewController
 
 - (void)loadView {
-  TTView* textBar = [[TTView alloc] init];
-  textBar.style = TTSTYLE(textBar);
-  [textBar addSubview:self.textEditor];  
-  [textBar addSubview:self.postButton];
+  CGSize screenSize = TTScreenBounds().size;
 
+  self.view = [[[UIView alloc] init] autorelease];
+  _textBar = [[TTView alloc] init];
+  _textBar.style = TTSTYLE(textBar);
+  [self.view addSubview:_textBar];
+
+  [_textBar addSubview:self.textEditor];  
+  [_textBar addSubview:self.postButton];
+  
   [self.postButton sizeToFit];
-  _postButton.frame = CGRectMake(TTScreenBounds().size.width - (_postButton.width + kPadding),
-                                 kMargin+kPadding, _postButton.width, 27);
+  _postButton.frame = CGRectMake(screenSize.width - (_postButton.width + kPadding),
+                                 kMargin+kPadding, _postButton.width, 0);
 
-  _textEditor.frame = CGRectMake(5, kMargin,
-                                 TTScreenBounds().size.width - (_postButton.width+kPadding+5), 0);
+  _textEditor.frame = CGRectMake(kPadding, kMargin,
+                                 screenSize.width - (_postButton.width+kPadding*2), 0);
   [_textEditor sizeToFit];
+  _postButton.height = _textEditor.size.height - 8;
+  
+  _textBar.frame = CGRectMake(0, 0,
+                              screenSize.width, _textEditor.height+kMargin*2);
 
-  textBar.frame = CGRectMake(0, TTScreenBounds().size.height - (TTKeyboardHeight() + _textEditor.height),
-                             TTScreenBounds().size.width+kMargin, _textEditor.height+kMargin*2);
+  self.view.frame = CGRectMake(0, screenSize.height - (TTKeyboardHeight() + _textEditor.height),
+                              screenSize.width, _textEditor.height+kMargin*2);
 
+  if (_footerBar) {
+    _footerBar.frame = CGRectMake(0, _textBar.height, screenSize.width, _footerBar.height);
+    [self.view addSubview:_footerBar];
+    self.view.top -= _footerBar.height;
+    self.view.height += _footerBar.height;
+  }
+  
+  self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth
+                              | UIViewAutoresizingFlexibleTopMargin;
   _postButton.autoresizingMask = UIViewAutoresizingFlexibleTopMargin
                                  | UIViewAutoresizingFlexibleLeftMargin;
   _textEditor.autoresizingMask = UIViewAutoresizingFlexibleRightMargin;
-  textBar.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin;
-
-  self.view = textBar;
+  _textBar.autoresizingMask = UIViewAutoresizingFlexibleWidth;
+  _footerBar.autoresizingMask = UIViewAutoresizingFlexibleWidth;
 }
 
 - (void)viewDidUnload {
   [super viewDidUnload];
+  TT_RELEASE_SAFELY(_textBar);
   TT_RELEASE_SAFELY(_textEditor);
   TT_RELEASE_SAFELY(_postButton);
   TT_RELEASE_SAFELY(_previousRightBarButtonItem);
 }
 
+//////////////////////////////////////////////////////////////////////////////////////////////////
+// UIViewController (TTCategory)
+
+- (BOOL)persistView:(NSMutableDictionary*)state {
+  [state setObject:[NSNumber numberWithBool:YES] forKey:@&quot;__important__&quot;];
+
+  NSString* delegate = [[TTNavigator navigator] pathForObject:_delegate];
+  if (delegate) {
+    [state setObject:delegate forKey:@&quot;delegate&quot;];
+  }
+  [state setObject:_textEditor.text forKey:@&quot;text&quot;];
+  
+  NSString* title = self.navigationItem.title;
+  
+  if (title) {
+    [state setObject:title forKey:@&quot;title&quot;];
+  }
+  
+  return [super persistView:state];
+}
+
+- (void)restoreView:(NSDictionary*)state {
+  [super restoreView:state];
+  NSString* delegate = [state objectForKey:@&quot;delegate&quot;];
+  if (delegate) {
+    _delegate = [[TTNavigator navigator] objectForPath:delegate];
+  }
+  NSString* title = [state objectForKey:@&quot;title&quot;];
+  if (title) {
+    self.navigationItem.title = title;
+  }
+  _defaultText = [[state objectForKey:@&quot;text&quot;] retain];
+}
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // TTPopupViewController
 
 - (void)showInView:(UIView*)view animated:(BOOL)animated {
-  [self retain];
-    
   self.view.transform = TTRotateTransformForOrientation(TTInterfaceOrientation());
   [view addSubview:self.view];
   
@@ -125,11 +179,9 @@ static CGFloat kPadding = 5;
 - (void)dismissPopupViewControllerAnimated:(BOOL)animated {
   if (animated) {
     [_textEditor resignFirstResponder];
-    [self performSelector:@selector(release) withObject:nil afterDelay:TT_TRANSITION_DURATION];
   } else {
     UIViewController* superController = self.superController;
     [self.view removeFromSuperview];
-    [self release];
     superController.popupViewController = nil;
     [superController viewWillAppear:animated];
     [superController viewDidAppear:animated];
@@ -140,13 +192,15 @@ static CGFloat kPadding = 5;
 // TTTextEditorDelegate
 
 - (void)textEditorDidBeginEditing:(TTTextEditor*)textEditor {
+  [self retain];
+  
   _originTop = self.view.top;
   
-  UIViewController* controller = [TTNavigator navigator].topViewController;
+  UIViewController* controller = self.view.viewController;
   _previousRightBarButtonItem = [controller.navigationItem.rightBarButtonItem retain];
-  controller.navigationItem.rightBarButtonItem =
+  [controller.navigationItem setRightBarButtonItem:
     [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel
-                              target:self action:@selector(cancel)] autorelease];
+                              target:self action:@selector(cancel)] autorelease] animated:YES];
 
   [UIView beginAnimations:nil context:nil];
   [UIView setAnimationDuration:TT_TRANSITION_DURATION];
@@ -164,11 +218,9 @@ static CGFloat kPadding = 5;
 }
 
 - (void)textEditorDidEndEditing:(TTTextEditor*)textEditor {
-  if (_previousRightBarButtonItem) {
-    UIViewController* controller = [TTNavigator navigator].topViewController;
-    controller.navigationItem.rightBarButtonItem = _previousRightBarButtonItem;
-    TT_RELEASE_SAFELY(_previousRightBarButtonItem);
-  }
+  UIViewController* controller = self.view.viewController;
+  [controller.navigationItem setRightBarButtonItem:_previousRightBarButtonItem animated:YES];
+  TT_RELEASE_SAFELY(_previousRightBarButtonItem);
 
   [UIView beginAnimations:nil context:nil];
   [UIView setAnimationDuration:TT_TRANSITION_DURATION];
@@ -192,6 +244,8 @@ static CGFloat kPadding = 5;
   CGRect frame = self.view.frame;
   frame.origin.y -= height;
   frame.size.height += height;
+  _textBar.height += height;
+  _footerBar.top += height;
   self.view.frame = frame;
   
   return YES;
@@ -217,7 +271,7 @@ static CGFloat kPadding = 5;
     _textEditor.backgroundColor = [UIColor clearColor];
     _textEditor.autoresizesToText = YES;
     _textEditor.maxNumberOfLines = 6;
-    _textEditor.font = [UIFont systemFontOfSize:15];
+    _textEditor.font = [UIFont systemFontOfSize:16];
   }
   return _textEditor;
 }
@@ -237,6 +291,9 @@ static CGFloat kPadding = 5;
   if ([_delegate respondsToSelector:@selector(textBar:willPostText:)]) {
     shouldDismiss = [_delegate textBar:self willPostText:_textEditor.text];
   }
+
+  _textEditor.text = @&quot;&quot;;
+  _postButton.enabled = NO;
   
   if (shouldDismiss) {
     [self dismissWithResult:nil animated:YES];</diff>
      <filename>src/TTTextBarController.m</filename>
    </modified>
    <modified>
      <diff>@@ -4,7 +4,7 @@
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 static CGFloat kPaddingX = 8;
-static CGFloat kPaddingY = 8;
+static CGFloat kPaddingY = 9;
 
 // XXXjoe This number is very sensitive - it is specifically calculated for precise word wrapping
 // with 15pt normal helvetica.  If you change this number at all, UITextView may wrap the text
@@ -313,12 +313,13 @@ static CGFloat kTextViewInset = 31;
     _internal.ignoreBeginAndEnd = YES;
     [_textView becomeFirstResponder];
     [self performSelector:@selector(stopIgnoringBeginAndEnd) withObject:nil afterDelay:0];
-    
   } else if (numberOfLines == 1 &amp;&amp; _textField.hidden) {
     _textField.hidden = NO;
     _textView.hidden = YES;
     _textField.text = _textView.text;
+    _internal.ignoreBeginAndEnd = YES;
     [_textField becomeFirstResponder];
+    [self performSelector:@selector(stopIgnoringBeginAndEnd) withObject:nil afterDelay:0];
   }
   
   _textView.overflowed = _overflowed;
@@ -402,7 +403,7 @@ static CGFloat kTextViewInset = 31;
 // UIView
 
 - (void)layoutSubviews {
-  CGRect frame = CGRectMake(0, 1, self.width-kPaddingX*2, self.height);
+  CGRect frame = CGRectMake(0, 2, self.width-kPaddingX*2, self.height);
   _textView.frame = frame;
   _textField.frame = CGRectOffset(TTRectContract(frame, 7, 8), 7, 8);
 }</diff>
      <filename>src/TTTextEditor.m</filename>
    </modified>
    <modified>
      <diff>@@ -10,8 +10,10 @@
   id &lt;TTTextBarDelegate&gt; _delegate;
   id _result;
   NSString* _defaultText;
+  TTView* _textBar;
   TTTextEditor* _textEditor;
   TTButton* _postButton;
+  UIView* _footerBar;
   CGFloat _originTop;
   UIBarButtonItem* _previousRightBarButtonItem;
 }
@@ -19,6 +21,7 @@
 @property(nonatomic,assign) id &lt;TTTextBarDelegate&gt; delegate;
 @property(nonatomic,readonly) TTTextEditor* textEditor;
 @property(nonatomic,readonly) TTButton* postButton;
+@property(nonatomic,retain) UIView* footerBar;
 
 /**
  * Posts the text to delegates, who have to actually do something with it.
@@ -65,6 +68,8 @@
 
 @protocol TTTextBarDelegate &lt;NSObject&gt;
 
+@optional
+
 /**
  *
  */</diff>
      <filename>src/Three20/TTTextBarController.h</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>969d6f644f2f12faa18dab4a958f4e099a59383e</id>
    </parent>
  </parents>
  <author>
    <name>Joe Hewitt</name>
    <email>joe@joehewitt.com</email>
  </author>
  <url>http://github.com/facebook/three20/commit/e8ecb801ca70ba824846928b7ca75faf376aeedb</url>
  <id>e8ecb801ca70ba824846928b7ca75faf376aeedb</id>
  <committed-date>2009-10-16T13:07:23-07:00</committed-date>
  <authored-date>2009-10-16T13:07:23-07:00</authored-date>
  <message>* Fix word-wrapping bug with Asian characters
* Fix broken TTCatalog sample
* A number of TTTextBarController improvements</message>
  <tree>620255bc61911b4880a7847e9605e9d3a3eea755</tree>
  <committer>
    <name>Joe Hewitt</name>
    <email>joe@joehewitt.com</email>
  </committer>
</commit>
