Ken Thomases : winemac: Extract some duplicated code to a new perform_window_command() function.

Alexandre Julliard julliard at winehq.org
Mon Dec 30 13:06:00 CST 2013


Module: wine
Branch: master
Commit: 2d1396af32f8897c11dec2771b9a912b5348dfda
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=2d1396af32f8897c11dec2771b9a912b5348dfda

Author: Ken Thomases <ken at 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);
 }
 
 




More information about the wine-cvs mailing list