diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index 09ed728f4..78d7180db 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -410,6 +410,8 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); [self setThemeState:CPThemeStateEditable]; else [self unsetThemeState:CPThemeStateEditable]; + + [self updateTrackingAreas]; } /*! @@ -431,6 +433,8 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); // We only allow first responder status if the field is enabled. if (!shouldBeEnabled && [[self window] firstResponder] === self) [[self window] makeFirstResponder:nil]; + + [self updateTrackingAreas]; } /*! @@ -440,6 +444,8 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); - (void)setSelectable:(BOOL)aFlag { _isSelectable = aFlag; + + [self updateTrackingAreas]; } /*! @@ -997,14 +1003,11 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); [self textDidChange:[CPNotification notificationWithName:CPControlTextDidChangeNotification object:self userInfo:nil]]; } -- (void)mouseMoved:(CPEvent)anEvent -{ - [super mouseMoved:anEvent]; - [self _updateCursorForEvent:anEvent]; -} - - (void)mouseDown:(CPEvent)anEvent { + if (![self isEnabled]) + return [[self nextResponder] mouseDown:anEvent]; + // Don't track! (ever?) if ([self isEditable] && [self isEnabled]) { @@ -1259,27 +1262,6 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); [_delegate controlTextDidEndEditing:note]; } -- (void)_updateCursorForEvent:(CPEvent)anEvent -{ - var frame = CGRectMakeCopy([self frame]), - contentInset = [self currentValueForThemeAttribute:@"content-inset"]; - - frame = [[self superview] convertRectToBase:CGRectInsetByInset(frame, contentInset)]; - - if ([self isEnabled] && ([self isSelectable] || [self isEditable]) && CGRectContainsPoint(frame, [anEvent locationInWindow])) - { -#if PLATFORM(DOM) - self._DOMElement.style.cursor = "text"; -#endif - } - else - { -#if PLATFORM(DOM) - self._DOMElement.style.cursor = "default"; -#endif - } -} - /*! Returns the string in the text field. */ @@ -2200,4 +2182,29 @@ var CPTextFieldIsEditableKey = "CPTextFieldIsEditableKey", [_source setObjectValue:aValue]; } -@end \ No newline at end of file +@end + +@implementation CPTextField (CPTrackingArea) + +- (void)updateTrackingAreas +{ + [self removeAllTrackingAreas]; + + if ([self isEnabled] && (_isEditable || _isSelectable)) + { + var myBounds = CGRectMakeCopy([self bounds]), + contentInset = [self currentValueForThemeAttribute:@"content-inset"]; + + [self addTrackingArea:[[CPTrackingArea alloc] initWithRect:CGRectInsetByInset(myBounds, contentInset) + options:CPTrackingMouseEnteredAndExited | CPTrackingCursorUpdate | CPTrackingActiveInKeyWindow + owner:self + userInfo:nil]]; + } +} + +- (void)cursorUpdate:(CPEvent)anEvent +{ + [[CPCursor IBeamCursor] set]; +} + +@end