[PATCH v2 4/5] user32: Always send WM_CANCELMODE when disabling a window.

Zebediah Figura z.figura12 at gmail.com
Fri Mar 17 09:48:37 CDT 2017


Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
 dlls/user32/tests/msg.c | 21 ++++++++++++++++++++-
 dlls/user32/win.c       | 15 +++++++++------
 2 files changed, 29 insertions(+), 7 deletions(-)

diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c
index a682b70..7d448cc 100644
--- a/dlls/user32/tests/msg.c
+++ b/dlls/user32/tests/msg.c
@@ -1796,11 +1796,24 @@ static const struct message WmEnableWindowSeq_1[] =
 
 static const struct message WmEnableWindowSeq_2[] =
 {
+    { WM_CANCELMODE, sent|wparam|lparam, 0, 0 },
+    { EVENT_OBJECT_STATECHANGE, winevent_hook|wparam|lparam, 0, 0 },
+    { 0 }
+};
+
+static const struct message WmEnableWindowSeq_3[] =
+{
     { EVENT_OBJECT_STATECHANGE, winevent_hook|wparam|lparam, 0, 0 },
     { WM_ENABLE, sent|wparam|lparam, TRUE, 0 },
     { 0 }
 };
 
+static const struct message WmEnableWindowSeq_4[] =
+{
+    { EVENT_OBJECT_STATECHANGE, winevent_hook|wparam|lparam, 0, 0 },
+    { 0 }
+};
+
 static const struct message WmGetScrollRangeSeq[] =
 {
     { SBM_GETRANGE, sent },
@@ -5484,8 +5497,14 @@ static void test_messages(void)
     EnableWindow(hparent, FALSE);
     ok_sequence(WmEnableWindowSeq_1, "EnableWindow(FALSE)", FALSE);
 
+    EnableWindow(hparent, FALSE);
+    ok_sequence(WmEnableWindowSeq_2, "EnableWindow(FALSE)", FALSE);
+
+    EnableWindow(hparent, TRUE);
+    ok_sequence(WmEnableWindowSeq_3, "EnableWindow(TRUE)", FALSE);
+
     EnableWindow(hparent, TRUE);
-    ok_sequence(WmEnableWindowSeq_2, "EnableWindow(TRUE)", FALSE);
+    ok_sequence(WmEnableWindowSeq_4, "EnableWindow(TRUE)", FALSE);
 
     flush_events();
     flush_sequence();
diff --git a/dlls/user32/win.c b/dlls/user32/win.c
index fb8f948..d34037a 100644
--- a/dlls/user32/win.c
+++ b/dlls/user32/win.c
@@ -2152,16 +2152,19 @@ BOOL WINAPI EnableWindow( HWND hwnd, BOOL enable )
         WIN_SetStyle( hwnd, 0, WS_DISABLED );
         SendMessageW( hwnd, WM_ENABLE, TRUE, 0 );
     }
-    else if (!enable && !retvalue)
+    else if (!enable)
     {
-        SendMessageW( hwnd, WM_CANCELMODE, 0, 0);
+        SendMessageW(hwnd, WM_CANCELMODE, 0, 0);
 
-        WIN_SetStyle( hwnd, WS_DISABLED, 0 );
+        if (!retvalue)
+        {
+            WIN_SetStyle(hwnd, WS_DISABLED, 0);
 
-        if (hwnd == GetFocus())
-            SetFocus( 0 );  /* A disabled window can't have the focus */
+            if (hwnd == GetFocus())
+                SetFocus(0); /* A disabled window can't have the focus */
 
-        SendMessageW( hwnd, WM_ENABLE, FALSE, 0 );
+            SendMessageW(hwnd, WM_ENABLE, FALSE, 0);
+        }
     }
     return retvalue;
 }
-- 
2.7.4




More information about the wine-patches mailing list