Module: wine Branch: master Commit: b564d972294fca82f3ebb3edf4600e69adb89f75 URL: http://source.winehq.org/git/wine.git/?a=commit;h=b564d972294fca82f3ebb3edf4...
Author: Ken Thomases ken@codeweavers.com Date: Sun Jan 27 16:19:56 2013 -0600
winemac: Implement an APP_DEACTIVATED event.
---
dlls/winemac.drv/cocoa_app.m | 11 +++++++++++ dlls/winemac.drv/event.c | 5 +++++ dlls/winemac.drv/macdrv.h | 1 + dlls/winemac.drv/macdrv_cocoa.h | 1 + dlls/winemac.drv/window.c | 15 +++++++++++++++ 5 files changed, 33 insertions(+), 0 deletions(-)
diff --git a/dlls/winemac.drv/cocoa_app.m b/dlls/winemac.drv/cocoa_app.m index 54a6d50..7b12185 100644 --- a/dlls/winemac.drv/cocoa_app.m +++ b/dlls/winemac.drv/cocoa_app.m @@ -179,7 +179,18 @@ int macdrv_err_on; */ - (void)applicationDidResignActive:(NSNotification *)notification { + macdrv_event event; + WineEventQueue* queue; + [self invalidateGotFocusEvents]; + + event.type = APP_DEACTIVATED; + event.window = NULL; + + [eventQueuesLock lock]; + for (queue in eventQueues) + [queue postEvent:&event]; + [eventQueuesLock unlock]; }
- (void)applicationWillFinishLaunching:(NSNotification *)notification diff --git a/dlls/winemac.drv/event.c b/dlls/winemac.drv/event.c index 634fe52..654e691 100644 --- a/dlls/winemac.drv/event.c +++ b/dlls/winemac.drv/event.c @@ -32,6 +32,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(event); static const char *dbgstr_event(int type) { static const char * const event_names[] = { + "APP_DEACTIVATED", "MOUSE_BUTTON", "WINDOW_CLOSE_REQUESTED", "WINDOW_FRAME_CHANGED", @@ -58,6 +59,7 @@ static macdrv_event_mask get_event_mask(DWORD mask)
if (mask & QS_POSTMESSAGE) { + event_mask |= event_mask_for_type(APP_DEACTIVATED); event_mask |= event_mask_for_type(WINDOW_CLOSE_REQUESTED); event_mask |= event_mask_for_type(WINDOW_FRAME_CHANGED); event_mask |= event_mask_for_type(WINDOW_GOT_FOCUS); @@ -85,6 +87,9 @@ void macdrv_handle_event(macdrv_event *event)
switch (event->type) { + case APP_DEACTIVATED: + macdrv_app_deactivated(); + break; case MOUSE_BUTTON: macdrv_mouse_button(hwnd, event); break; diff --git a/dlls/winemac.drv/macdrv.h b/dlls/winemac.drv/macdrv.h index e6c747f..d1b73fe 100644 --- a/dlls/winemac.drv/macdrv.h +++ b/dlls/winemac.drv/macdrv.h @@ -121,6 +121,7 @@ extern void macdrv_window_close_requested(HWND hwnd) DECLSPEC_HIDDEN; extern void macdrv_window_frame_changed(HWND hwnd, CGRect frame) DECLSPEC_HIDDEN; extern void macdrv_window_got_focus(HWND hwnd, const macdrv_event *event) DECLSPEC_HIDDEN; extern void macdrv_window_lost_focus(HWND hwnd, const macdrv_event *event) DECLSPEC_HIDDEN; +extern void macdrv_app_deactivated(void) DECLSPEC_HIDDEN;
extern void macdrv_mouse_button(HWND hwnd, const macdrv_event *event) DECLSPEC_HIDDEN;
diff --git a/dlls/winemac.drv/macdrv_cocoa.h b/dlls/winemac.drv/macdrv_cocoa.h index 2084d78..dcdf91d 100644 --- a/dlls/winemac.drv/macdrv_cocoa.h +++ b/dlls/winemac.drv/macdrv_cocoa.h @@ -124,6 +124,7 @@ extern void macdrv_free_displays(struct macdrv_display* displays) DECLSPEC_HIDDE
/* event */ enum { + APP_DEACTIVATED, MOUSE_BUTTON, WINDOW_CLOSE_REQUESTED, WINDOW_FRAME_CHANGED, diff --git a/dlls/winemac.drv/window.c b/dlls/winemac.drv/window.c index 5356687..810d3ae 100644 --- a/dlls/winemac.drv/window.c +++ b/dlls/winemac.drv/window.c @@ -1469,3 +1469,18 @@ void macdrv_window_lost_focus(HWND hwnd, const macdrv_event *event) if (hwnd == GetForegroundWindow()) SendMessageW(hwnd, WM_CANCELMODE, 0, 0); } + + +/*********************************************************************** + * macdrv_app_deactivated + * + * Handler for APP_DEACTIVATED events. + */ +void macdrv_app_deactivated(void) +{ + if (GetActiveWindow() == GetForegroundWindow()) + { + TRACE("setting fg to desktop\n"); + SetForegroundWindow(GetDesktopWindow()); + } +}