diff --git a/atom/browser/ui/tray_icon_cocoa.mm b/atom/browser/ui/tray_icon_cocoa.mm index 9c5e100a2a0..85477e6a704 100644 --- a/atom/browser/ui/tray_icon_cocoa.mm +++ b/atom/browser/ui/tray_icon_cocoa.mm @@ -33,6 +33,7 @@ const CGFloat kVerticalTitleMargin = 2; base::scoped_nsobject title_; base::scoped_nsobject attributedTitle_; base::scoped_nsobject statusItem_; + NSTrackingArea *trackingArea_; } @end // @interface StatusItemView @@ -61,12 +62,12 @@ const CGFloat kVerticalTitleMargin = 2; [self updateDimensions]; // Add NSTrackingArea for listening to mouseEnter, mouseExit, and mouseMove events - auto trackingArea = [[[NSTrackingArea alloc] + trackingArea_ = [[[NSTrackingArea alloc] initWithRect:[self bounds] options:NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved | NSTrackingActiveAlways owner:self userInfo:nil] autorelease]; - [self addTrackingArea:trackingArea]; + [self addTrackingArea:trackingArea_]; } return self; } @@ -78,6 +79,8 @@ const CGFloat kVerticalTitleMargin = 2; } - (void)removeItem { + // Turn off tracking events to prevent crash + [self removeTrackingArea:trackingArea_]; [[NSStatusBar systemStatusBar] removeStatusItem:statusItem_]; statusItem_.reset(); } @@ -399,8 +402,9 @@ TrayIconCocoa::TrayIconCocoa() : menu_model_(nullptr) { TrayIconCocoa::~TrayIconCocoa() { [status_item_view_ removeItem]; - if (menu_model_) + if (menu_model_){ menu_model_->RemoveObserver(this); + } } void TrayIconCocoa::SetImage(const gfx::Image& image) {