Module: wine Branch: master Commit: beccf0f8c0598191afc334f0a5d9d84686d67df2 URL: http://source.winehq.org/git/wine.git/?a=commit;h=beccf0f8c0598191afc334f0a5...
Author: Ken Thomases ken@codeweavers.com Date: Sun Jan 27 16:19:45 2013 -0600
winemac: Maintain a list of which windows have been "key" (focused) recently.
---
dlls/winemac.drv/cocoa_app.h | 2 ++ dlls/winemac.drv/cocoa_app.m | 31 ++++++++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletions(-)
diff --git a/dlls/winemac.drv/cocoa_app.h b/dlls/winemac.drv/cocoa_app.h index 0955dea..40f9e9d 100644 --- a/dlls/winemac.drv/cocoa_app.h +++ b/dlls/winemac.drv/cocoa_app.h @@ -35,6 +35,8 @@ NSLock* eventQueuesLock;
NSTimeInterval eventTimeAdjustment; + + NSMutableArray* keyWindows; }
- (void) transformProcessToForeground; diff --git a/dlls/winemac.drv/cocoa_app.m b/dlls/winemac.drv/cocoa_app.m index 638e642..c69f09e 100644 --- a/dlls/winemac.drv/cocoa_app.m +++ b/dlls/winemac.drv/cocoa_app.m @@ -34,7 +34,9 @@ int macdrv_err_on; eventQueues = [[NSMutableArray alloc] init]; eventQueuesLock = [[NSLock alloc] init];
- if (!eventQueues || !eventQueuesLock) + keyWindows = [[NSMutableArray alloc] init]; + + if (!eventQueues || !eventQueuesLock || !keyWindows) { [self release]; return nil; @@ -45,6 +47,7 @@ int macdrv_err_on;
- (void) dealloc { + [keyWindows release]; [eventQueues release]; [eventQueuesLock release]; [super dealloc]; @@ -118,6 +121,32 @@ int macdrv_err_on; return (eventTime + eventTimeAdjustment) * 1000; }
+ + /* + * ---------- NSApplicationDelegate methods ---------- + */ + - (void)applicationWillFinishLaunching:(NSNotification *)notification + { + NSNotificationCenter* nc = [NSNotificationCenter defaultCenter]; + + [nc addObserverForName:NSWindowDidBecomeKeyNotification + object:nil + queue:nil + usingBlock:^(NSNotification *note){ + NSWindow* window = [note object]; + [keyWindows removeObjectIdenticalTo:window]; + [keyWindows insertObject:window atIndex:0]; + }]; + + [nc addObserverForName:NSWindowWillCloseNotification + object:nil + queue:[NSOperationQueue mainQueue] + usingBlock:^(NSNotification *note){ + NSWindow* window = [note object]; + [keyWindows removeObjectIdenticalTo:window]; + }]; + } + @end
/***********************************************************************