diff options
author | Alexander Gottwald <alexander.gottwald@s1999.tu-chemnitz.de> | 2005-01-31 10:49:30 +0000 |
---|---|---|
committer | Alexander Gottwald <alexander.gottwald@s1999.tu-chemnitz.de> | 2005-01-31 10:49:30 +0000 |
commit | d3ca132061a861cb9292b5a95dbcb2f67695883b (patch) | |
tree | 66fde6131be1e548a6dd4ae3577d00370bcf3c5a | |
parent | 374b9aa8ce14cd20a6768519eee63948c83488d6 (diff) |
winmultiwindowwindow.c
Create windows with SWP_NOACTIVATE flag (updated) (Kensuke Matsuzaki)
Fixes for window ordering problem (updated) (Kensuke Matsuzaki)
-rw-r--r-- | hw/xwin/ChangeLog | 11 | ||||
-rw-r--r-- | hw/xwin/winmultiwindowwindow.c | 2 | ||||
-rwxr-xr-x | hw/xwin/winmultiwindowwndproc.c | 62 |
3 files changed, 73 insertions, 2 deletions
diff --git a/hw/xwin/ChangeLog b/hw/xwin/ChangeLog index f61e7af2b..93174a680 100644 --- a/hw/xwin/ChangeLog +++ b/hw/xwin/ChangeLog @@ -1,5 +1,16 @@ 2005-01-31 Alexander Gottwald <ago at freedesktop dot org> + * winmultiwindowwindow.c + * winmultiwindowwndproc.c: + Create windows with SWP_NOACTIVATE flag (updated) (Kensuke Matsuzaki) + +2005-01-31 Alexander Gottwald <ago at freedesktop dot org> + + * winmultiwindowwndproc.c: + Fixes for window ordering problem (updated) (Kensuke Matsuzaki) + +2005-01-31 Alexander Gottwald <ago at freedesktop dot org> + * winconfig.c: Added hungarian keyboard layout. diff --git a/hw/xwin/winmultiwindowwindow.c b/hw/xwin/winmultiwindowwindow.c index e2c0adee4..6d83529a1 100644 --- a/hw/xwin/winmultiwindowwindow.c +++ b/hw/xwin/winmultiwindowwindow.c @@ -572,7 +572,7 @@ winCreateWindowsWindow (WindowPtr pWin) /* Change style back to popup, already placed... */ SetWindowLong (hWnd, GWL_STYLE, WS_POPUP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS); SetWindowPos (hWnd, 0, 0, 0, 0, 0, - SWP_FRAMECHANGED | SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE); + SWP_FRAMECHANGED | SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); /* Make sure it gets the proper system menu for a WS_POPUP, too */ GetSystemMenu (hWnd, TRUE); diff --git a/hw/xwin/winmultiwindowwndproc.c b/hw/xwin/winmultiwindowwndproc.c index a977b5b21..dc30f951c 100755 --- a/hw/xwin/winmultiwindowwndproc.c +++ b/hw/xwin/winmultiwindowwndproc.c @@ -922,7 +922,7 @@ winTopLevelWindowProc (HWND hwnd, UINT message, ErrorF ("overridden window is shown\n"); #endif SetWindowPos (hwnd, HWND_TOPMOST, 0, 0, 0, 0, - SWP_NOMOVE | SWP_NOSIZE); + SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); } /* Setup the Window Manager message */ @@ -942,6 +942,7 @@ winTopLevelWindowProc (HWND hwnd, UINT message, return ValidateSizing (hwnd, pWin, wParam, lParam); case WM_WINDOWPOSCHANGING: +#if 0 if (lParam != 0) { WINDOWPOS *windowpos = (WINDOWPOS *)lParam; @@ -978,8 +979,67 @@ winTopLevelWindowProc (HWND hwnd, UINT message, winSendMessageToWM (s_pScreenPriv->pWMInfo, &wmMsg); } } +#endif break; case WM_WINDOWPOSCHANGED: + { + LPWINDOWPOS pWinPos = (LPWINDOWPOS) lParam; + + if (!(pWinPos->flags & SWP_NOZORDER)) + { +#if CYGWINDOWING_DEBUG + winDebug ("\twindow z order was changed\n"); +#endif + if (pWinPos->hwndInsertAfter == HWND_TOP + ||pWinPos->hwndInsertAfter == HWND_TOPMOST + ||pWinPos->hwndInsertAfter == HWND_NOTOPMOST) + { +#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); + } + else if (pWinPos->hwndInsertAfter == HWND_BOTTOM) + { + } + else + { + /* Check if this window is top of X windows. */ + HWND hWndAbove = NULL; + DWORD dwCurrentProcessID = GetCurrentProcessId (); + DWORD dwWindowProcessID = 0; + + for (hWndAbove = pWinPos->hwndInsertAfter; + hWndAbove != NULL; + hWndAbove = GetNextWindow (hWndAbove, GW_HWNDPREV)) + { + /* Ignore other XWin process's window */ + GetWindowThreadProcessId (hWndAbove, &dwWindowProcessID); + + if ((dwWindowProcessID == dwCurrentProcessID) + && GetProp (hWndAbove, WIN_WINDOW_PROP) + && !IsWindowVisible (hWndAbove) + && !IsIconic (hWndAbove) ) /* ignore minimized windows */ + break; + } + /* If this is top of X windows in Windows stack, + raise it in X stack. */ + if (hWndAbove == NULL) + { +#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); + } + } + } + } /* * Pass the message to DefWindowProc to let the function * break down WM_WINDOWPOSCHANGED to WM_MOVE and WM_SIZE. |