Explicitly ignore WM_GETICON message in the message tests

Dmitry Timoshkov dmitry at baikal.ru
Wed Sep 28 09:40:48 CDT 2005


Hello,

it appears that WM_GETICON is being sent by the Windows explorer when
it gets some shell notification and tries to draw an application icon
in response to that action. Ignoring that message dramatically reduces
number of message tests failures under XP SP1 for me, and I suggest
to apply this patch to ignore this junk message.

Changelog:
    Dmitry Timoshkov <dmitry at codeweavers.com>
    Explicitly ignore WM_GETICON message in the message tests.

--- cvs/hq/wine/dlls/user/tests/msg.c	Tue Sep 13 14:57:02 2005
+++ wine/dlls/user/tests/msg.c	Wed Sep 28 14:33:51 2005
@@ -242,9 +242,6 @@ static const struct message WmShowMaxOve
     { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOSIZE|SWP_NOMOVE },
     { WM_ACTIVATEAPP, sent|wparam, 1 },
     { WM_NCACTIVATE, sent|wparam, 1 },
-    { WM_GETICON, sent|optional },
-    { WM_GETICON, sent|optional },
-    { WM_GETICON, sent|optional },
     { WM_GETTEXT, sent|defwinproc|optional },
     { WM_ACTIVATE, sent|wparam, 1 },
     { HCBT_SETFOCUS, hook },
@@ -619,11 +616,8 @@ static const struct message WmCreateCust
     { EVENT_OBJECT_DEFACTIONCHANGE, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 },
     { WM_GETTEXT, sent|optional|defwinproc },
     { EVENT_OBJECT_DEFACTIONCHANGE, winevent_hook|wparam|lparam|optional, OBJID_CLIENT, 0 },
-    { WM_GETICON, sent|optional|defwinproc },
     { EVENT_OBJECT_DEFACTIONCHANGE, winevent_hook|wparam|lparam|optional, OBJID_CLIENT, 0 },
-    { WM_GETICON, sent|optional|defwinproc },
     { EVENT_OBJECT_DEFACTIONCHANGE, winevent_hook|wparam|lparam|optional, OBJID_CLIENT, 0 },
-    { WM_GETICON, sent|optional|defwinproc },
     { EVENT_OBJECT_DEFACTIONCHANGE, winevent_hook|wparam|lparam|optional, OBJID_CLIENT, 0 },
     { WM_GETTEXT, sent|optional|defwinproc },
     { EVENT_OBJECT_DEFACTIONCHANGE, winevent_hook|wparam|lparam|optional, OBJID_CLIENT, 0 },
@@ -645,11 +639,8 @@ static const struct message WmCreateCust
     { EVENT_OBJECT_DEFACTIONCHANGE, winevent_hook|wparam|lparam|optional, OBJID_CLIENT, 0 },
     { WM_GETTEXT, sent|optional|defwinproc },
     { EVENT_OBJECT_DEFACTIONCHANGE, winevent_hook|wparam|lparam|optional, OBJID_CLIENT, 0 },
-    { WM_GETICON, sent|optional|defwinproc },
     { EVENT_OBJECT_DEFACTIONCHANGE, winevent_hook|wparam|lparam|optional, OBJID_CLIENT, 0 },
-    { WM_GETICON, sent|optional|defwinproc },
     { EVENT_OBJECT_DEFACTIONCHANGE, winevent_hook|wparam|lparam|optional, OBJID_CLIENT, 0 },
-    { WM_GETICON, sent|optional|defwinproc },
     { EVENT_OBJECT_DEFACTIONCHANGE, winevent_hook|wparam|lparam|optional, OBJID_CLIENT, 0 },
     { WM_GETTEXT, sent|optional|defwinproc },
     { WM_ERASEBKGND, sent },
@@ -660,11 +651,8 @@ static const struct message WmCreateCust
     { EVENT_OBJECT_DEFACTIONCHANGE, winevent_hook|wparam|lparam|optional, OBJID_CLIENT, 0 },
     { WM_GETTEXT, sent|optional },
     { EVENT_OBJECT_DEFACTIONCHANGE, winevent_hook|wparam|lparam|optional, OBJID_CLIENT, 0 },
-    { WM_GETICON, sent|optional },
     { EVENT_OBJECT_DEFACTIONCHANGE, winevent_hook|wparam|lparam|optional, OBJID_CLIENT, 0 },
