diff options
author | Mike DePaulo <mikedep333@gmail.com> | 2014-09-02 09:27:17 -0400 |
---|---|---|
committer | Mike DePaulo <mikedep333@gmail.com> | 2015-05-09 19:23:52 -0400 |
commit | 42ee38cb51a74ccab76faab74a2ed91cdb05b35c (patch) | |
tree | 1ffb51b5304aad686c4908ecb490b9a39802107a /xorg-server | |
parent | ebf9a7f2a99651b09720dd5bd6a1cf2d3224483f (diff) | |
download | vcxsrv-42ee38cb51a74ccab76faab74a2ed91cdb05b35c.tar.gz vcxsrv-42ee38cb51a74ccab76faab74a2ed91cdb05b35c.tar.bz2 vcxsrv-42ee38cb51a74ccab76faab74a2ed91cdb05b35c.zip |
Incorporate winmultiwindow.patch from Oleksandr Shneyder (phoca GmbH)
Diffstat (limited to 'xorg-server')
-rwxr-xr-x | xorg-server/hw/xwin/winmultiwindowwindow.c | 49 |
1 files changed, 48 insertions, 1 deletions
diff --git a/xorg-server/hw/xwin/winmultiwindowwindow.c b/xorg-server/hw/xwin/winmultiwindowwindow.c index 850edc149..02ae7d528 100755 --- a/xorg-server/hw/xwin/winmultiwindowwindow.c +++ b/xorg-server/hw/xwin/winmultiwindowwindow.c @@ -107,6 +107,7 @@ winCreateWindowMultiWindow(WindowPtr pWin) winDebug ("winCreateWindowMultiWindow - pWin: %p\n", pWin); #endif + WIN_UNWRAP(CreateWindow); fResult = (*pScreen->CreateWindow) (pWin); WIN_WRAP(CreateWindow, winCreateWindowMultiWindow); @@ -319,6 +320,7 @@ winUnmapWindowMultiWindow(WindowPtr pWin) winDebug ("winUnmapWindowMultiWindow - pWin: %p\n", pWin); #endif + WIN_UNWRAP(UnrealizeWindow); fResult = (*pScreen->UnrealizeWindow) (pWin); WIN_WRAP(UnrealizeWindow, winUnmapWindowMultiWindow); @@ -364,6 +366,7 @@ winMapWindowMultiWindow(WindowPtr pWin) winReshapeMultiWindow(pWin); winUpdateRgnMultiWindow(pWin); + return fResult; } @@ -913,11 +916,17 @@ winAdjustXWindow(WindowPtr pWin, HWND hwnd) LONG dX, dY, dW, dH, x, y; DWORD dwStyle, dwExStyle; + int ret; + HMONITOR currentMonitor; + MONITORINFO monitorInfo; + #define WIDTH(rc) (rc.right - rc.left) #define HEIGHT(rc) (rc.bottom - rc.top) winDebug("winAdjustXWindow\n"); + + if (IsIconic(hwnd)) { winDebug("\timmediately return because the window is iconized\n"); /* @@ -941,13 +950,17 @@ winAdjustXWindow(WindowPtr pWin, HWND hwnd) dwExStyle = GetWindowLongPtr(hwnd, GWL_EXSTYLE); dwStyle = GetWindowLongPtr(hwnd, GWL_STYLE); winDebug("\tWindowStyle: %08x %08x\n", dwStyle, dwExStyle); + AdjustWindowRectEx(&rcDraw, dwStyle, FALSE, dwExStyle); /* The source of adjust */ GetWindowRect(hwnd, &rcWin); + winDebug("\tWindow extend {%d, %d, %d, %d}, {%d, %d}\n", rcWin.left, rcWin.top, rcWin.right, rcWin.bottom, rcWin.right - rcWin.left, rcWin.bottom - rcWin.top); + + winDebug("\tDraw extend {%d, %d, %d, %d}, {%d, %d}\n", rcDraw.left, rcDraw.top, rcDraw.right, rcDraw.bottom, rcDraw.right - rcDraw.left, rcDraw.bottom - rcDraw.top); @@ -976,9 +989,43 @@ winAdjustXWindow(WindowPtr pWin, HWND hwnd) vlist[3] = pDraw->height + dH; winDebug("\tConfigureWindow to (%ld, %ld) - %ldx%ld\n", vlist[0], vlist[1], vlist[2], vlist[3]); - return ConfigureWindow(pWin, CWX | CWY | CWWidth | CWHeight, + + ret=ConfigureWindow(pWin, CWX | CWY | CWWidth | CWHeight, vlist, wClient(pWin)); + + currentMonitor=MonitorFromWindow(hwnd,MONITOR_DEFAULTTONULL); + if(!currentMonitor) + { + return ret; + } + monitorInfo.cbSize=sizeof ( MONITORINFO ); + if(!GetMonitorInfo(currentMonitor, &monitorInfo)) + { + return ret; + } + + + if((rcWin.left <= monitorInfo.rcMonitor.left) && (rcWin.top <= monitorInfo.rcMonitor.top) && + (rcWin.right - rcWin.left > monitorInfo.rcMonitor.right - monitorInfo.rcMonitor.left) && + (rcWin.bottom - rcWin.top > monitorInfo.rcMonitor.bottom - monitorInfo.rcMonitor.top)) + { + + SetWindowLongPtr(hwnd, GWL_STYLE, + WS_VISIBLE); + + SetWindowLongPtr(hwnd, GWL_EXSTYLE, + 0); + + SetWindowPos ( hwnd, HWND_TOPMOST, monitorInfo.rcMonitor.left, + monitorInfo.rcMonitor.top, + monitorInfo.rcMonitor.right - monitorInfo.rcMonitor.left, + monitorInfo.rcMonitor.bottom - monitorInfo.rcMonitor.top, + 0); + } + + return ret; + #undef WIDTH #undef HEIGHT } |