Author: rharabien Date: Sat Jun 18 12:41:29 2011 New Revision: 52332
URL: http://svn.reactos.org/svn/reactos?rev=52332&view=rev Log: [WIN32K] - Don't clip siblings in co_WinPosSetWindowPos when window has no WS_CLIPSIBLINGS style. Fixes ReactOS about box. - Commented out line with WS_CLIPCHILDREN support needs more work - Simplify co_WinPosSetWindowPos a bit
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/vis.c trunk/reactos/subsystems/win32/win32k/ntuser/winpos.c
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/vis.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/vis.c [iso-8859-1] (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/vis.c [iso-8859-1] Sat Jun 18 12:41:29 2011 @@ -156,12 +156,12 @@
ASSERT_REFS_CO(Wnd);
- Temp = IntSysCreateRectRgn(0, 0, 0, 0); - NtGdiCombineRgn(Temp, NewlyExposed, NULL, RGN_COPY); - Parent = Wnd->spwndParent; if(Parent) { + Temp = IntSysCreateRectRgn(0, 0, 0, 0); + + NtGdiCombineRgn(Temp, NewlyExposed, NULL, RGN_COPY); NtGdiOffsetRgn(Temp, Wnd->rcWindow.left - Parent->rcClient.left, Wnd->rcWindow.top - Parent->rcClient.top); @@ -171,8 +171,9 @@ RDW_FRAME | RDW_ERASE | RDW_INVALIDATE | RDW_ALLCHILDREN); UserDerefObjectCo(Parent); + + GreDeleteObject(Temp); } - GreDeleteObject(Temp); }
/* EOF */
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/winpos.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/winpos.c [iso-8859-1] (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/winpos.c [iso-8859-1] Sat Jun 18 12:41:29 2011 @@ -982,7 +982,6 @@ int RgnType; HDC Dc; RECTL CopyRect; - RECTL TempRect; PWND Ancestor;
ASSERT_REFS_CO(Window); @@ -1033,17 +1032,19 @@ if (!(WinPos.flags & SWP_NOREDRAW)) { /* Compute the visible region before the window position is changed */ - if (!(WinPos.flags & (SWP_NOREDRAW | SWP_SHOWWINDOW)) && + if (!(WinPos.flags & SWP_SHOWWINDOW) && (WinPos.flags & (SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_HIDEWINDOW | SWP_FRAMECHANGED)) != (SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER)) { - VisBefore = VIS_ComputeVisibleRegion(Window, FALSE, FALSE, TRUE); + VisBefore = VIS_ComputeVisibleRegion(Window, FALSE, + FALSE, //(Window->style & WS_CLIPCHILDREN) ? TRUE : FALSE, + (Window->style & WS_CLIPSIBLINGS) ? TRUE : FALSE); VisRgn = NULL;
if ( VisBefore != NULL && (VisRgn = (PROSRGNDATA)RGNOBJAPI_Lock(VisBefore, NULL)) && - REGION_GetRgnBox(VisRgn, &TempRect) == NULLREGION ) + REGION_Complexity(VisRgn) == NULLREGION ) { RGNOBJAPI_Unlock(VisRgn); GreDeleteObject(VisBefore); @@ -1084,8 +1085,8 @@
/* FIXME: Actually do something with WVR_VALIDRECTS */
- if ( NewClientRect.left != OldClientRect.left || - NewClientRect.top != OldClientRect.top) + if (NewClientRect.left != OldClientRect.left || + NewClientRect.top != OldClientRect.top) { WinPosInternalMoveWindow(Window, NewClientRect.left - OldClientRect.left, @@ -1095,7 +1096,7 @@ Window->rcWindow = NewWindowRect; Window->rcClient = NewClientRect;
- if (!(WinPos.flags & SWP_SHOWWINDOW) && (WinPos.flags & SWP_HIDEWINDOW)) + if (WinPos.flags & SWP_HIDEWINDOW) { /* Clear the update region */ co_UserRedrawWindow( Window, @@ -1103,11 +1104,9 @@ 0, RDW_VALIDATE | RDW_NOFRAME | RDW_NOERASE | RDW_NOINTERNALPAINT | RDW_ALLCHILDREN);
- if ((Window->style & WS_VISIBLE) && - Window->spwndParent == UserGetDesktopWindow()) - { + if (Window->spwndParent == UserGetDesktopWindow()) co_IntShellHookNotify(HSHELL_WINDOWDESTROYED, (LPARAM)Window->head.h); - } + Window->style &= ~WS_VISIBLE; } else if (WinPos.flags & SWP_SHOWWINDOW) @@ -1130,12 +1129,14 @@ if (!(WinPos.flags & SWP_NOREDRAW)) { /* Determine the new visible region */ - VisAfter = VIS_ComputeVisibleRegion(Window, FALSE, FALSE, TRUE); + VisAfter = VIS_ComputeVisibleRegion(Window, FALSE, + FALSE,//(Window->style & WS_CLIPCHILDREN) ? TRUE : FALSE, + (Window->style & WS_CLIPSIBLINGS) ? TRUE : FALSE); VisRgn = NULL;
if ( VisAfter != NULL && (VisRgn = (PROSRGNDATA)RGNOBJAPI_Lock(VisAfter, NULL)) && - REGION_GetRgnBox(VisRgn, &TempRect) == NULLREGION ) + REGION_Complexity(VisRgn) == NULLREGION ) { RGNOBJAPI_Unlock(VisRgn); GreDeleteObject(VisAfter); @@ -1309,15 +1310,13 @@ if (VisBefore != NULL) { ExposedRgn = IntSysCreateRectRgn(0, 0, 0, 0); - NtGdiCombineRgn(ExposedRgn, VisBefore, NULL, RGN_COPY); + RgnType = NtGdiCombineRgn(ExposedRgn, VisBefore, NULL, RGN_COPY); NtGdiOffsetRgn( ExposedRgn, OldWindowRect.left - NewWindowRect.left, OldWindowRect.top - NewWindowRect.top);
if (VisAfter != NULL) RgnType = NtGdiCombineRgn(ExposedRgn, ExposedRgn, VisAfter, RGN_DIFF); - else - RgnType = SIMPLEREGION;
if (RgnType != ERROR && RgnType != NULLREGION) {