diff --git a/dlls/x11drv/winpos.c b/dlls/x11drv/winpos.c index eb6bde8916b..3470ea479e1 100644 --- a/dlls/x11drv/winpos.c +++ b/dlls/x11drv/winpos.c @@ -1284,22 +1284,20 @@ static HWND query_zorder( Display *display, HWND hWndCheck) { HWND hwndInsertAfter = HWND_TOP; WND *pWndCheck = WIN_FindWndPtr(hWndCheck); - WND *pDesktop = WIN_GetDesktop(); - WND *pWnd, *pWndZ = WIN_LockWndPtr(pDesktop->child); + WND *top = WIN_FindWndPtr( GetTopWindow(0) ); + WND *pWnd, *pWndZ = top; Window w, parent, *children = NULL; unsigned total, check, pos, best; if( !__check_query_condition(&pWndZ, &pWnd) ) { WIN_ReleaseWndPtr(pWndCheck); - WIN_ReleaseWndPtr(pDesktop->child); - WIN_ReleaseDesktop(); + WIN_ReleaseWndPtr(top); return hwndInsertAfter; } WIN_LockWndPtr(pWndZ); WIN_LockWndPtr(pWnd); - WIN_ReleaseWndPtr(pDesktop->child); - WIN_ReleaseDesktop(); + WIN_ReleaseWndPtr(top); parent = __get_common_ancestor( display, get_whole_window(pWndZ), get_whole_window(pWnd), &children, &total ); diff --git a/include/win.h b/include/win.h index 77ead3f05d5..02d3b409ac4 100644 --- a/include/win.h +++ b/include/win.h @@ -84,8 +84,6 @@ extern WND* WIN_FindWndPtr( HWND hwnd ); extern WND* WIN_LockWndPtr(WND *wndPtr); extern void WIN_ReleaseWndPtr(WND *wndPtr); extern void WIN_UpdateWndPtr(WND **oldPtr,WND *newPtr); -extern WND* WIN_GetDesktop(void); -extern void WIN_ReleaseDesktop(void); extern void WIN_DumpWindow( HWND hwnd ); extern void WIN_WalkWindows( HWND hwnd, int indent ); extern BOOL WIN_UnlinkWindow( HWND hwnd ); diff --git a/windows/painting.c b/windows/painting.c index cb25b4d4667..6f73fe17771 100644 --- a/windows/painting.c +++ b/windows/painting.c @@ -165,7 +165,7 @@ static HRGN WIN_UpdateNCRgn(WND* wnd, HRGN hRgn, UINT uncFlags ) wnd->hwndSelf, wnd->hrgnUpdate, hRgn, uncFlags, wnd->flags & WIN_NEEDS_NCPAINT); /* desktop window doesn't have a nonclient area */ - if(wnd == WIN_GetDesktop()) + if(wnd->hwndSelf == GetDesktopWindow()) { wnd->flags &= ~WIN_NEEDS_NCPAINT; if( wnd->hrgnUpdate > 1 ) @@ -174,10 +174,8 @@ static HRGN WIN_UpdateNCRgn(WND* wnd, HRGN hRgn, UINT uncFlags ) { hrgnRet = wnd->hrgnUpdate; } - WIN_ReleaseDesktop(); return hrgnRet; } - WIN_ReleaseDesktop(); if ((wnd->hwndSelf == GetForegroundWindow()) && !(wnd->flags & WIN_NCACTIVATED) ) @@ -498,7 +496,6 @@ HBRUSH16 WINAPI GetControlBrush16( HWND16 hwnd, HDC16 hdc, UINT16 ctlType ) static void RDW_ValidateParent(WND *wndChild) { WND *wndParent = WIN_LockWndPtr(wndChild->parent); - WND *wndDesktop = WIN_GetDesktop(); HRGN hrg; if (wndChild->hrgnUpdate == 1 ) { @@ -511,7 +508,7 @@ static void RDW_ValidateParent(WND *wndChild) } else hrg = wndChild->hrgnUpdate; - while ((wndParent) && (wndParent != wndDesktop) ) { + while ((wndParent) && (wndParent->hwndSelf != GetDesktopWindow()) ) { if (!(wndParent->dwStyle & WS_CLIPCHILDREN)) { if (wndParent->hrgnUpdate != 0) @@ -543,7 +540,6 @@ static void RDW_ValidateParent(WND *wndChild) } if (hrg != wndChild->hrgnUpdate) DeleteObject( hrg ); WIN_ReleaseWndPtr(wndParent); - WIN_ReleaseDesktop(); } /*********************************************************************** diff --git a/windows/win.c b/windows/win.c index 704f66095c8..e070ab82089 100644 --- a/windows/win.c +++ b/windows/win.c @@ -215,44 +215,6 @@ void WIN_DumpWindow( HWND hwnd ) } -/*********************************************************************** - * WIN_WalkWindows - * - * Walk the windows tree and print each window on stderr. - */ -void WIN_WalkWindows( HWND hwnd, int indent ) -{ - WND *ptr; - char className[80]; - - ptr = hwnd ? WIN_FindWndPtr( hwnd ) : WIN_GetDesktop(); - - if (!ptr) - { - WARN("Invalid window handle %04x\n", hwnd ); - return; - } - - if (!indent) /* first time around */ - DPRINTF( "%-16.16s %-8.8s %-6.6s %-17.17s %-8.8s %s\n", - "hwnd", " wndPtr", "queue", "Class Name", " Style", " WndProc" - " Text"); - - while (ptr) - { - DPRINTF( "%*s%04x%*s", indent, "", ptr->hwndSelf, 13-indent,""); - - GetClassNameA( ptr->hwndSelf, className, sizeof(className) ); - DPRINTF( "%08lx %-6.4x %-17.17s %08x %08x %.14s\n", - (DWORD)ptr, ptr->hmemTaskQ, className, - (UINT)ptr->dwStyle, (UINT)ptr->winproc, - ptr->text ? debugstr_w(ptr->text) : ""); - - if (ptr->child) WIN_WalkWindows( ptr->child->hwndSelf, indent+1 ); - WIN_UpdateWndPtr(&ptr,ptr->next); - } -} - /*********************************************************************** * WIN_UnlinkWindow * @@ -1206,12 +1168,8 @@ BOOL WINAPI DestroyWindow( HWND hwnd ) /* Initialization */ + if (hwnd == GetDesktopWindow()) return FALSE; /* Can't destroy desktop */ if (!(wndPtr = WIN_FindWndPtr( hwnd ))) return FALSE; - if (wndPtr == pWndDesktop) - { - retvalue = FALSE; /* Can't destroy desktop */ - goto end; - } /* Look whether the focus is within the tree of windows we will * be destroying. @@ -1547,24 +1505,6 @@ HWND WINAPI FindWindowW( LPCWSTR className, LPCWSTR title ) } -/********************************************************************** - * WIN_GetDesktop - * returns a locked pointer - */ -WND *WIN_GetDesktop(void) -{ - return WIN_LockWndPtr(pWndDesktop); -} -/********************************************************************** - * WIN_ReleaseDesktop - * unlock the desktop pointer - */ -void WIN_ReleaseDesktop(void) -{ - WIN_ReleaseWndPtr(pWndDesktop); -} - - /********************************************************************** * GetDesktopWindow (USER.286) */ @@ -2433,15 +2373,8 @@ HWND16 WINAPI GetTopWindow16( HWND16 hwnd ) */ HWND WINAPI GetTopWindow( HWND hwnd ) { - HWND retval = 0; - WND * wndPtr = (hwnd) ? - WIN_FindWndPtr( hwnd ) : WIN_GetDesktop(); - - if (wndPtr && wndPtr->child) - retval = wndPtr->child->hwndSelf; - - WIN_ReleaseWndPtr(wndPtr); - return retval; + if (!hwnd) hwnd = GetDesktopWindow(); + return GetWindow( hwnd, GW_CHILD ); } diff --git a/windows/winpos.c b/windows/winpos.c index 3a5eaf61428..19e0a154802 100644 --- a/windows/winpos.c +++ b/windows/winpos.c @@ -1550,14 +1550,11 @@ BOOL WINPOS_SetActiveWindow( HWND hWnd, BOOL fMouse, BOOL fChangeFocus) if (wndPtr && !(wndPtr->dwStyle & WS_CHILD) && !(wndPtr->dwExStyle & WS_EX_MANAGED)) { /* check Z-order and bring hWnd to the top */ - for (wndTemp = WIN_LockWndPtr(WIN_GetDesktop()->child); wndTemp; WIN_UpdateWndPtr(&wndTemp,wndTemp->next)) - { - if (wndTemp->dwStyle & WS_VISIBLE) break; - } - WIN_ReleaseDesktop(); - WIN_ReleaseWndPtr(wndTemp); + HWND tmp = GetTopWindow(0); + while (tmp && !(GetWindowLongA( tmp, GWL_STYLE ) & WS_VISIBLE)) + tmp = GetWindow( tmp, GW_HWNDNEXT ); - if( wndTemp != wndPtr ) + if( tmp != hWnd ) SetWindowPos(hWnd, HWND_TOP, 0,0,0,0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE ); if (!IsWindow(hWnd))