on WM_WINDOWPOSCHANGED raise window directly and in sync without utilizing

the async windowmanager thread. Fixes some restacking problems occuring
    which were timing dependent Do not raise the window on WM_ACTIVATE
    Removed unused code for WM_WINDOWPOSCHANGING ESC is debug key. Print
    status but do not abort processing the message
This commit is contained in:
Alexander Gottwald 2005-02-24 22:53:17 +00:00
parent 775efdbd79
commit 409c0618bc
2 changed files with 24 additions and 48 deletions

View File

@ -1,3 +1,13 @@
2005-02-24 Alexander Gottwald <ago at freedesktop dot org>
* winmultiwindowwndproc.c:
on WM_WINDOWPOSCHANGED raise window directly and in sync without
utilizing the async windowmanager thread. Fixes some restacking
problems occuring which were timing dependent
Do not raise the window on WM_ACTIVATE
Removed unused code for WM_WINDOWPOSCHANGING
ESC is debug key. Print status but do not abort processing the message
2005-02-12 Alexander Gottwald <ago at freedesktop dot org>
* winmultiwindowwindow.c

View File

@ -265,6 +265,15 @@ ValidateSizing (HWND hwnd, WindowPtr pWin,
return TRUE;
}
static void winRaiseWindow(WindowPtr pWin)
{
/* Call configure window directly to make sure it gets processed
* in time
*/
XID vlist[1] = { 0 };
ConfigureWindow(pWin, CWStackMode, vlist, NULL);
}
/*
* winTopLevelWindowProc - Window procedure for all top-level Windows windows.
@ -687,7 +696,6 @@ winTopLevelWindowProc (HWND hwnd, UINT message,
pRect->bottom - pRect->top);
}
ErrorF ("\n");
return 0;
}
#endif
@ -717,9 +725,12 @@ winTopLevelWindowProc (HWND hwnd, UINT message,
if (LOWORD(wParam) != WA_INACTIVE)
{
/* Raise the window to the top in Z order */
/* ago: Activate does not mean putting it to front! */
/*
wmMsg.msg = WM_WM_RAISE;
if (fWMMsgInitialized)
winSendMessageToWM (s_pScreenPriv->pWMInfo, &wmMsg);
*/
/* Tell our Window Manager thread to activate the window */
wmMsg.msg = WM_WM_ACTIVATE;
@ -880,46 +891,6 @@ winTopLevelWindowProc (HWND hwnd, UINT message,
/* for applications like xterm */
return ValidateSizing (hwnd, pWin, wParam, lParam);
case WM_WINDOWPOSCHANGING:
#if 0
if (lParam != 0)
{
WINDOWPOS *windowpos = (WINDOWPOS *)lParam;
HWND hwndprev = GetNextWindow(hwnd, GW_HWNDPREV);
HWND hwndafter = windowpos->hwndInsertAfter;
#if CYGDEBUG
char buffer[1024];
char buffer2[1024];
GetWindowText(hwndafter, buffer, sizeof(buffer));
GetWindowText(hwndprev, buffer2, sizeof(buffer2));
winDebug("%s - hwndInsertAfter = %x (%s), hwndPrev = %x (%s)\n",
__FUNCTION__, hwndafter,
(hwndafter==HWND_TOP?"HWND_TOP":
(hwndafter==HWND_BOTTOM?"HWND_BOTTOM":
(hwndafter==HWND_NOTOPMOST?"HWND_NOTOPMOST":
(hwndafter==HWND_TOPMOST?"HWND_TOPMOST":
buffer)))),
hwndprev,
(hwndprev==HWND_TOP?"HWND_TOP":
(hwndprev==HWND_BOTTOM?"HWND_BOTTOM":
(hwndprev==HWND_NOTOPMOST?"HWND_NOTOPMOST":
(hwndprev==HWND_TOPMOST?"HWND_TOPMOST":
buffer2)))));
winDebug("%s - flags: %s\n", __FUNCTION__,
(windowpos->flags & SWP_NOZORDER?"NOZORDER":""));
#endif
if (windowpos->flags & SWP_NOZORDER)
break;
if (TRUE || hwndafter == HWND_TOP || hwndafter != hwndprev)
{
wmMsg.msg = WM_WM_RAISE;
//if (fWMMsgInitialized)
winSendMessageToWM (s_pScreenPriv->pWMInfo, &wmMsg);
}
}
#endif
break;
case WM_WINDOWPOSCHANGED:
{
LPWINDOWPOS pWinPos = (LPWINDOWPOS) lParam;
@ -937,9 +908,7 @@ winTopLevelWindowProc (HWND hwnd, UINT message,
winDebug ("\traise to top\n");
#endif
/* Raise the window to the top in Z order */
wmMsg.msg = WM_WM_RAISE;
if (fWMMsgInitialized)
winSendMessageToWM (s_pScreenPriv->pWMInfo, &wmMsg);
winRaiseWindow(pWin);
}
else if (pWinPos->hwndInsertAfter == HWND_BOTTOM)
{
@ -971,10 +940,7 @@ winTopLevelWindowProc (HWND hwnd, UINT message,
#if CYGWINDOWING_DEBUG
winDebug ("\traise to top\n");
#endif
/* Raise the window to the top in Z order */
wmMsg.msg = WM_WM_RAISE;
if (fWMMsgInitialized)
winSendMessageToWM (s_pScreenPriv->pWMInfo, &wmMsg);
winRaiseWindow(pWin);
}
}
}