Commit 3be8e3b7 authored by Eric Pouech's avatar Eric Pouech Committed by Alexandre Julliard

Properly handling cases like calling SetWindowPos while processing

WM_NCCREATE.
parent dc7c1b87
......@@ -54,7 +54,7 @@ Messages sent:
CreateWindow (for child window, not initially visible)
Messages sent:
WM_NCCREATE
WM_NCCREATE (Note that win->parent->child will not contain win. link is done after sucessfull WM_NCCREATE)
WM_NCCALCSIZE (wParam=0)
WM_CREATE
WM_SIZE
......
......@@ -310,6 +310,7 @@ void WIN_WalkWindows( HWND hwnd, int indent )
BOOL WIN_UnlinkWindow( HWND hwnd )
{
WND *wndPtr, **ppWnd;
BOOL ret = FALSE;
if (!(wndPtr = WIN_FindWndPtr( hwnd ))) return FALSE;
else if(!wndPtr->parent)
......@@ -317,11 +318,16 @@ BOOL WIN_UnlinkWindow( HWND hwnd )
WIN_ReleaseWndPtr(wndPtr);
return FALSE;
}
ppWnd = &wndPtr->parent->child;
while (*ppWnd != wndPtr) ppWnd = &(*ppWnd)->next;
*ppWnd = wndPtr->next;
while (*ppWnd && *ppWnd != wndPtr) ppWnd = &(*ppWnd)->next;
if (*ppWnd)
{
*ppWnd = wndPtr->next;
ret = TRUE;
}
WIN_ReleaseWndPtr(wndPtr);
return TRUE;
return ret;
}
......
......@@ -2525,8 +2525,13 @@ Pos: /* -----------------------------------------------------------------------
if(!(winpos.flags & SWP_NOZORDER))
{
WIN_UnlinkWindow( winpos.hwnd );
WIN_LinkWindow( winpos.hwnd, hwndInsertAfter );
/* upon window creation (while processing WM_NCCREATE), wndPtr->parent is set correctly
* but wndPtr is not yet in wndPtr->parent->child list
* in those cases (SetWindowPos called while processing WM_NCCREATE),
* do not unlink/link winPtr in parent->child
*/
if ( WIN_UnlinkWindow( winpos.hwnd ) )
WIN_LinkWindow( winpos.hwnd, hwndInsertAfter );
}
/* Reset active DCEs */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment