Module: wine Branch: master Commit: 2d1396af32f8897c11dec2771b9a912b5348dfda URL: http://source.winehq.org/git/wine.git/?a=commit;h=2d1396af32f8897c11dec2771b...
Author: Ken Thomases ken@codeweavers.com Date: Sun Dec 29 21:33:14 2013 -0600
winemac: Extract some duplicated code to a new perform_window_command() function.
This also changes to posting rather than sending WM_SYSCOMMAND/SC_MINIMIZE.
---
dlls/winemac.drv/event.c | 2 +- dlls/winemac.drv/window.c | 127 +++++++++++++++++++++------------------------ 2 files changed, 61 insertions(+), 68 deletions(-)
diff --git a/dlls/winemac.drv/event.c b/dlls/winemac.drv/event.c index 13f55f5..7caff22 100644 --- a/dlls/winemac.drv/event.c +++ b/dlls/winemac.drv/event.c @@ -104,7 +104,6 @@ static macdrv_event_mask get_event_mask(DWORD mask) event_mask |= event_mask_for_type(IM_SET_TEXT); event_mask |= event_mask_for_type(STATUS_ITEM_MOUSE_BUTTON); event_mask |= event_mask_for_type(STATUS_ITEM_MOUSE_MOVE); - event_mask |= event_mask_for_type(WINDOW_CLOSE_REQUESTED); event_mask |= event_mask_for_type(WINDOW_DID_UNMINIMIZE); event_mask |= event_mask_for_type(WINDOW_FRAME_CHANGED); event_mask |= event_mask_for_type(WINDOW_GOT_FOCUS); @@ -116,6 +115,7 @@ static macdrv_event_mask get_event_mask(DWORD mask) event_mask |= event_mask_for_type(QUERY_EVENT); event_mask |= event_mask_for_type(RELEASE_CAPTURE); event_mask |= event_mask_for_type(WINDOW_BROUGHT_FORWARD); + event_mask |= event_mask_for_type(WINDOW_CLOSE_REQUESTED); event_mask |= event_mask_for_type(WINDOW_DRAG_BEGIN); event_mask |= event_mask_for_type(WINDOW_DRAG_END); event_mask |= event_mask_for_type(WINDOW_MINIMIZE_REQUESTED); diff --git a/dlls/winemac.drv/window.c b/dlls/winemac.drv/window.c index 91a1d4d..715d5a3 100644 --- a/dlls/winemac.drv/window.c +++ b/dlls/winemac.drv/window.c @@ -1164,6 +1164,50 @@ static LRESULT move_window(HWND hwnd, WPARAM wparam) }
+/*********************************************************************** + * perform_window_command + */ +static void perform_window_command(HWND hwnd, DWORD style_any, DWORD style_none, WORD command, WORD hittest) +{ + DWORD style; + + TRACE("win %p style_any 0x%08x style_none 0x%08x command 0x%04x hittest 0x%04x\n", + hwnd, style_any, style_none, command, hittest); + + style = GetWindowLongW(hwnd, GWL_STYLE); + if ((style_any && !(style & style_any)) || (style & (WS_DISABLED | style_none))) + { + TRACE("not changing win %p style 0x%08x\n", hwnd, style); + return; + } + + if (GetActiveWindow() != hwnd) + { + LRESULT ma = SendMessageW(hwnd, WM_MOUSEACTIVATE, (WPARAM)GetAncestor(hwnd, GA_ROOT), + MAKELPARAM(hittest, WM_NCLBUTTONDOWN)); + switch (ma) + { + case MA_NOACTIVATEANDEAT: + case MA_ACTIVATEANDEAT: + TRACE("not changing win %p mouse-activate result %ld\n", hwnd, ma); + return; + case MA_NOACTIVATE: + break; + case MA_ACTIVATE: + case 0: + SetActiveWindow(hwnd); + break; + default: + WARN("unknown WM_MOUSEACTIVATE code %ld\n", ma); + break; + } + } + + TRACE("changing win %p\n", hwnd); + PostMessageW(hwnd, WM_SYSCOMMAND, command, 0); +} + + /********************************************************************** * CreateDesktopWindow (MACDRV.@) */ @@ -1850,45 +1894,26 @@ done: */ void macdrv_window_close_requested(HWND hwnd) { - /* Ignore the delete window request if the window has been disabled. This - * is to disallow applications from being closed while in a modal state. - */ - if (IsWindowEnabled(hwnd)) + HMENU sysmenu; + + if (GetClassLongW(hwnd, GCL_STYLE) & CS_NOCLOSE) { - HMENU hSysMenu; + TRACE("not closing win %p class style CS_NOCLOSE\n", hwnd); + return; + }
- if (GetClassLongW(hwnd, GCL_STYLE) & CS_NOCLOSE) return; - hSysMenu = GetSystemMenu(hwnd, FALSE); - if (hSysMenu) - { - UINT state = GetMenuState(hSysMenu, SC_CLOSE, MF_BYCOMMAND); - if (state == 0xFFFFFFFF || (state & (MF_DISABLED | MF_GRAYED))) - return; - } - if (GetActiveWindow() != hwnd) + sysmenu = GetSystemMenu(hwnd, FALSE); + if (sysmenu) + { + UINT state = GetMenuState(sysmenu, SC_CLOSE, MF_BYCOMMAND); + if (state == 0xFFFFFFFF || (state & (MF_DISABLED | MF_GRAYED))) { - LRESULT ma = SendMessageW(hwnd, WM_MOUSEACTIVATE, - (WPARAM)GetAncestor(hwnd, GA_ROOT), - MAKELPARAM(HTCLOSE, WM_NCLBUTTONDOWN)); - switch(ma) - { - case MA_NOACTIVATEANDEAT: - case MA_ACTIVATEANDEAT: - return; - case MA_NOACTIVATE: - break; - case MA_ACTIVATE: - case 0: - SetActiveWindow(hwnd); - break; - default: - WARN("unknown WM_MOUSEACTIVATE code %d\n", (int) ma); - break; - } + TRACE("not closing win %p menu state 0x%08x\n", hwnd, state); + return; } - - PostMessageW(hwnd, WM_SYSCOMMAND, SC_CLOSE, 0); } + + perform_window_command(hwnd, 0, 0, SC_CLOSE, HTCLOSE); }
@@ -2036,39 +2061,7 @@ void macdrv_app_deactivated(void) */ void macdrv_window_minimize_requested(HWND hwnd) { - DWORD style; - - style = GetWindowLongW(hwnd, GWL_STYLE); - if (!(style & WS_MINIMIZEBOX) || (style & (WS_DISABLED | WS_MINIMIZE))) - { - TRACE("not minimizing win %p style 0x%08x\n", hwnd, style); - return; - } - - if (GetActiveWindow() != hwnd) - { - LRESULT ma = SendMessageW(hwnd, WM_MOUSEACTIVATE, (WPARAM)GetAncestor(hwnd, GA_ROOT), - MAKELPARAM(HTMINBUTTON, WM_NCLBUTTONDOWN)); - switch (ma) - { - case MA_NOACTIVATEANDEAT: - case MA_ACTIVATEANDEAT: - TRACE("not minimizing win %p mouse-activate result %ld\n", hwnd, ma); - return; - case MA_NOACTIVATE: - break; - case MA_ACTIVATE: - case 0: - SetActiveWindow(hwnd); - break; - default: - WARN("unknown WM_MOUSEACTIVATE code %ld\n", ma); - break; - } - } - - TRACE("minimizing win %p\n", hwnd); - SendMessageW(hwnd, WM_SYSCOMMAND, SC_MINIMIZE, 0); + perform_window_command(hwnd, WS_MINIMIZEBOX, WS_MINIMIZE, SC_MINIMIZE, HTMINBUTTON); }