aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike DePaulo <mikedep333@gmail.com>2015-06-23 19:19:50 -0400
committerMike DePaulo <mikedep333@gmail.com>2015-06-23 19:21:35 -0400
commit4d4dd065696890a0c023423db0aae91446169968 (patch)
tree64d377cb89411fa178dde9cab77ccca720dc70cb
parent8c975c36a958a0cf249e4c570847a0bb2026c4f7 (diff)
downloadvcxsrv-4d4dd065696890a0c023423db0aae91446169968.tar.gz
vcxsrv-4d4dd065696890a0c023423db0aae91446169968.tar.bz2
vcxsrv-4d4dd065696890a0c023423db0aae91446169968.zip
A new version of winmultiwindow.patch from Ionic.
It seems to fix the missing window decorations, but there is still the issue of the window overlapping much of the taskbar. Sometimes the window is below the taskbar, other times it is on top of the taskbar.
-rwxr-xr-xxorg-server/hw/xwin/winmultiwindowwindow.c56
1 files changed, 55 insertions, 1 deletions
diff --git a/xorg-server/hw/xwin/winmultiwindowwindow.c b/xorg-server/hw/xwin/winmultiwindowwindow.c
index 850edc149..457830bcc 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,18 @@ winAdjustXWindow(WindowPtr pWin, HWND hwnd)
LONG dX, dY, dW, dH, x, y;
DWORD dwStyle, dwExStyle;
+ int ret;
+ HMONITOR currentMonitor;
+ MONITORINFO monitorInfo;
+ LONG_PTR old_style, old_ex_style;
+
#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 +951,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 +990,49 @@ 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))
+ {
+ old_style = GetWindowLongPtr (hwnd, GWL_STYLE);
+ old_ex_style = GetWindowLongPtr (hwnd, GWL_EXSTYLE);
+
+ if (!old_style || !old_ex_style) {
+ return ret;
+ }
+
+ SetWindowLongPtr(hwnd, GWL_STYLE,
+ WS_VISIBLE | old_style);
+
+ SetWindowLongPtr(hwnd, GWL_EXSTYLE,
+ old_ex_style);
+
+ SetWindowPos ( hwnd, HWND_TOPMOST, monitorInfo.rcMonitor.left,
+ monitorInfo.rcMonitor.top,
+ monitorInfo.rcMonitor.right - monitorInfo.rcMonitor.left,
+ monitorInfo.rcMonitor.bottom - monitorInfo.rcMonitor.top,
+ SWP_DRAWFRAME | SWP_SHOWWINDOW);
+ }
+
+ return ret;
+
#undef WIDTH
#undef HEIGHT
}