-    { WM_GETICON, sent|optional },
     { EVENT_OBJECT_DEFACTIONCHANGE, winevent_hook|wparam|lparam|optional, OBJID_CLIENT, 0 },
-    { WM_GETICON, sent|optional },
     { EVENT_OBJECT_DEFACTIONCHANGE, winevent_hook|wparam|lparam|optional, OBJID_CLIENT, 0 },
     { WM_GETTEXT, sent|optional },
     { EVENT_OBJECT_DEFACTIONCHANGE, winevent_hook|wparam|lparam|optional, OBJID_CLIENT, 0 },
@@ -674,11 +662,8 @@ static const struct message WmCreateCust
     { EVENT_OBJECT_DEFACTIONCHANGE, winevent_hook|wparam|lparam|optional, OBJID_CLIENT, 0 },
     { WM_GETTEXT, sent|optional|defwinproc },
     { EVENT_OBJECT_DEFACTIONCHANGE, winevent_hook|wparam|lparam|optional, OBJID_CLIENT, 0 },
-    { WM_GETICON, sent|optional|defwinproc },
     { EVENT_OBJECT_DEFACTIONCHANGE, winevent_hook|wparam|lparam|optional, OBJID_CLIENT, 0 },
-    { WM_GETICON, sent|optional|defwinproc },
     { EVENT_OBJECT_DEFACTIONCHANGE, winevent_hook|wparam|lparam|optional, OBJID_CLIENT, 0 },
-    { WM_GETICON, sent|optional|defwinproc },
     { EVENT_OBJECT_DEFACTIONCHANGE, winevent_hook|wparam|lparam|optional, OBJID_CLIENT, 0 },
     { WM_GETTEXT, sent|optional|defwinproc },
     { WM_ERASEBKGND, sent|optional },
@@ -695,15 +680,9 @@ static const struct message WmEndCustomD
     { EVENT_OBJECT_HIDE, winevent_hook|wparam|lparam, 0, 0 },
     { WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
     { WM_GETTEXT, sent|optional },
-    { WM_GETICON, sent|optional },
-    { WM_GETICON, sent|optional },
-    { WM_GETICON, sent|optional },
     { HCBT_ACTIVATE, hook },
     { WM_NCACTIVATE, sent|wparam, 0 },
     { WM_GETTEXT, sent|optional|defwinproc },
-    { WM_GETICON, sent|optional|defwinproc },
-    { WM_GETICON, sent|optional|defwinproc },
-    { WM_GETICON, sent|optional|defwinproc },
     { WM_GETTEXT, sent|optional|defwinproc },
     { WM_ACTIVATE, sent|wparam, 0 },
     { EVENT_SYSTEM_FOREGROUND, winevent_hook|wparam|lparam, 0, 0 },
@@ -783,30 +762,18 @@ static const struct message WmModalDialo
     { WM_QUERYNEWPALETTE, sent|wparam|lparam|optional, 0, 0 },
     { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOSIZE|SWP_NOMOVE },
     { WM_NCACTIVATE, sent|wparam, 1 },
-    { WM_GETICON, sent|optional },
-    { WM_GETICON, sent|optional },
-    { WM_GETICON, sent|optional },
     { WM_GETTEXT, sent|optional },
     { WM_ACTIVATE, sent|wparam, 1 },
     { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_NOACTIVATE },
     { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 },
     { WM_NCPAINT, sent },
-    { WM_GETICON, sent|optional },
-    { WM_GETICON, sent|optional },
-    { WM_GETICON, sent|optional },
     { WM_GETTEXT, sent|optional },
     { WM_ERASEBKGND, sent },
     { WM_CTLCOLORDLG, sent },
     { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
-    { WM_GETICON, sent|optional },
-    { WM_GETICON, sent|optional },
-    { WM_GETICON, sent|optional },
     { WM_GETTEXT, sent|optional },
     { WM_NCCALCSIZE, sent|optional },
     { WM_NCPAINT, sent|optional },
-    { WM_GETICON, sent|optional },
-    { WM_GETICON, sent|optional },
-    { WM_GETICON, sent|optional },
     { WM_GETTEXT, sent|optional },
     { WM_ERASEBKGND, sent|optional },
     { WM_CTLCOLORDLG, sent|optional },
@@ -832,24 +799,15 @@ static const struct message WmModalDialo
     { WM_ENTERIDLE, sent|parent|optional },
     { WM_ENTERIDLE, sent|parent|optional },
     { WM_ENTERIDLE, sent|parent|optional },
-    { WM_GETICON, sent|parent|optional },
-    { WM_GETICON, sent|parent|optional },
-    { WM_GETICON, sent|parent|optional },
     { WM_TIMER, sent },
     { EVENT_OBJECT_STATECHANGE, winevent_hook|wparam|lparam, 0, 0 },
     { WM_ENABLE, sent|parent|wparam, 1 },
     { WM_WINDOWPOSCHANGING, sent|wparam, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_NOACTIVATE },
     { EVENT_OBJECT_HIDE, winevent_hook|wparam|lparam, 0, 0 },
     { WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
-    { WM_GETICON, sent|optional },
-    { WM_GETICON, sent|optional },
-    { WM_GETICON, sent|optional },
     { WM_GETTEXT, sent|optional },
     { HCBT_ACTIVATE, hook },
     { WM_NCACTIVATE, sent|wparam, 0 },
-    { WM_GETICON, sent|optional },
-    { WM_GETICON, sent|optional },
-    { WM_GETICON, sent|optional },
     { WM_GETTEXT, sent|optional },
     { WM_ACTIVATE, sent|wparam, 0 },
     { EVENT_SYSTEM_FOREGROUND, winevent_hook|wparam|lparam, 0, 0 },
@@ -903,9 +861,6 @@ static const struct message WmSetMenuNon
     { WM_MOVE, sent|defwinproc },
     { WM_SIZE, sent|defwinproc },
     { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 },
-    { WM_GETICON, sent|optional },
-    { WM_GETICON, sent|optional },
-    { WM_GETICON, sent|optional },
     { WM_GETTEXT, sent|optional },
     { WM_NCCALCSIZE, sent|wparam|optional, 1 },
     { 0 }
@@ -1035,9 +990,6 @@ static const struct message WmSetScrollR
     { EVENT_OBJECT_REORDER, winevent_hook|wparam|lparam, 0, 0 },
     { WM_NCPAINT, sent|optional },
     { WM_GETTEXT, sent|defwinproc|optional },
-    { WM_GETICON, sent|optional|defwinproc },
-    { WM_GETICON, sent|optional|defwinproc },
-    { WM_GETICON, sent|optional|defwinproc },
     { WM_GETTEXT, sent|defwinproc|optional },
     { WM_ERASEBKGND, sent|optional },
     { WM_CTLCOLORDLG, sent|defwinproc|optional }, /* sent to a parent of the dialog */
@@ -1045,17 +997,8 @@ static const struct message WmSetScrollR
     { WM_SIZE, sent|defwinproc },
     { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 },
     { WM_GETTEXT, sent|optional },
-    { WM_GETICON, sent|optional },
-    { WM_GETICON, sent|optional },
-    { WM_GETICON, sent|optional },
     { WM_GETTEXT, sent|optional },
-    { WM_GETICON, sent|optional },
-    { WM_GETICON, sent|optional },
-    { WM_GETICON, sent|optional },
     { WM_GETTEXT, sent|optional },
-    { WM_GETICON, sent|optional },
-    { WM_GETICON, sent|optional },
-    { WM_GETICON, sent|optional },
     { WM_GETTEXT, sent|optional },
     { 0 }
 };
@@ -1092,9 +1035,6 @@ static const struct message WmSHOWNATopI
     { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE },
     { EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 },
     { WM_NCPAINT, sent|wparam, 1 },
-    { WM_GETICON, sent|optional },
-    { WM_GETICON, sent|optional },
-    { WM_GETICON, sent|optional },
     { WM_GETTEXT, sent|defwinproc|optional },
     { WM_ERASEBKGND, sent|optional },
     { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
@@ -1275,8 +1215,6 @@ static const struct message WmCreateMDIf
     { WM_ACTIVATEAPP, sent|wparam, 1 },
     { WM_NCACTIVATE, sent|wparam, 1 },
     { WM_GETTEXT, sent|defwinproc|optional },
-    { WM_GETICON, sent|defwinproc|optional },
-    { WM_GETICON, sent|defwinproc|optional },
     { WM_ACTIVATE, sent|wparam, 1 },
     { HCBT_SETFOCUS, hook },
     { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 },
@@ -2032,6 +1970,7 @@ static LRESULT WINAPI mdi_client_hook_pr
         message != WM_NCHITTEST &&
         message != WM_GETTEXT &&
         message != WM_MDIGETACTIVE &&
+        message != WM_GETICON &&
         message != WM_DEVICECHANGE)
     {
         trace("mdi client: %p, %04x, %08x, %08lx\n", hwnd, message, wParam, lParam);
@@ -2078,6 +2017,7 @@ static LRESULT WINAPI mdi_child_wnd_proc
         message != WM_NCPAINT &&
         message != WM_NCHITTEST &&
         message != WM_GETTEXT &&
+        message != WM_GETICON &&
         message != WM_DEVICECHANGE)
     {
         trace("mdi child: %p, %04x, %08x, %08lx\n", hwnd, message, wParam, lParam);
@@ -2142,6 +2082,7 @@ static LRESULT WINAPI mdi_frame_wnd_proc
         message != WM_NCPAINT &&
         message != WM_NCHITTEST &&
         message != WM_GETTEXT &&
+        message != WM_GETICON &&
         message != WM_DEVICECHANGE)
     {
         trace("mdi frame: %p, %04x, %08x, %08lx\n", hwnd, message, wParam, lParam);
@@ -2617,6 +2558,9 @@ static INT_PTR CALLBACK TestModalDlgProc
 
     trace("dialog: %p, %04x, %08x, %08lx\n", hwnd, message, wParam, lParam);
 
+    /* explicitly ignore WM_GETICON message */
+    if (message == WM_GETICON) return 0;
+
     switch (message)
     {
         case WM_WINDOWPOSCHANGING:
@@ -2966,7 +2910,7 @@ static void test_messages(void)
     ok(GetFocus() == hwnd, "window should have input focus\n");
     ShowWindow(hwnd, SW_HIDE);
     ok_sequence(WmHideOverlappedSeq, "ShowWindow(SW_HIDE):overlapped", TRUE);
-    
+
     ShowWindow(hwnd, SW_SHOW);
     ok_sequence(WmShowOverlappedSeq, "ShowWindow(SW_SHOW):overlapped", TRUE);
 
@@ -3358,6 +3302,9 @@ static LRESULT CALLBACK button_hook_proc
 
     trace("button: %p, %04x, %08x, %08lx\n", hwnd, message, wParam, lParam);
 
+    /* explicitly ignore WM_GETICON message */
+    if (message == WM_GETICON) return 0;
+
     msg.message = message;
     msg.flags = sent|wparam|lparam;
     if (defwndproc_counter) msg.flags |= defwinproc;
@@ -4295,6 +4242,7 @@ static void pump_msg_loop(HWND hwnd, HAC
 
         /* ignore some unwanted messages */
         if (msg.message == WM_MOUSEMOVE ||
+            msg.message == WM_GETICON ||
             msg.message == WM_DEVICECHANGE)
             continue;
 
@@ -4501,6 +4449,9 @@ static LRESULT WINAPI MsgCheckProcA(HWND
 
     trace("%p, %04x, %08x, %08lx\n", hwnd, message, wParam, lParam);
 
+    /* explicitly ignore WM_GETICON message */
+    if (message == WM_GETICON) return 0;
+
     switch (message)
     {
 	case WM_ENABLE:
@@ -4640,6 +4591,9 @@ static LRESULT WINAPI PopupMsgCheckProcA
 
     trace("popup: %p, %04x, %08x, %08lx\n", hwnd, message, wParam, lParam);
 
+    /* explicitly ignore WM_GETICON message */
+    if (message == WM_GETICON) return 0;
+
     msg.message = message;
     msg.flags = sent|wparam|lparam;
     if (defwndproc_counter) msg.flags |= defwinproc;
@@ -4669,6 +4623,9 @@ static LRESULT WINAPI ParentMsgCheckProc
 
     trace("parent: %p, %04x, %08x, %08lx\n", hwnd, message, wParam, lParam);
 
+    /* explicitly ignore WM_GETICON message */
+    if (message == WM_GETICON) return 0;
+
     if (log_all_parent_messages ||
         message == WM_PARENTNOTIFY || message == WM_CANCELMODE ||
 	message == WM_SETFOCUS || message == WM_KILLFOCUS ||
@@ -4708,6 +4665,9 @@ static LRESULT WINAPI TestDlgProcA(HWND 
     struct message msg;
 
     trace("dialog: %p, %04x, %08x, %08lx\n", hwnd, message, wParam, lParam);
+
+    /* explicitly ignore WM_GETICON message */
+    if (message == WM_GETICON) return 0;
 
     DefDlgProcA(hwnd, DM_SETDEFID, 1, 0);
     ret = DefDlgProcA(hwnd, DM_GETDEFID, 0, 0);






More information about the wine-patches mailing list