| Index: ui/base/cocoa/hover_button.mm
|
| diff --git a/ui/base/cocoa/hover_button.mm b/ui/base/cocoa/hover_button.mm
|
| index a2348986560a4d0716477bcabe3e36fc80f33dab..74b6009748aaa6b3b9231ff1192fea4d8d2d1fb3 100644
|
| --- a/ui/base/cocoa/hover_button.mm
|
| +++ b/ui/base/cocoa/hover_button.mm
|
| @@ -6,12 +6,11 @@
|
|
|
| @implementation HoverButton
|
|
|
| -@synthesize hoverState = hoverState_;
|
| +@synthesize isMouseInside = isMouseInside_;
|
|
|
| - (id)initWithFrame:(NSRect)frameRect {
|
| if ((self = [super initWithFrame:frameRect])) {
|
| [self setTrackingEnabled:YES];
|
| - hoverState_ = kHoverStateNone;
|
| [self updateTrackingAreas];
|
| }
|
| return self;
|
| @@ -19,7 +18,6 @@
|
|
|
| - (void)awakeFromNib {
|
| [self setTrackingEnabled:YES];
|
| - self.hoverState = kHoverStateNone;
|
| [self updateTrackingAreas];
|
| }
|
|
|
| @@ -28,31 +26,27 @@
|
| [super dealloc];
|
| }
|
|
|
| +- (void)setIsMouseInside:(BOOL)isInside {
|
| + isMouseInside_ = isInside;
|
| + [self setNeedsDisplay:YES];
|
| +}
|
| +
|
| +- (HoverState)hoverState {
|
| + if (self.state == NSOnState)
|
| + return kHoverStateMouseDown;
|
| + if (self.isMouseInside)
|
| + return kHoverStateMouseOver;
|
| + return kHoverStateNone;
|
| +}
|
| +
|
| - (void)mouseEntered:(NSEvent*)theEvent {
|
| if (trackingArea_.get())
|
| - self.hoverState = kHoverStateMouseOver;
|
| + self.isMouseInside = YES;
|
| }
|
|
|
| - (void)mouseExited:(NSEvent*)theEvent {
|
| if (trackingArea_.get())
|
| - self.hoverState = kHoverStateNone;
|
| -}
|
| -
|
| -- (void)mouseDown:(NSEvent*)theEvent {
|
| - self.hoverState = kHoverStateMouseDown;
|
| - // The hover button needs to hold onto itself here for a bit. Otherwise,
|
| - // it can be freed while |super mouseDown:| is in its loop, and the
|
| - // |checkImageState| call will crash.
|
| - // http://crbug.com/28220
|
| - scoped_nsobject<HoverButton> myself([self retain]);
|
| -
|
| - [super mouseDown:theEvent];
|
| - // We need to check the image state after the mouseDown event loop finishes.
|
| - // It's possible that we won't get a mouseExited event if the button was
|
| - // moved under the mouse during tab resize, instead of the mouse moving over
|
| - // the button.
|
| - // http://crbug.com/31279
|
| - [self checkImageState];
|
| + self.isMouseInside = NO;
|
| }
|
|
|
| - (void)setTrackingEnabled:(BOOL)enabled {
|
| @@ -96,13 +90,7 @@
|
| // Update the button's state if the button has moved.
|
| NSPoint mouseLoc = [[self window] mouseLocationOutsideOfEventStream];
|
| mouseLoc = [self convertPoint:mouseLoc fromView:nil];
|
| - self.hoverState = NSPointInRect(mouseLoc, [self bounds]) ?
|
| - kHoverStateMouseOver : kHoverStateNone;
|
| -}
|
| -
|
| -- (void)setHoverState:(HoverState)state {
|
| - hoverState_ = state;
|
| - [self setNeedsDisplay:YES];
|
| + self.isMouseInside = NSPointInRect(mouseLoc, [self bounds]);
|
| }
|
|
|
| @end
|
|
|