Author: gadamopoulos Date: Mon Dec 14 23:58:03 2009 New Revision: 44591
URL: http://svn.reactos.org/svn/reactos?rev=44591&view=rev Log: [win32k] - Don't store LastChild in WINDOW_OBJECT
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/window.c trunk/reactos/subsystems/win32/win32k/ntuser/winpos.c
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/window.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/window.c [iso-8859-1] (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/window.c [iso-8859-1] Mon Dec 14 23:58:03 2009 @@ -1060,11 +1060,6 @@ /* link after WndPrevSibling */ if ((Wnd->spwndNext = WndPrevSibling->spwndNext)) Wnd->spwndNext->spwndPrev = Wnd; - else if ((Parent = Wnd->spwndParent)) - { - if(Parent->LastChild == WndPrevSibling) - Parent->LastChild = Wnd; - } Wnd->spwndPrev->spwndNext = Wnd; } else @@ -1075,7 +1070,6 @@ Wnd->spwndNext->spwndPrev = Wnd; else if (Parent) { - Parent->LastChild = Wnd; Parent->spwndChild = Wnd; return; } @@ -1276,8 +1270,6 @@
if (Wnd->spwndNext) Wnd->spwndNext->spwndPrev = Wnd->spwndPrev; - else if (WndParent && WndParent->LastChild == Wnd) - WndParent->LastChild = Wnd->spwndPrev;
if (Wnd->spwndPrev) Wnd->spwndPrev->spwndNext = Wnd->spwndNext; @@ -1956,7 +1948,6 @@
Window->OwnerThread = PsGetCurrentThread(); Window->spwndChild = NULL; - Window->LastChild = NULL; Window->spwndPrev = NULL; Window->spwndNext = NULL;
@@ -2290,7 +2281,13 @@ { PWINDOW_OBJECT PrevSibling;
- PrevSibling = ParentWindow->LastChild; + PrevSibling = ParentWindow->spwndChild; + + if(PrevSibling) + { + while (PrevSibling->spwndNext) + PrevSibling = PrevSibling->spwndNext; + }
/* link window as bottom sibling */ IntLinkWindow(Window, ParentWindow, PrevSibling /*prev sibling*/); @@ -3698,8 +3695,16 @@ case GW_HWNDLAST: if((Parent = Window->spwndParent)) { - if (Parent->LastChild) - hWndResult = Parent->LastChild->hSelf; + if (Parent->spwndChild) + { + Window = Parent->spwndChild; + if(Window) + { + while(Window->spwndNext) + Window = Window->spwndNext; + } + hWndResult = Window->hSelf; + } } break;
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] Mon Dec 14 23:58:03 2009 @@ -1002,10 +1002,17 @@ } else if (WinPos.hwndInsertAfter == HWND_BOTTOM) { - if(ParentWindow->LastChild) + if(ParentWindow->spwndChild) { - UserReferenceObject(ParentWindow->LastChild); - InsertAfterWindow = ParentWindow->LastChild; + InsertAfterWindow = ParentWindow->spwndChild; + + if(InsertAfterWindow) + { + while (InsertAfterWindow->spwndNext) + InsertAfterWindow = InsertAfterWindow->spwndNext; + } + + UserReferenceObject(InsertAfterWindow); } else InsertAfterWindow = NULL;