Ken Thomases : winemac: When removing the status item for a systray icon, discard any associated events in the queue.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Aug 6 15:52:12 CDT 2014
Module: wine
Branch: master
Commit: 9d1cfecc6d45fd37512f454111639d4ffbf32664
URL: http://source.winehq.org/git/wine.git/?a=commit;h=9d1cfecc6d45fd37512f454111639d4ffbf32664
Author: Ken Thomases <ken at codeweavers.com>
Date: Tue Aug 5 19:11:09 2014 -0500
winemac: When removing the status item for a systray icon, discard any associated events in the queue.
---
dlls/winemac.drv/cocoa_event.m | 13 ++++++++++---
dlls/winemac.drv/cocoa_status_item.m | 6 ++++++
2 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/dlls/winemac.drv/cocoa_event.m b/dlls/winemac.drv/cocoa_event.m
index 85cac5f..757ad6b 100644
--- a/dlls/winemac.drv/cocoa_event.m
+++ b/dlls/winemac.drv/cocoa_event.m
@@ -267,7 +267,7 @@ static const OSType WineHotKeySignature = 'Wine';
return ret;
}
- - (void) discardEventsMatchingMask:(macdrv_event_mask)mask forWindow:(NSWindow*)window
+ - (void) discardEventsPassingTest:(BOOL (^)(macdrv_event* event))block
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
NSIndexSet* indexes;
@@ -276,8 +276,7 @@ static const OSType WineHotKeySignature = 'Wine';
indexes = [events indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop){
MacDrvEvent* event = obj;
- return ((event_mask_for_type(event->event->type) & mask) &&
- (!window || event->event->window == (macdrv_window)window));
+ return block(event->event);
}];
[events removeObjectsAtIndexes:indexes];
@@ -287,6 +286,14 @@ static const OSType WineHotKeySignature = 'Wine';
[pool release];
}
+ - (void) discardEventsMatchingMask:(macdrv_event_mask)mask forWindow:(NSWindow*)window
+ {
+ [self discardEventsPassingTest:^BOOL (macdrv_event* event){
+ return ((event_mask_for_type(event->type) & mask) &&
+ (!window || event->window == (macdrv_window)window));
+ }];
+ }
+
- (BOOL) query:(macdrv_query*)query timeout:(NSTimeInterval)timeout processEvents:(BOOL)processEvents
{
macdrv_event* event;
diff --git a/dlls/winemac.drv/cocoa_status_item.m b/dlls/winemac.drv/cocoa_status_item.m
index f0a5863..c38dc51 100644
--- a/dlls/winemac.drv/cocoa_status_item.m
+++ b/dlls/winemac.drv/cocoa_status_item.m
@@ -96,6 +96,12 @@
NSStatusBar* statusBar = [NSStatusBar systemStatusBar];
[statusBar removeStatusItem:item];
[item setView:nil];
+
+ [queue discardEventsPassingTest:^BOOL (macdrv_event* event){
+ return ((event->type == STATUS_ITEM_MOUSE_BUTTON && event->status_item_mouse_button.item == (macdrv_status_item)self) ||
+ (event->type == STATUS_ITEM_MOUSE_MOVE && event->status_item_mouse_move.item == (macdrv_status_item)self));
+ }];
+
self.item = nil;
}
}
More information about the wine-cvs
mailing list