Removed tracking area when removing icon to prevent mouse exit race condition crash
This commit is contained in:
parent
83b351a8fd
commit
638d8219c4
1 changed files with 7 additions and 3 deletions
|
@ -33,6 +33,7 @@ const CGFloat kVerticalTitleMargin = 2;
|
||||||
base::scoped_nsobject<NSString> title_;
|
base::scoped_nsobject<NSString> title_;
|
||||||
base::scoped_nsobject<NSMutableAttributedString> attributedTitle_;
|
base::scoped_nsobject<NSMutableAttributedString> attributedTitle_;
|
||||||
base::scoped_nsobject<NSStatusItem> statusItem_;
|
base::scoped_nsobject<NSStatusItem> statusItem_;
|
||||||
|
NSTrackingArea *trackingArea_;
|
||||||
}
|
}
|
||||||
|
|
||||||
@end // @interface StatusItemView
|
@end // @interface StatusItemView
|
||||||
|
@ -61,12 +62,12 @@ const CGFloat kVerticalTitleMargin = 2;
|
||||||
[self updateDimensions];
|
[self updateDimensions];
|
||||||
|
|
||||||
// Add NSTrackingArea for listening to mouseEnter, mouseExit, and mouseMove events
|
// Add NSTrackingArea for listening to mouseEnter, mouseExit, and mouseMove events
|
||||||
auto trackingArea = [[[NSTrackingArea alloc]
|
trackingArea_ = [[[NSTrackingArea alloc]
|
||||||
initWithRect:[self bounds]
|
initWithRect:[self bounds]
|
||||||
options:NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved | NSTrackingActiveAlways
|
options:NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved | NSTrackingActiveAlways
|
||||||
owner:self
|
owner:self
|
||||||
userInfo:nil] autorelease];
|
userInfo:nil] autorelease];
|
||||||
[self addTrackingArea:trackingArea];
|
[self addTrackingArea:trackingArea_];
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
@ -78,6 +79,8 @@ const CGFloat kVerticalTitleMargin = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)removeItem {
|
- (void)removeItem {
|
||||||
|
// Turn off tracking events to prevent crash
|
||||||
|
[self removeTrackingArea:trackingArea_];
|
||||||
[[NSStatusBar systemStatusBar] removeStatusItem:statusItem_];
|
[[NSStatusBar systemStatusBar] removeStatusItem:statusItem_];
|
||||||
statusItem_.reset();
|
statusItem_.reset();
|
||||||
}
|
}
|
||||||
|
@ -399,8 +402,9 @@ TrayIconCocoa::TrayIconCocoa() : menu_model_(nullptr) {
|
||||||
|
|
||||||
TrayIconCocoa::~TrayIconCocoa() {
|
TrayIconCocoa::~TrayIconCocoa() {
|
||||||
[status_item_view_ removeItem];
|
[status_item_view_ removeItem];
|
||||||
if (menu_model_)
|
if (menu_model_){
|
||||||
menu_model_->RemoveObserver(this);
|
menu_model_->RemoveObserver(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TrayIconCocoa::SetImage(const gfx::Image& image) {
|
void TrayIconCocoa::SetImage(const gfx::Image& image) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue