From 596c16cc13f9f2af24d0e8e88519de9f1d1a3a4e Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Tue, 31 May 2016 13:53:15 +0900 Subject: [PATCH] user32: Post notification to the desktop window for window creation/activation. Signed-off-by: Alexandre Julliard --- dlls/user32/nonclient.c | 9 +++++++++ dlls/user32/win.c | 3 +++ 2 files changed, 12 insertions(+) diff --git a/dlls/user32/nonclient.c b/dlls/user32/nonclient.c index 3352e46363b..a9de8126de6 100644 --- a/dlls/user32/nonclient.c +++ b/dlls/user32/nonclient.c @@ -1102,6 +1102,7 @@ static void NC_DoNCPaint( HWND hwnd, HRGN clip ) */ LRESULT NC_HandleNCPaint( HWND hwnd , HRGN clip) { + HWND parent = GetAncestor( hwnd, GA_PARENT ); DWORD dwStyle = GetWindowLongW( hwnd, GWL_STYLE ); if( dwStyle & WS_VISIBLE ) @@ -1110,6 +1111,9 @@ LRESULT NC_HandleNCPaint( HWND hwnd , HRGN clip) WINPOS_RedrawIconTitle( hwnd ); else NC_DoNCPaint( hwnd, clip ); + + if (parent == GetDesktopWindow()) + PostMessageW( parent, WM_PARENTNOTIFY, WM_NCPAINT, (LPARAM)hwnd ); } return 0; } @@ -1122,6 +1126,7 @@ LRESULT NC_HandleNCPaint( HWND hwnd , HRGN clip) */ LRESULT NC_HandleNCActivate( HWND hwnd, WPARAM wParam, LPARAM lParam ) { + HWND parent; WND* wndPtr = WIN_GetPtr( hwnd ); if (!wndPtr || wndPtr == WND_OTHER_PROCESS) return FALSE; @@ -1133,6 +1138,7 @@ LRESULT NC_HandleNCActivate( HWND hwnd, WPARAM wParam, LPARAM lParam ) */ if (wParam) wndPtr->flags |= WIN_NCACTIVATED; else wndPtr->flags &= ~WIN_NCACTIVATED; + parent = wndPtr->parent; WIN_ReleasePtr( wndPtr ); /* This isn't documented but is reproducible in at least XP SP2 and @@ -1144,6 +1150,9 @@ LRESULT NC_HandleNCActivate( HWND hwnd, WPARAM wParam, LPARAM lParam ) WINPOS_RedrawIconTitle( hwnd ); else NC_DoNCPaint( hwnd, (HRGN)1 ); + + if (parent == GetDesktopWindow()) + PostMessageW( parent, WM_PARENTNOTIFY, WM_NCACTIVATE, (LPARAM)hwnd ); } return TRUE; diff --git a/dlls/user32/win.c b/dlls/user32/win.c index 8474e2d9821..eb1aedaf1f9 100644 --- a/dlls/user32/win.c +++ b/dlls/user32/win.c @@ -1659,6 +1659,9 @@ HWND WIN_CreateWindowEx( CREATESTRUCTW *cs, LPCWSTR className, HINSTANCE module, send_parent_notify( hwnd, WM_CREATE ); if (!IsWindow( hwnd )) return 0; + if (parent == GetDesktopWindow()) + PostMessageW( parent, WM_PARENTNOTIFY, WM_CREATE, (LPARAM)hwnd ); + if (cs->style & WS_VISIBLE) { if (cs->style & WS_MAXIMIZE)