--- trunk/reactos/subsys/win32k/ntuser/winpos.c 2005-09-19 05:42:01 UTC (rev 17927)
+++ trunk/reactos/subsys/win32k/ntuser/winpos.c 2005-09-19 07:35:31 UTC (rev 17928)
@@ -1064,10 +1064,20 @@
/* Clear the update region */
co_UserRedrawWindow(Window, NULL, 0, RDW_VALIDATE | RDW_NOFRAME |
RDW_NOERASE | RDW_NOINTERNALPAINT | RDW_ALLCHILDREN);
+ if ((Window->Style & WS_VISIBLE) &&
+ Window->Parent == UserGetDesktopWindow())
+ {
+ co_IntShellHookNotify(HSHELL_WINDOWDESTROYED, (LPARAM)Window->hSelf);
+ }
Window->Style &= ~WS_VISIBLE;
}
else if (WinPos.flags & SWP_SHOWWINDOW)
{
+ if (!(Window->Style & WS_VISIBLE) &&
+ Window->Parent == UserGetDesktopWindow())
+ {
+ co_IntShellHookNotify(HSHELL_WINDOWCREATED, (LPARAM)Window->hSelf);
+ }
Window->Style |= WS_VISIBLE;
}
@@ -1199,11 +1209,22 @@
}
if (RgnType != ERROR && RgnType != NULLREGION)
{
- NtGdiOffsetRgn(DirtyRgn,
- Window->WindowRect.left - Window->ClientRect.left,
- Window->WindowRect.top - Window->ClientRect.top);
- co_UserRedrawWindow(Window, NULL, DirtyRgn,
- RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN);
+ if (Window->Parent)
+ {
+ NtGdiOffsetRgn(DirtyRgn,
+ Window->WindowRect.left - Window->Parent->ClientRect.left,
+ Window->WindowRect.top - Window->Parent->ClientRect.top);
+ co_UserRedrawWindow(Window->Parent, NULL, DirtyRgn,
+ RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN);
+ }
+ else
+ {
+ NtGdiOffsetRgn(DirtyRgn,
+ Window->WindowRect.left - Window->ClientRect.left,
+ Window->WindowRect.top - Window->ClientRect.top);
+ co_UserRedrawWindow(Window, NULL, DirtyRgn,
+ RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN);
+ }
}
NtGdiDeleteObject(DirtyRgn);
}
@@ -1363,14 +1384,6 @@
if (ShowFlag != WasVisible)
{
co_IntSendMessage(Window->hSelf, WM_SHOWWINDOW, ShowFlag, 0);
- /*
- * FIXME: Need to check the window wasn't destroyed during the
- * window procedure.
- */
- if (!(Window->Parent))
- {
- co_IntShellHookNotify(HSHELL_WINDOWCREATED, (LPARAM)Window->hSelf);
- }
}
/* We can't activate a child window */
@@ -1409,11 +1422,6 @@
//faxme: as long as we have ref on Window, we also, indirectly, have ref on parent...
co_UserSetFocus(Window->Parent);
}
-
- if (!(Window->Parent))
- {
- co_IntShellHookNotify(HSHELL_WINDOWDESTROYED, (LPARAM)Window->hSelf);
- }
}
/* FIXME: Check for window destruction. */