Author: gadamopoulos
Date: Wed Oct  6 11:14:58 2010
New Revision: 49011

URL: http://svn.reactos.org/svn/reactos?rev=49011&view=rev
Log:
[win32k]
- Send WM_PARENTNOTIFY message when a window is destroyed

Modified:
    trunk/reactos/subsystems/win32/win32k/ntuser/window.c

Modified: trunk/reactos/subsystems/win32/win32k/ntuser/window.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntuser/window.c?rev=49011&r1=49010&r2=49011&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/ntuser/window.c [iso-8859-1] 
(original)
+++ trunk/reactos/subsystems/win32/win32k/ntuser/window.c [iso-8859-1] Wed Oct  
6 11:14:58 2010
@@ -1592,6 +1592,21 @@
    return Ret;
 }
 
+ static void IntSendParentNotify( PWINDOW_OBJECT pWindow, UINT msg )
+ {
+     if ( (pWindow->Wnd->style & (WS_CHILD | WS_POPUP)) == WS_CHILD &&
+         !(pWindow->Wnd->style & WS_EX_NOPARENTNOTIFY))
+     {
+         if (pWindow->spwndParent && pWindow->spwndParent != 
UserGetDesktopWindow())
+         {
+             co_IntSendMessage( pWindow->spwndParent->hSelf, 
+                                WM_PARENTNOTIFY,
+                                MAKEWPARAM( msg, pWindow->Wnd->IDMenu), 
+                                (LPARAM)pWindow->hSelf );
+         }
+     }
+ }
+
 void FASTCALL
 IntFixWindowCoordinates(CREATESTRUCTW* Cs, PWINDOW_OBJECT ParentWindow, DWORD* 
dwShowMode)
 {
@@ -2151,14 +2166,7 @@
    }
 
    /* Send the WM_PARENTNOTIFY message */
-   if ((Wnd->style & WS_CHILD) &&
-       (!(Wnd->ExStyle & WS_EX_NOPARENTNOTIFY)) && ParentWindow)
-   {
-      co_IntSendMessage(ParentWindow->hSelf,
-                        WM_PARENTNOTIFY,
-                        MAKEWPARAM(WM_CREATE, Wnd->IDMenu),
-                        (LPARAM)Window->hSelf);
-   }
+   IntSendParentNotify(Window, WM_CREATE);
 
    /* Notify the shell that a new window was created */
    if ((!hWndParent) && (!hWndOwner))
@@ -2408,7 +2416,6 @@
 
 BOOLEAN FASTCALL co_UserDestroyWindow(PWINDOW_OBJECT Window)
 {
-   BOOLEAN isChild;
    PWND Wnd;
    HWND hWnd;
    PTHREADINFO ti;
@@ -2474,23 +2481,11 @@
    IntDereferenceMessageQueue(Window->pti->MessageQueue);
 
    IntEngWindowChanged(Window, WOC_DELETE);
-   isChild = (0 != (Wnd->style & WS_CHILD));
-
-#if 0 /* FIXME */
-
-   if (isChild)
-   {
-      if (! USER_IsExitingThread(GetCurrentThreadId()))
-      {
-         send_parent_notify(hwnd, WM_DESTROY);
-      }
-   }
-   else if (NULL != GetWindow(Wnd, GW_OWNER))
-   {
-      co_HOOK_CallHooks( WH_SHELL, HSHELL_WINDOWDESTROYED, (WPARAM)hwnd, 0L, 
TRUE );
-      /* FIXME: clean up palette - see "Internals" p.352 */
-   }
-#endif
+
+   if (Wnd->style & WS_CHILD)
+   {
+      IntSendParentNotify(Window, WM_DESTROY);
+   }
 
    if (!IntIsWindow(Window->hSelf))
    {
@@ -2498,7 +2493,7 @@
    }
 
    /* Recursively destroy owned windows */
-   if (! isChild)
+   if (! (Wnd->style & WS_CHILD))
    {
       for (;;)
       {


Reply via email to