make window parent a pointer + fix usage
Modified: trunk/reactos/subsys/win32k/include/window.h
Modified: trunk/reactos/subsys/win32k/ntuser/focus.c
Modified: trunk/reactos/subsys/win32k/ntuser/object.c
Modified: trunk/reactos/subsys/win32k/ntuser/painting.c
Modified: trunk/reactos/subsys/win32k/ntuser/window.c
Modified: trunk/reactos/subsys/win32k/ntuser/winpos.c
_____
Modified: trunk/reactos/subsys/win32k/include/window.h
--- trunk/reactos/subsys/win32k/include/window.h 2005-09-06
13:36:04 UTC (rev 17696)
+++ trunk/reactos/subsys/win32k/include/window.h 2005-09-06
14:09:22 UTC (rev 17697)
@@ -72,9 +72,9 @@
/* Entry in the list of thread windows. */
LIST_ENTRY ThreadListEntry;
/* Handle to the parent window. */
- HANDLE Parent;
+ struct _WINDOW_OBJECT* Parent;
/* Handle to the owner window. */
- HANDLE Owner;
+ HWND hOwner;
/* DC Entries (DCE) */
PDCE Dce;
/* Property list head.*/
_____
Modified: trunk/reactos/subsys/win32k/ntuser/focus.c
--- trunk/reactos/subsys/win32k/ntuser/focus.c 2005-09-06 13:36:04 UTC
(rev 17696)
+++ trunk/reactos/subsys/win32k/ntuser/focus.c 2005-09-06 14:09:22 UTC
(rev 17697)
@@ -129,7 +129,7 @@
for(Child = Root->FirstChild; Child; Child = Child->NextSibling)
{
- OwnerWnd = IntGetWindowObject(Child->Owner);
+ OwnerWnd = IntGetWindowObject(Child->hOwner);
if(!OwnerWnd)
continue;
_____
Modified: trunk/reactos/subsys/win32k/ntuser/object.c
--- trunk/reactos/subsys/win32k/ntuser/object.c 2005-09-06 13:36:04 UTC
(rev 17696)
+++ trunk/reactos/subsys/win32k/ntuser/object.c 2005-09-06 14:09:22 UTC
(rev 17697)
@@ -52,6 +52,8 @@
{
DPRINT1("ObjectHeader 0x%X has invalid reference count (%d)\n",
ObjectHeader, ObjectHeader->RefCount);
+
+ ASSERT(FALSE);
}
if (ObjectHeader->HandleCount < 0)
_____
Modified: trunk/reactos/subsys/win32k/ntuser/painting.c
--- trunk/reactos/subsys/win32k/ntuser/painting.c 2005-09-06
13:36:04 UTC (rev 17696)
+++ trunk/reactos/subsys/win32k/ntuser/painting.c 2005-09-06
14:09:22 UTC (rev 17697)
@@ -42,7 +42,7 @@
VOID FASTCALL
IntValidateParent(PWINDOW_OBJECT Child, HRGN ValidRegion)
{
- PWINDOW_OBJECT ParentWindow = IntGetParentObject(Child), OldWindow;
+ PWINDOW_OBJECT ParentWindow = Child->Parent;
while (ParentWindow)
{
@@ -65,9 +65,8 @@
NtGdiOffsetRgn(ValidRegion, -OffsetX, -OffsetY);
}
}
- OldWindow = ParentWindow;
- ParentWindow = IntGetParentObject(ParentWindow);
- IntReleaseWindowObject(OldWindow);
+
+ ParentWindow = ParentWindow->Parent;
}
}
_____
Modified: trunk/reactos/subsys/win32k/ntuser/window.c
--- trunk/reactos/subsys/win32k/ntuser/window.c 2005-09-06 13:36:04 UTC
(rev 17696)
+++ trunk/reactos/subsys/win32k/ntuser/window.c 2005-09-06 14:09:22 UTC
(rev 17697)
@@ -147,13 +147,17 @@
if (Wnd->Style & WS_POPUP)
{
- hWnd = Wnd->Owner;
+ hWnd = Wnd->hOwner;
return IntGetWindowObject(hWnd);
}
else if (Wnd->Style & WS_CHILD)
{
- hWnd = Wnd->Parent;
- return IntGetWindowObject(hWnd);
+ PWINDOW_OBJECT par;
+
+ par = Wnd->Parent;
+ if (par) IntReferenceWindowObject(par);
+ return par;
+ //return IntGetWindowObject(hWnd);
}
return NULL;
@@ -164,7 +168,7 @@
{
HWND hWnd;
- hWnd = Wnd->Owner;
+ hWnd = Wnd->hOwner;
return IntGetWindowObject(hWnd);
}
@@ -172,10 +176,11 @@
PWINDOW_OBJECT FASTCALL
IntGetParentObject(PWINDOW_OBJECT Wnd)
{
- HWND hParent;
-
- hParent = Wnd->Parent;
- return IntGetWindowObject(hParent);
+ PWINDOW_OBJECT par;
+
+ par = Wnd->Parent;
+ if (par) IntReferenceWindowObject(par);
+ return par;
}
/*
@@ -759,9 +764,9 @@
BOOL FASTCALL
IntIsChildWindow(HWND Parent, HWND Child)
{
- PWINDOW_OBJECT BaseWindow, Window, Old;
+ PWINDOW_OBJECT BaseWindow, Window;
- if(!(BaseWindow = IntGetWindowObject(Child)))
+ if(!(BaseWindow = UserGetWindowObjectNoRef(Child)))
{
return FALSE;
}
@@ -771,24 +776,16 @@
{
if (Window->hSelf == Parent)
{
- if(Window != BaseWindow)
- IntReleaseWindowObject(Window);
- IntReleaseWindowObject(BaseWindow);
return(TRUE);
}
if(!(Window->Style & WS_CHILD))
{
- if(Window != BaseWindow)
- IntReleaseWindowObject(Window);
break;
}
- Old = Window;
- Window = IntGetParentObject(Window);
- if(Old != BaseWindow)
- IntReleaseWindowObject(Old);
+
+ Window = Window->Parent;
}
- IntReleaseWindowObject(BaseWindow);
return(FALSE);
}
@@ -849,37 +846,34 @@
{
PWINDOW_OBJECT Parent;
- Wnd->Parent = WndParent->hSelf;
+ Wnd->Parent = WndParent;
if ((Wnd->PrevSibling = WndPrevSibling))
{
/* link after WndPrevSibling */
if ((Wnd->NextSibling = WndPrevSibling->NextSibling))
Wnd->NextSibling->PrevSibling = Wnd;
- else if ((Parent = IntGetWindowObject(Wnd->Parent)))
+ else if ((Parent = Wnd->Parent))
{
if(Parent->LastChild == WndPrevSibling)
Parent->LastChild = Wnd;
- IntReleaseWindowObject(Parent);
}
Wnd->PrevSibling->NextSibling = Wnd;
}
else
{
/* link at top */
- Parent = IntGetWindowObject(Wnd->Parent);
+ Parent = Wnd->Parent;
if ((Wnd->NextSibling = WndParent->FirstChild))
Wnd->NextSibling->PrevSibling = Wnd;
else if (Parent)
{
Parent->LastChild = Wnd;
Parent->FirstChild = Wnd;
- IntReleaseWindowObject(Parent);
return;
}
if(Parent)
{
Parent->FirstChild = Wnd;
- IntReleaseWindowObject(Parent);
}
}
@@ -895,7 +889,7 @@
if(!Wnd)
return NULL;
- WndOldOwner = IntGetWindowObject(Wnd->Owner);
+ WndOldOwner = IntGetWindowObject(Wnd->hOwner);
if (WndOldOwner)
{
ret = WndOldOwner->hSelf;
@@ -908,11 +902,11 @@
if((WndNewOwner = IntGetWindowObject(hWndNewOwner)))
{
- Wnd->Owner = hWndNewOwner;
+ Wnd->hOwner = hWndNewOwner;
IntReleaseWindowObject(WndNewOwner);
}
else
- Wnd->Owner = NULL;
+ Wnd->hOwner = NULL;
IntReleaseWindowObject(Wnd);
return ret;
@@ -1048,23 +1042,14 @@
VOID FASTCALL
IntUnlinkWindow(PWINDOW_OBJECT Wnd)
{
- PWINDOW_OBJECT WndParent;
+ PWINDOW_OBJECT WndParent = Wnd->Parent;
- if((WndParent = IntGetWindowObject(Wnd->Parent)))
- {
-
- }
-
if (Wnd->NextSibling) Wnd->NextSibling->PrevSibling =
Wnd->PrevSibling;
else if (WndParent && WndParent->LastChild == Wnd)
WndParent->LastChild = Wnd->PrevSibling;
if (Wnd->PrevSibling) Wnd->PrevSibling->NextSibling =
Wnd->NextSibling;
else if (WndParent && WndParent->FirstChild == Wnd)
WndParent->FirstChild = Wnd->NextSibling;
- if(WndParent)
- {
- IntReleaseWindowObject(WndParent);
- }
Wnd->PrevSibling = Wnd->NextSibling = Wnd->Parent = NULL;
}
@@ -1081,7 +1066,7 @@
for(Child = Window->FirstChild; Child; Child = Child->NextSibling)
{
- if(Child->Owner && Child->Style & WS_VISIBLE)
+ if(Child->hOwner && Child->Style & WS_VISIBLE)
{
/*
* The desktop has a popup window if one of them has
@@ -1548,14 +1533,14 @@
}
Window->MessageQueue = PsGetWin32Thread()->MessageQueue;
IntReferenceMessageQueue(Window->MessageQueue);
- Window->Parent = (ParentWindow ? ParentWindow->hSelf : NULL);
+ Window->Parent = ParentWindow;
if((OwnerWindow = IntGetWindowObject(OwnerWindowHandle)))
{
- Window->Owner = OwnerWindowHandle;
+ Window->hOwner = OwnerWindowHandle;
IntReleaseWindowObject(OwnerWindow);
HasOwner = TRUE;
} else {
- Window->Owner = NULL;
+ Window->hOwner = NULL;
HasOwner = FALSE;
}
Window->UserData = 0;
@@ -2192,7 +2177,7 @@
Child = IntGetWindowObject(*ChildHandle);
if (Child == NULL)
continue;
- if (Child->Owner != Window->hSelf)
+ if (Child->hOwner != Window->hSelf)
{
IntReleaseWindowObject(Child);
continue;
@@ -2206,9 +2191,9 @@
continue;
}
- if (Child->Owner != NULL)
+ if (Child->hOwner != NULL)
{
- Child->Owner = NULL;
+ Child->hOwner = NULL;
}
IntReleaseWindowObject(Child);
@@ -3214,27 +3199,23 @@
PWINDOW_OBJECT Parent, Window;
HWND hWndResult = NULL;
- if (!(Window = IntGetWindowObject(hWnd))) return NULL;
+ if (!(Window = UserGetWindowObjectNoRef(hWnd))) return NULL;
switch (Relationship)
{
case GW_HWNDFIRST:
- if((Parent = IntGetParentObject(Window)))
+ if((Parent = Window->Parent))
{
if (Parent->FirstChild)
hWndResult = Parent->FirstChild->hSelf;
-
- IntReleaseWindowObject(Parent);
}
break;
case GW_HWNDLAST:
- if((Parent = IntGetParentObject(Window)))
+ if((Parent = Window->Parent))
{
if (Parent->LastChild)
hWndResult = Parent->LastChild->hSelf;
-
- IntReleaseWindowObject(Parent);
}
break;
@@ -3249,7 +3230,7 @@
break;
case GW_OWNER:
- if((Parent = IntGetWindowObject(Window->Owner)))
+ if((Parent = IntGetWindowObject(Window->hOwner)))
{
hWndResult = Parent->hSelf;
IntReleaseWindowObject(Parent);
@@ -3261,8 +3242,6 @@
break;
}
- IntReleaseWindowObject(Window);
-
return hWndResult;
}
@@ -3365,14 +3344,13 @@
break;
case GWL_HWNDPARENT:
- Parent = IntGetWindowObject(Window->Parent);
+ Parent = Window->Parent;
if(Parent)
{
if (Parent && Parent->hSelf == IntGetDesktopWindow())
Result = (LONG) UserGetWindow(Window->hSelf,
GW_OWNER);
else
Result = (LONG) Parent->hSelf;
- IntReleaseWindowObject(Parent);
}
break;
_____
Modified: trunk/reactos/subsys/win32k/ntuser/winpos.c
--- trunk/reactos/subsys/win32k/ntuser/winpos.c 2005-09-06 13:36:04 UTC
(rev 17696)
+++ trunk/reactos/subsys/win32k/ntuser/winpos.c 2005-09-06 14:09:22 UTC
(rev 17697)
@@ -254,14 +254,13 @@
RECT WorkArea;
PDESKTOP_OBJECT Desktop = PsGetWin32Thread()->Desktop; /* Or
rather get it from the window? */
- Parent = IntGetParentObject(Window);
+ Parent = Window->Parent;
if(Parent)
{
if(IntIsDesktopWindow(Parent))
IntGetDesktopWorkArea(Desktop, &WorkArea);
else
WorkArea = Parent->ClientRect;
- IntReleaseWindowObject(Parent);
}
else
IntGetDesktopWorkArea(Desktop, &WorkArea);
@@ -507,7 +506,7 @@
params.rgrc[0] = *WindowRect;
params.rgrc[1] = Window->WindowRect;
params.rgrc[2] = Window->ClientRect;
- Parent = IntGetParentObject(Window);
+ Parent = Window->Parent;
if (0 != (Window->Style & WS_CHILD) && Parent)
{
IntGdiOffsetRect(&(params.rgrc[0]), - Parent->ClientRect.left,
@@ -550,8 +549,6 @@
{
WinPos->flags &= ~SWP_NOCLIENTSIZE;
}
- if(Parent)
- IntReleaseWindowObject(Parent);
}
else
{
@@ -593,14 +590,13 @@
PWINDOW_OBJECT Parent;
X = WinPos->x;
Y = WinPos->y;
- Parent = IntGetParentObject(Window);
+ Parent = Window->Parent;
if ((0 != (Window->Style & WS_CHILD)) && Parent)
{
X += Parent->ClientRect.left;
Y += Parent->ClientRect.top;
}
- if(Parent)
- IntReleaseWindowObject(Parent);
+
WindowRect->left = X;
WindowRect->top = Y;
WindowRect->right += X - Window->WindowRect.left;
@@ -805,18 +801,14 @@
&& HWND_NOTOPMOST != WinPos->hwndInsertAfter
&& HWND_BOTTOM != WinPos->hwndInsertAfter)
{
- PWINDOW_OBJECT Parent = IntGetParentObject(Window);
+ PWINDOW_OBJECT Parent = Window->Parent;
if (UserGetAncestor(WinPos->hwndInsertAfter, GA_PARENT) !=
(Parent ? Parent->hSelf : NULL))
{
- if(Parent)
- IntReleaseWindowObject(Parent);
return FALSE;
}
else
{
- if(Parent)
- IntReleaseWindowObject(Parent);
/*
* We don't need to change the Z order of hwnd if it's
already
* inserted after hwndInsertAfter or when inserting hwnd
after
@@ -1382,7 +1374,7 @@
if (Wnd == IntGetThreadFocusWindow() ||
IntIsChildWindow(Wnd, IntGetThreadFocusWindow()))
{
- UserSetFocus(Window->Parent);
+ UserSetFocus(Window->Parent->hSelf);
}
if (!(Window->Parent))