diff options
author | Alexander Gottwald <alexander.gottwald@s1999.tu-chemnitz.de> | 2005-02-24 22:53:17 +0000 |
---|---|---|
committer | Alexander Gottwald <alexander.gottwald@s1999.tu-chemnitz.de> | 2005-02-24 22:53:17 +0000 |
commit | 409c0618bced6df02eed7af77107ff74508c0f3f (patch) | |
tree | 6eecf4fc40ea49a2fb05ce61422925f987770108 /hw/xwin/winmultiwindowwndproc.c | |
parent | 775efdbd79448040b822fcc0556e98d3968ba8c3 (diff) |
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
Diffstat (limited to 'hw/xwin/winmultiwindowwndproc.c')
-rwxr-xr-x | hw/xwin/winmultiwindowwndproc.c | 62 |
1 files changed, 14 insertions, 48 deletions
diff --git a/hw/xwin/winmultiwindowwndproc.c b/hw/xwin/winmultiwindowwndproc.c index fee36ae45..0254bb00a 100755 --- a/hw/xwin/winmultiwindowwndproc.c +++ b/hw/xwin/winmultiwindowwndproc.c @@ -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); } } } |