From 9fe9c5f868886abf671b3be3964af1965dd92472 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Sun, 13 Feb 2011 18:52:52 +0000 Subject: [PATCH 01/14] hw/xwin: Don't bother reporting XORG_VERSION_CURRENT Don't bother reporting XORG_VERSION_CURRENT, when we also report the version number broken down into it's components XORG_VERSION_MAJOR, XORG_VERSION_MINOR, etc. as well. Signed-off-by: Jon TURNEY Reviewed-by: Colin Harrison --- hw/xwin/winerror.c | 4 ++-- hw/xwin/winprocarg.c | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/hw/xwin/winerror.c b/hw/xwin/winerror.c index a25307cb6..56c1e34e7 100644 --- a/hw/xwin/winerror.c +++ b/hw/xwin/winerror.c @@ -111,7 +111,7 @@ winMessageBoxF(const char *pszError, UINT uType, ...) #define MESSAGEBOXF \ "%s\n" \ "Vendor: %s\n" \ - "Release: %d.%d.%d.%d (%d)\n" \ + "Release: %d.%d.%d.%d\n" \ "Contact: %s\n" \ "%s\n\n" \ "XWin was started with the following command-line:\n\n" \ @@ -120,7 +120,7 @@ winMessageBoxF(const char *pszError, UINT uType, ...) size = asprintf(&pszMsgBox, MESSAGEBOXF, pszErrorF, XVENDORNAME, XORG_VERSION_MAJOR, XORG_VERSION_MINOR, XORG_VERSION_PATCH, - XORG_VERSION_SNAP, XORG_VERSION_CURRENT, + XORG_VERSION_SNAP, BUILDERADDR, BUILDERSTRING, g_pszCommandLine); if (size == -1) { diff --git a/hw/xwin/winprocarg.c b/hw/xwin/winprocarg.c index 0f789f09d..b9114bf6a 100644 --- a/hw/xwin/winprocarg.c +++ b/hw/xwin/winprocarg.c @@ -1158,9 +1158,8 @@ winLogVersionInfo(void) ErrorF("Welcome to the XWin X Server\n"); ErrorF("Vendor: %s\n", XVENDORNAME); - ErrorF("Release: %d.%d.%d.%d (%d)\n", XORG_VERSION_MAJOR, - XORG_VERSION_MINOR, XORG_VERSION_PATCH, XORG_VERSION_SNAP, - XORG_VERSION_CURRENT); + ErrorF("Release: %d.%d.%d.%d\n", XORG_VERSION_MAJOR, + XORG_VERSION_MINOR, XORG_VERSION_PATCH, XORG_VERSION_SNAP); ErrorF("%s\n\n", BUILDERSTRING); ErrorF("Contact: %s\n", BUILDERADDR); } From 090856b55b5895ce07f36ddebe6d8f7cb86c1826 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Thu, 5 Jul 2012 13:19:02 +0100 Subject: [PATCH 02/14] hw/xwin: Tidy up some pointless output which is always emitted Signed-off-by: Jon TURNEY Reviewed-by: Colin Harrison --- hw/xwin/winblock.c | 2 +- hw/xwin/winclipboardinit.c | 2 +- hw/xwin/winclipboardthread.c | 2 +- hw/xwin/winclipboardwrappers.c | 2 +- hw/xwin/winmultiwindowwm.c | 16 ++++++++-------- hw/xwin/winprocarg.c | 4 ++-- hw/xwin/winscrinit.c | 4 ++-- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/hw/xwin/winblock.c b/hw/xwin/winblock.c index c1a6e705a..480e3bd48 100644 --- a/hw/xwin/winblock.c +++ b/hw/xwin/winblock.c @@ -58,7 +58,7 @@ winBlockHandler(ScreenPtr pScreen, if (pScreenPriv != NULL && !pScreenPriv->fServerStarted) { int iReturn; - winDebug("winBlockHandler - Releasing pmServerStarted\n"); + ErrorF("winBlockHandler - pthread_mutex_unlock()\n"); /* Flag that modules are to be started */ pScreenPriv->fServerStarted = TRUE; diff --git a/hw/xwin/winclipboardinit.c b/hw/xwin/winclipboardinit.c index 696d9e2d6..304e6df9f 100644 --- a/hw/xwin/winclipboardinit.c +++ b/hw/xwin/winclipboardinit.c @@ -58,7 +58,7 @@ extern HWND g_hwndClipboard; Bool winInitClipboard(void) { - ErrorF("winInitClipboard ()\n"); + winDebug("winInitClipboard ()\n"); /* Wrap some internal server functions */ if (ProcVector[X_SetSelectionOwner] != winProcSetSelectionOwner) { diff --git a/hw/xwin/winclipboardthread.c b/hw/xwin/winclipboardthread.c index 181cb7203..47bd50fd8 100644 --- a/hw/xwin/winclipboardthread.c +++ b/hw/xwin/winclipboardthread.c @@ -103,7 +103,7 @@ winClipboardProc(void *pvNotUsed) char szDisplay[512]; int iSelectError; - ErrorF("winClipboardProc - Hello\n"); + winDebug("winClipboardProc - Hello\n"); ++clipboardRestarts; /* Do we have Unicode support? */ diff --git a/hw/xwin/winclipboardwrappers.c b/hw/xwin/winclipboardwrappers.c index 53b419ea0..882edc18e 100644 --- a/hw/xwin/winclipboardwrappers.c +++ b/hw/xwin/winclipboardwrappers.c @@ -90,7 +90,7 @@ winProcEstablishConnection(ClientPtr client) static unsigned long s_ulServerGeneration = 0; if (s_iCallCount == 0) - ErrorF("winProcEstablishConnection - Hello\n"); + winDebug("winProcEstablishConnection - Hello\n"); /* Do nothing if clipboard is not enabled */ if (!g_fClipboard) { diff --git a/hw/xwin/winmultiwindowwm.c b/hw/xwin/winmultiwindowwm.c index c355e8919..66ced75c4 100644 --- a/hw/xwin/winmultiwindowwm.c +++ b/hw/xwin/winmultiwindowwm.c @@ -380,21 +380,21 @@ InitQueue(WMMsgQueuePtr pQueue) pQueue->nQueueSize = 0; #if CYGMULTIWINDOW_DEBUG - ErrorF("InitQueue - Queue Size %d %d\n", pQueue->nQueueSize, - QueueSize(pQueue)); + winDebug("InitQueue - Queue Size %d %d\n", pQueue->nQueueSize, + QueueSize(pQueue)); #endif - ErrorF("InitQueue - Calling pthread_mutex_init\n"); + winDebug("InitQueue - Calling pthread_mutex_init\n"); /* Create synchronization objects */ pthread_mutex_init(&pQueue->pmMutex, NULL); - ErrorF("InitQueue - pthread_mutex_init returned\n"); - ErrorF("InitQueue - Calling pthread_cond_init\n"); + winDebug("InitQueue - pthread_mutex_init returned\n"); + winDebug("InitQueue - Calling pthread_cond_init\n"); pthread_cond_init(&pQueue->pcNotEmpty, NULL); - ErrorF("InitQueue - pthread_cond_init returned\n"); + winDebug("InitQueue - pthread_cond_init returned\n"); return TRUE; } @@ -802,7 +802,7 @@ winMultiWindowXMsgProc(void *pArg) int iReturn; XIconSize *xis; - ErrorF("winMultiWindowXMsgProc - Hello\n"); + winDebug("winMultiWindowXMsgProc - Hello\n"); /* Check that argument pointer is not invalid */ if (pProcArg == NULL) { @@ -1172,7 +1172,7 @@ winInitMultiWindowWM(WMInfoPtr pWMInfo, WMProcArgPtr pProcArg) char pszDisplay[512]; int iReturn; - ErrorF("winInitMultiWindowWM - Hello\n"); + winDebug("winInitMultiWindowWM - Hello\n"); /* Check that argument pointer is not invalid */ if (pProcArg == NULL) { diff --git a/hw/xwin/winprocarg.c b/hw/xwin/winprocarg.c index b9114bf6a..caa2708f5 100644 --- a/hw/xwin/winprocarg.c +++ b/hw/xwin/winprocarg.c @@ -159,7 +159,7 @@ winInitializeScreenDefaults(void) static void winInitializeScreen(int i) { - winErrorFVerb(2, "winInitializeScreen - %d\n", i); + winErrorFVerb(3, "winInitializeScreen - %d\n", i); /* Initialize default screen values, if needed */ winInitializeScreenDefaults(); @@ -176,7 +176,7 @@ winInitializeScreens(int maxscreens) { int i; - winErrorFVerb(2, "winInitializeScreens - %i\n", maxscreens); + winErrorFVerb(3, "winInitializeScreens - %i\n", maxscreens); if (maxscreens > g_iNumScreens) { /* Reallocate the memory for DDX-specific screen info */ diff --git a/hw/xwin/winscrinit.c b/hw/xwin/winscrinit.c index 5f112f97f..be25f12af 100644 --- a/hw/xwin/winscrinit.c +++ b/hw/xwin/winscrinit.c @@ -432,7 +432,7 @@ winFinishScreenInitFB(int index, ScreenPtr pScreen, int argc, char **argv) if (pScreen->a) { \ pScreenPriv->a = pScreen->a; \ } else { \ - ErrorF("null screen fn " #a "\n"); \ + winDebug("winScreenInit - null screen fn " #a "\n"); \ pScreenPriv->a = NULL; \ } @@ -466,7 +466,7 @@ winFinishScreenInitFB(int index, ScreenPtr pScreen, int argc, char **argv) if (pScreen->a) { \ pScreenPriv->a = pScreen->a; \ } else { \ - ErrorF("null screen fn " #a "\n"); \ + winDebug("null screen fn " #a "\n"); \ pScreenPriv->a = NULL; \ } From 7e07d61857c5d2ee6e3c36c81b51bb4fe378b5a0 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Thu, 5 Jul 2012 14:01:03 +0100 Subject: [PATCH 03/14] hw/xwin: Bug fixes for screen sizing when the screen window is on a non-primary monitor There is a bug that when the -screen option is used to specify a monitor for the screen window to be located on, but no explicit size is specified (and the -multiplemonitors option isn't specified), the screen window size is always constrained to fit the work area of the primary monitor (rather than the work area of the specified monitor) This gives incorrect results if you want a screen the same size as your non-primary monitor (e.g. by using -screen 0 @2) and your non-primary monitor is larger than your primary monitor. (This can be worked around by specifying -multiplemonitors and an explicit screen size the same size as the monitor (e.g. -multiplemonitors -screen 0 1600x1200@2)) Fix to use work area for the monitor specified for the screen, rather than the primary monitor work area (unless -multiplemonitors is used, in which case we continue to use the virtual desktop work area instead) Also fix the adjustment for an autohide taskbar, so that it is only done if the taskbar is on the same monitor as the screen (or -multiplemonitors is used) Signed-off-by: Jon TURNEY Reviewed-by: Colin Harrison --- hw/xwin/win.h | 1 + hw/xwin/wincreatewnd.c | 93 +++++++++++++++++++++++++++--------------- hw/xwin/winmonitors.c | 1 + hw/xwin/winmonitors.h | 29 +++++++++++++ hw/xwin/winprocarg.c | 4 ++ 5 files changed, 94 insertions(+), 34 deletions(-) diff --git a/hw/xwin/win.h b/hw/xwin/win.h index b84ea9b14..9096df206 100644 --- a/hw/xwin/win.h +++ b/hw/xwin/win.h @@ -388,6 +388,7 @@ typedef struct { DWORD dwScreen; int iMonitor; + HMONITOR hMonitor; DWORD dwUserWidth; DWORD dwUserHeight; DWORD dwWidth; diff --git a/hw/xwin/wincreatewnd.c b/hw/xwin/wincreatewnd.c index 0a18a6a29..6732dcb58 100644 --- a/hw/xwin/wincreatewnd.c +++ b/hw/xwin/wincreatewnd.c @@ -34,10 +34,6 @@ #include "win.h" #include "shellapi.h" -#ifndef ABS_AUTOHIDE -#define ABS_AUTOHIDE 1 -#endif - /* * Local function prototypes */ @@ -46,7 +42,7 @@ static Bool winGetWorkArea(RECT * prcWorkArea, winScreenInfo * pScreenInfo); static Bool - winAdjustForAutoHide(RECT * prcWorkArea); + winAdjustForAutoHide(RECT * prcWorkArea, winScreenInfo * pScreenInfo); /* * Create a full screen window @@ -218,7 +214,7 @@ winCreateBoundingWindowWindowed(ScreenPtr pScreen) winGetWorkArea(&rcWorkArea, pScreenInfo); /* Adjust for auto-hide taskbars */ - winAdjustForAutoHide(&rcWorkArea); + winAdjustForAutoHide(&rcWorkArea, pScreenInfo); /* Did the user specify a position? */ if (pScreenInfo->fUserGavePosition) { @@ -501,14 +497,32 @@ winGetWorkArea(RECT * prcWorkArea, winScreenInfo * pScreenInfo) int iLeft, iTop; int iPrimaryNonWorkAreaWidth, iPrimaryNonWorkAreaHeight; + /* Use GetMonitorInfo to get work area for monitor */ + if (!pScreenInfo->fMultipleMonitors) { + MONITORINFO mi; + + mi.cbSize = sizeof(MONITORINFO); + if (GetMonitorInfo(pScreenInfo->hMonitor, &mi)) { + *prcWorkArea = mi.rcWork; + + winDebug("winGetWorkArea - Monitor %d WorkArea: %d %d %d %d\n", + pScreenInfo->iMonitor, + (int) prcWorkArea->top, (int) prcWorkArea->left, + (int) prcWorkArea->bottom, (int) prcWorkArea->right); + } + else { + ErrorF("winGetWorkArea - GetMonitorInfo() failed for monitor %d\n", + pScreenInfo->iMonitor); + } + + /* Bail out here if we aren't using multiple monitors */ + return TRUE; + } + /* SPI_GETWORKAREA only gets the work area of the primary screen. */ SystemParametersInfo(SPI_GETWORKAREA, 0, prcWorkArea, 0); - /* Bail out here if we aren't using multiple monitors */ - if (!pScreenInfo->fMultipleMonitors) - return TRUE; - - winDebug("winGetWorkArea - Original WorkArea: %d %d %d %d\n", + winDebug("winGetWorkArea - Primary Monitor WorkArea: %d %d %d %d\n", (int) prcWorkArea->top, (int) prcWorkArea->left, (int) prcWorkArea->bottom, (int) prcWorkArea->right); @@ -556,16 +570,39 @@ winGetWorkArea(RECT * prcWorkArea, winScreenInfo * pScreenInfo) return TRUE; } +static Bool +winTaskbarOnScreenEdge(unsigned int uEdge, winScreenInfo * pScreenInfo) +{ + APPBARDATA abd; + HWND hwndAutoHide; + + ZeroMemory(&abd, sizeof(abd)); + abd.cbSize = sizeof(abd); + abd.uEdge = uEdge; + + hwndAutoHide = (HWND) SHAppBarMessage(ABM_GETAUTOHIDEBAR, &abd); + if (hwndAutoHide != NULL) { + /* + Found an autohide taskbar on that edge, but is it on the + same monitor as the screen window? + */ + if (pScreenInfo->fMultipleMonitors || + (MonitorFromWindow(hwndAutoHide, MONITOR_DEFAULTTONULL) == + pScreenInfo->hMonitor)) + return TRUE; + } + return FALSE; +} + /* * Adjust the client area so that any auto-hide toolbars * will work correctly. */ static Bool -winAdjustForAutoHide(RECT * prcWorkArea) +winAdjustForAutoHide(RECT * prcWorkArea, winScreenInfo * pScreenInfo) { APPBARDATA abd; - HWND hwndAutoHide; winDebug("winAdjustForAutoHide - Original WorkArea: %d %d %d %d\n", (int) prcWorkArea->top, (int) prcWorkArea->left, @@ -577,34 +614,31 @@ winAdjustForAutoHide(RECT * prcWorkArea) if (SHAppBarMessage(ABM_GETSTATE, &abd) & ABS_AUTOHIDE) winDebug("winAdjustForAutoHide - Taskbar is auto hide\n"); + /* + Despite the forgoing, we are checking for any AppBar + hiding along a monitor edge, not just the Windows TaskBar. + */ + /* Look for a TOP auto-hide taskbar */ - abd.uEdge = ABE_TOP; - hwndAutoHide = (HWND) SHAppBarMessage(ABM_GETAUTOHIDEBAR, &abd); - if (hwndAutoHide != NULL) { + if (winTaskbarOnScreenEdge(ABE_TOP, pScreenInfo)) { winDebug("winAdjustForAutoHide - Found TOP auto-hide taskbar\n"); prcWorkArea->top += 1; } /* Look for a LEFT auto-hide taskbar */ - abd.uEdge = ABE_LEFT; - hwndAutoHide = (HWND) SHAppBarMessage(ABM_GETAUTOHIDEBAR, &abd); - if (hwndAutoHide != NULL) { + if (winTaskbarOnScreenEdge(ABE_LEFT, pScreenInfo)) { winDebug("winAdjustForAutoHide - Found LEFT auto-hide taskbar\n"); prcWorkArea->left += 1; } /* Look for a BOTTOM auto-hide taskbar */ - abd.uEdge = ABE_BOTTOM; - hwndAutoHide = (HWND) SHAppBarMessage(ABM_GETAUTOHIDEBAR, &abd); - if (hwndAutoHide != NULL) { + if (winTaskbarOnScreenEdge(ABE_BOTTOM, pScreenInfo)) { winDebug("winAdjustForAutoHide - Found BOTTOM auto-hide taskbar\n"); prcWorkArea->bottom -= 1; } /* Look for a RIGHT auto-hide taskbar */ - abd.uEdge = ABE_RIGHT; - hwndAutoHide = (HWND) SHAppBarMessage(ABM_GETAUTOHIDEBAR, &abd); - if (hwndAutoHide != NULL) { + if (winTaskbarOnScreenEdge(ABE_RIGHT, pScreenInfo)) { winDebug("winAdjustForAutoHide - Found RIGHT auto-hide taskbar\n"); prcWorkArea->right -= 1; } @@ -613,14 +647,5 @@ winAdjustForAutoHide(RECT * prcWorkArea) (int) prcWorkArea->top, (int) prcWorkArea->left, (int) prcWorkArea->bottom, (int) prcWorkArea->right); -#if 0 - /* Obtain the task bar window dimensions */ - abd.hWnd = hwndAutoHide; - hwndAutoHide = (HWND) SHAppBarMessage(ABM_GETTASKBARPOS, &abd); - winDebug("hwndAutoHide %08x abd.hWnd %08x %d %d %d %d\n", - hwndAutoHide, abd.hWnd, - abd.rc.top, abd.rc.left, abd.rc.bottom, abd.rc.right); -#endif - return TRUE; } diff --git a/hw/xwin/winmonitors.c b/hw/xwin/winmonitors.c index 26e20b743..473241099 100644 --- a/hw/xwin/winmonitors.c +++ b/hw/xwin/winmonitors.c @@ -48,6 +48,7 @@ getMonitorInfo(HMONITOR hMonitor, HDC hdc, LPRECT rect, LPARAM _data) data->monitorOffsetY = rect->top; data->monitorHeight = rect->bottom - rect->top; data->monitorWidth = rect->right - rect->left; + data->monitorHandle = hMonitor; return FALSE; } return TRUE; diff --git a/hw/xwin/winmonitors.h b/hw/xwin/winmonitors.h index acef48274..8201e47f4 100644 --- a/hw/xwin/winmonitors.h +++ b/hw/xwin/winmonitors.h @@ -1,3 +1,31 @@ +/* + +Copyright 1993, 1998 The Open Group +Copyright (C) Colin Harrison 2005-2008 + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from The Open Group. + +*/ /* data returned for monitor information */ struct GetMonitorInfoData { @@ -9,6 +37,7 @@ struct GetMonitorInfoData { int monitorOffsetY; int monitorHeight; int monitorWidth; + HMONITOR monitorHandle; }; Bool QueryMonitor(int index, struct GetMonitorInfoData *data); diff --git a/hw/xwin/winprocarg.c b/hw/xwin/winprocarg.c index caa2708f5..72fbf1467 100644 --- a/hw/xwin/winprocarg.c +++ b/hw/xwin/winprocarg.c @@ -115,6 +115,7 @@ winInitializeScreenDefaults(void) } defaultScreenInfo.iMonitor = 1; + defaultScreenInfo.hMonitor = MonitorFromWindow(NULL, MONITOR_DEFAULTTOPRIMARY); defaultScreenInfo.dwWidth = dwWidth; defaultScreenInfo.dwHeight = dwHeight; defaultScreenInfo.dwUserWidth = dwWidth; @@ -333,6 +334,7 @@ ddxProcessArgument(int argc, char *argv[], int i) g_ScreenInfo[nScreenNum].fUserGaveHeightAndWidth = FALSE; g_ScreenInfo[nScreenNum].fUserGavePosition = TRUE; g_ScreenInfo[nScreenNum].iMonitor = iMonitor; + g_ScreenInfo[nScreenNum].hMonitor = data.monitorHandle; g_ScreenInfo[nScreenNum].dwWidth = data.monitorWidth; g_ScreenInfo[nScreenNum].dwHeight = data.monitorHeight; g_ScreenInfo[nScreenNum].dwUserWidth = data.monitorWidth; @@ -383,6 +385,7 @@ ddxProcessArgument(int argc, char *argv[], int i) } else if (data.bMonitorSpecifiedExists == TRUE) { g_ScreenInfo[nScreenNum].iMonitor = iMonitor; + g_ScreenInfo[nScreenNum].hMonitor = data.monitorHandle; g_ScreenInfo[nScreenNum].dwInitialX += data.monitorOffsetX; g_ScreenInfo[nScreenNum].dwInitialY += @@ -415,6 +418,7 @@ ddxProcessArgument(int argc, char *argv[], int i) iMonitor); g_ScreenInfo[nScreenNum].fUserGavePosition = TRUE; g_ScreenInfo[nScreenNum].iMonitor = iMonitor; + g_ScreenInfo[nScreenNum].hMonitor = data.monitorHandle; g_ScreenInfo[nScreenNum].dwInitialX = data.monitorOffsetX; g_ScreenInfo[nScreenNum].dwInitialY = data.monitorOffsetY; } From eb5b4d8d809712053701f057a35bbf5348ac9059 Mon Sep 17 00:00:00 2001 From: Colin Harrison Date: Thu, 5 Jul 2012 14:03:44 +0100 Subject: [PATCH 04/14] hw/xwin: RANDR resize didn't occur when screen window was maximized or restored In windowed mode, with option -resize, RANDR resize was missing when the screen window was maximized or restored. Signed-off-by: Colin Harrison Reviewed-by: Jon TURNEY --- hw/xwin/winwndproc.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/hw/xwin/winwndproc.c b/hw/xwin/winwndproc.c index 3f5d66b96..fe662b9ba 100644 --- a/hw/xwin/winwndproc.c +++ b/hw/xwin/winwndproc.c @@ -428,6 +428,13 @@ winWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) } return 0; + case WM_SYSCOMMAND: + if (s_pScreenInfo->iResizeMode == resizeWithRandr && + ((wParam & 0xfff0) == SC_MAXIMIZE || + (wParam & 0xfff0) == SC_RESTORE)) + PostMessage(hwnd, WM_EXITSIZEMOVE, 0, 0); + break; + case WM_ENTERSIZEMOVE: ErrorF("winWindowProc - WM_ENTERSIZEMOVE\n"); break; From 9cdd3ed07425b222e8197b9a2f57ec1525c6fd54 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Fri, 16 Mar 2012 12:56:45 +0000 Subject: [PATCH 05/14] hw/xwin: Tidy up some more pointless output which is always emitted It's not very useful to log lines like the below when the About.. dialog is used winAboutDlgProc - WM_COMMAND - IDOK or IDCANCEL winAboutDlgProc - WM_CLOSE Signed-off-by: Jon TURNEY Reviewed-by: Colin Harrison --- hw/xwin/windialogs.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hw/xwin/windialogs.c b/hw/xwin/windialogs.c index c62b5dbe9..a02146e95 100644 --- a/hw/xwin/windialogs.c +++ b/hw/xwin/windialogs.c @@ -492,7 +492,7 @@ winChangeDepthDlgProc(HWND hwndDialog, UINT message, switch (LOWORD(wParam)) { case IDOK: case IDCANCEL: - ErrorF("winChangeDepthDlgProc - WM_COMMAND - IDOK or IDCANCEL\n"); + winDebug("winChangeDepthDlgProc - WM_COMMAND - IDOK or IDCANCEL\n"); /* * User dismissed the dialog, hide it until the @@ -504,7 +504,7 @@ winChangeDepthDlgProc(HWND hwndDialog, UINT message, break; case WM_CLOSE: - ErrorF("winChangeDepthDlgProc - WM_CLOSE\n"); + winDebug("winChangeDepthDlgProc - WM_CLOSE\n"); DestroyWindow(g_hDlgAbout); g_hDlgAbout = NULL; @@ -609,7 +609,7 @@ winAboutDlgProc(HWND hwndDialog, UINT message, WPARAM wParam, LPARAM lParam) switch (LOWORD(wParam)) { case IDOK: case IDCANCEL: - ErrorF("winAboutDlgProc - WM_COMMAND - IDOK or IDCANCEL\n"); + winDebug("winAboutDlgProc - WM_COMMAND - IDOK or IDCANCEL\n"); DestroyWindow(g_hDlgAbout); g_hDlgAbout = NULL; @@ -699,7 +699,7 @@ winAboutDlgProc(HWND hwndDialog, UINT message, WPARAM wParam, LPARAM lParam) break; case WM_CLOSE: - ErrorF("winAboutDlgProc - WM_CLOSE\n"); + winDebug("winAboutDlgProc - WM_CLOSE\n"); DestroyWindow(g_hDlgAbout); g_hDlgAbout = NULL; From df7636dddb4981e14ee7d128c43bb08bdf6a8727 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Thu, 5 Jul 2012 14:20:52 +0100 Subject: [PATCH 06/14] hw/xwin: Correct function name in log message Correct function name in log message winInitializeDefaultScreens -> winInitializeScreenDefaults Signed-off-by: Jon TURNEY Reviewed-by: Colin Harrison --- hw/xwin/winprocarg.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/hw/xwin/winprocarg.c b/hw/xwin/winprocarg.c index 72fbf1467..a5b3c07bf 100644 --- a/hw/xwin/winprocarg.c +++ b/hw/xwin/winprocarg.c @@ -101,14 +101,15 @@ winInitializeScreenDefaults(void) int dpiY = GetDeviceCaps(hdc, LOGPIXELSY); winErrorFVerb(2, - "winInitializeDefaultScreens - native DPI x %d y %d\n", + "winInitializeScreenDefaults - native DPI x %d y %d\n", dpiX, dpiY); + monitorResolution = dpiY; ReleaseDC(NULL, hdc); } else { winErrorFVerb(1, - "winInitializeDefaultScreens - Failed to retrieve native DPI, falling back to default of %d DPI\n", + "winInitializeScreenDefaults - Failed to retrieve native DPI, falling back to default of %d DPI\n", WIN_DEFAULT_DPI); monitorResolution = WIN_DEFAULT_DPI; } From c98471fad7d85fc9d9959b1c48edd90415f7bf15 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Thu, 5 Jul 2012 18:00:06 +0100 Subject: [PATCH 07/14] hw/xwin: Consolidate duplicated code as getHwnd() function Consolidate code to find the native HWND of an X window, stored in the _WINDOWSWM_NATIVE_HWND property, duplicated in UpdateName() and PreserveWin32Stack() as getHwnd() Signed-off-by: Jon TURNEY Reviewed-by: Colin Harrison --- hw/xwin/winmultiwindowwm.c | 61 ++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 29 deletions(-) diff --git a/hw/xwin/winmultiwindowwm.c b/hw/xwin/winmultiwindowwm.c index 66ced75c4..76b46837c 100644 --- a/hw/xwin/winmultiwindowwm.c +++ b/hw/xwin/winmultiwindowwm.c @@ -477,23 +477,23 @@ SendXMessage(Display * pDisplay, Window iWin, Atom atmType, long nData) } /* - * Updates the name of a HWND according to its X WM_NAME property + * See if we can get the stored HWND for this window... */ - -static void -UpdateName(WMInfoPtr pWMInfo, Window iWindow) +static HWND +getHwnd(WMInfoPtr pWMInfo, Window iWindow) { - wchar_t *pszName; Atom atmType; int fmtRet; unsigned long items, remain; - HWND *retHwnd, hWnd; - XWindowAttributes attr; + HWND *retHwnd, hWnd = NULL; - hWnd = 0; - - /* See if we can get the cached HWND for this window... */ - if (XGetWindowProperty(pWMInfo->pDisplay, iWindow, pWMInfo->atmPrivMap, 0, 1, False, XA_INTEGER, //pWMInfo->atmPrivMap, + if (XGetWindowProperty(pWMInfo->pDisplay, + iWindow, + pWMInfo->atmPrivMap, + 0, + 1, + False, + XA_INTEGER, &atmType, &fmtRet, &items, @@ -506,8 +506,26 @@ UpdateName(WMInfoPtr pWMInfo, Window iWindow) /* Some sanity checks */ if (!hWnd) - return; + return NULL; if (!IsWindow(hWnd)) + return NULL; + + return hWnd; +} + +/* + * Updates the name of a HWND according to its X WM_NAME property + */ + +static void +UpdateName(WMInfoPtr pWMInfo, Window iWindow) +{ + wchar_t *pszName; + HWND hWnd; + XWindowAttributes attr; + + hWnd = getHwnd(pWMInfo, iWindow); + if (!hWnd) return; /* Set the Windows window name */ @@ -532,27 +550,12 @@ UpdateName(WMInfoPtr pWMInfo, Window iWindow) static void PreserveWin32Stack(WMInfoPtr pWMInfo, Window iWindow, UINT direction) { - Atom atmType; - int fmtRet; - unsigned long items, remain; - HWND hWnd, *retHwnd; + HWND hWnd; DWORD myWinProcID, winProcID; Window xWindow; WINDOWPLACEMENT wndPlace; - hWnd = NULL; - /* See if we can get the cached HWND for this window... */ - if (XGetWindowProperty(pWMInfo->pDisplay, iWindow, pWMInfo->atmPrivMap, 0, 1, False, XA_INTEGER, //pWMInfo->atmPrivMap, - &atmType, - &fmtRet, - &items, - &remain, (unsigned char **) &retHwnd) == Success) { - if (retHwnd) { - hWnd = *retHwnd; - XFree(retHwnd); - } - } - + hWnd = getHwnd(pWMInfo, iWindow); if (!hWnd) return; From 0ed0d3979050c4ee7bef64441d50c494d58d93b0 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Thu, 5 Jul 2012 22:08:38 +0100 Subject: [PATCH 08/14] hw/xwin: Remove winClipboardDetectUnicodeSupport() This code for detecting if the Windows clipboard can support unicode is long obsolete. All NT versions of Windows support unicode clipboard, so any version of Windows we can run on must support unicode clipboard. The -nounicodeclipboard flag to disable use of unicode on the clipboard is retained. Signed-off-by: Jon TURNEY Reviewed-by: Colin Harrison --- hw/xwin/Makefile.am | 1 - hw/xwin/winclipboard.h | 7 ---- hw/xwin/winclipboardthread.c | 6 +--- hw/xwin/winclipboardunicode.c | 65 ---------------------------------- hw/xwin/winclipboardwndproc.c | 7 ++-- hw/xwin/winclipboardwrappers.c | 8 ++--- hw/xwin/winclipboardxevents.c | 14 ++------ 7 files changed, 8 insertions(+), 100 deletions(-) delete mode 100644 hw/xwin/winclipboardunicode.c diff --git a/hw/xwin/Makefile.am b/hw/xwin/Makefile.am index c49016398..4c2f04ef0 100644 --- a/hw/xwin/Makefile.am +++ b/hw/xwin/Makefile.am @@ -5,7 +5,6 @@ SRCS_CLIPBOARD = \ winclipboardinit.c \ winclipboardtextconv.c \ winclipboardthread.c \ - winclipboardunicode.c \ winclipboardwndproc.c \ winclipboardwrappers.c \ winclipboardxevents.c diff --git a/hw/xwin/winclipboard.h b/hw/xwin/winclipboard.h index 203a9639a..27eb2f96f 100644 --- a/hw/xwin/winclipboard.h +++ b/hw/xwin/winclipboard.h @@ -111,13 +111,6 @@ void *winClipboardProc(void *); void winDeinitClipboard(void); -/* - * winclipboardunicode.c - */ - -Bool - winClipboardDetectUnicodeSupport(void); - /* * winclipboardwndproc.c */ diff --git a/hw/xwin/winclipboardthread.c b/hw/xwin/winclipboardthread.c index 47bd50fd8..f2e8e6d6f 100644 --- a/hw/xwin/winclipboardthread.c +++ b/hw/xwin/winclipboardthread.c @@ -64,7 +64,6 @@ static int clipboardRestarts = 0; static XIOErrorHandler g_winClipboardOldIOErrorHandler; static pthread_t g_winClipboardProcThread; -Bool g_fUnicodeSupport = FALSE; Bool g_fUseUnicode = FALSE; /* @@ -106,11 +105,8 @@ winClipboardProc(void *pvNotUsed) winDebug("winClipboardProc - Hello\n"); ++clipboardRestarts; - /* Do we have Unicode support? */ - g_fUnicodeSupport = winClipboardDetectUnicodeSupport(); - /* Do we use Unicode clipboard? */ - fUseUnicode = g_fUnicodeClipboard && g_fUnicodeSupport; + fUseUnicode = g_fUnicodeClipboard; /* Save the Unicode support flag in a global */ g_fUseUnicode = fUseUnicode; diff --git a/hw/xwin/winclipboardunicode.c b/hw/xwin/winclipboardunicode.c deleted file mode 100644 index 9c06f7b4d..000000000 --- a/hw/xwin/winclipboardunicode.c +++ /dev/null @@ -1,65 +0,0 @@ -/* - *Copyright (C) 2003-2004 Harold L Hunt II All Rights Reserved. - * - *Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - *"Software"), to deal in the Software without restriction, including - *without limitation the rights to use, copy, modify, merge, publish, - *distribute, sublicense, and/or sell copies of the Software, and to - *permit persons to whom the Software is furnished to do so, subject to - *the following conditions: - * - *The above copyright notice and this permission notice shall be - *included in all copies or substantial portions of the Software. - * - *THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - *EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - *MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - *NONINFRINGEMENT. IN NO EVENT SHALL HAROLD L HUNT II BE LIABLE FOR - *ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - *CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - *WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - *Except as contained in this notice, the name of Harold L Hunt II - *shall not be used in advertising or otherwise to promote the sale, use - *or other dealings in this Software without prior written authorization - *from Harold L Hunt II. - * - * Authors: Harold L Hunt II - */ - -#ifdef HAVE_XWIN_CONFIG_H -#include -#endif -#include "winclipboard.h" - -/* - * Determine whether we suport Unicode or not. - * NOTE: Currently, just check if we are on an NT-based platform or not. - */ - -Bool -winClipboardDetectUnicodeSupport(void) -{ - Bool fReturn = FALSE; - OSVERSIONINFO osvi = { 0 }; - - /* Get operating system version information */ - osvi.dwOSVersionInfoSize = sizeof(osvi); - GetVersionEx(&osvi); - - /* Branch on platform ID */ - switch (osvi.dwPlatformId) { - case VER_PLATFORM_WIN32_NT: - /* Unicode supported on NT only */ - fReturn = TRUE; - break; - - case VER_PLATFORM_WIN32_WINDOWS: - /* Unicode is not supported on non-NT */ - fReturn = FALSE; - break; - } - - return fReturn; -} diff --git a/hw/xwin/winclipboardwndproc.c b/hw/xwin/winclipboardwndproc.c index 78b061517..cbe6599f4 100644 --- a/hw/xwin/winclipboardwndproc.c +++ b/hw/xwin/winclipboardwndproc.c @@ -49,7 +49,6 @@ */ extern Bool g_fUseUnicode; -extern Bool g_fUnicodeSupport; extern void *g_pClipboardDisplay; extern Window g_iClipboardWindow; extern Atom g_atomLastOwnedSelection; @@ -60,6 +59,7 @@ extern Atom g_atomLastOwnedSelection; static int + winProcessXEventsTimeout(HWND hwnd, int iWindow, Display * pDisplay, Bool fUseUnicode, int iTimeoutSec); @@ -415,7 +415,7 @@ winClipboardWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) if (message == WM_RENDERALLFORMATS) fConvertToUnicode = FALSE; else - fConvertToUnicode = g_fUnicodeSupport && (CF_UNICODETEXT == wParam); + fConvertToUnicode = (CF_UNICODETEXT == wParam); /* Request the selection contents */ iReturn = XConvertSelection(pDisplay, @@ -470,8 +470,7 @@ winClipboardWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) */ if (WIN_XEVENTS_NOTIFY != iReturn) { /* Paste no data, to satisfy required call to SetClipboardData */ - if (g_fUnicodeSupport) - SetClipboardData(CF_UNICODETEXT, NULL); + SetClipboardData(CF_UNICODETEXT, NULL); SetClipboardData(CF_TEXT, NULL); ErrorF diff --git a/hw/xwin/winclipboardwrappers.c b/hw/xwin/winclipboardwrappers.c index 882edc18e..1118f4ff8 100644 --- a/hw/xwin/winclipboardwrappers.c +++ b/hw/xwin/winclipboardwrappers.c @@ -60,7 +60,6 @@ DISPATCH_PROC(winProcSetSelectionOwner); * References to external symbols */ -extern Bool g_fUnicodeSupport; extern int g_iNumScreens; extern unsigned int g_uiAuthDataLen; extern char *g_pAuthData; @@ -362,11 +361,8 @@ winProcSetSelectionOwner(ClientPtr client) goto winProcSetSelectionOwner_Done; } - /* Advertise Unicode if we support it */ - if (g_fUnicodeSupport) - SetClipboardData(CF_UNICODETEXT, NULL); - - /* Always advertise regular text */ + /* Advertise regular text and unicode */ + SetClipboardData(CF_UNICODETEXT, NULL); SetClipboardData(CF_TEXT, NULL); /* Save handle to last owned selection */ diff --git a/hw/xwin/winclipboardxevents.c b/hw/xwin/winclipboardxevents.c index 59b1f0715..ce533c59f 100644 --- a/hw/xwin/winclipboardxevents.c +++ b/hw/xwin/winclipboardxevents.c @@ -36,12 +36,6 @@ #include "winclipboard.h" #include "misc.h" -/* - * References to external symbols - */ - -extern Bool g_fUnicodeSupport; - /* * Process any pending X events */ @@ -228,10 +222,6 @@ winClipboardFlushXEvents(HWND hwnd, else xiccesStyle = XStringStyle; - /* - * FIXME: Can't pass CF_UNICODETEXT on Windows 95/98/Me - */ - /* Get a pointer to the clipboard text, in desired format */ if (fUseUnicode) { /* Retrieve clipboard data */ @@ -687,10 +677,10 @@ winClipboardFlushXEvents(HWND hwnd, free(pwszUnicodeStr); if (hGlobal && pszGlobalData) GlobalUnlock(hGlobal); - if (fSetClipboardData && g_fUnicodeSupport) + if (fSetClipboardData) { SetClipboardData(CF_UNICODETEXT, NULL); - if (fSetClipboardData) SetClipboardData(CF_TEXT, NULL); + } return WIN_XEVENTS_NOTIFY; case SelectionClear: From 3568d4af4ff2490e79286d242916e81afed57b58 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Thu, 23 Feb 2012 22:32:09 +0000 Subject: [PATCH 09/14] hw/xwin: Remove a pointless OS version check in winInstallKeyboardHookLL() Checking for OS later than NT4 SP3 (which we didn't do correctly anyhow, just checking for NT) is pointless when other code in hw/xwin assumes at least NT 5.0 Signed-off-by: Jon TURNEY Reviewed-by: Colin Harrison --- hw/xwin/winkeyhook.c | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/hw/xwin/winkeyhook.c b/hw/xwin/winkeyhook.c index 124150850..fe77b2190 100644 --- a/hw/xwin/winkeyhook.c +++ b/hw/xwin/winkeyhook.c @@ -133,24 +133,6 @@ winKeyboardMessageHookLL(int iCode, WPARAM wParam, LPARAM lParam) Bool winInstallKeyboardHookLL(void) { - OSVERSIONINFO osvi = { 0 }; - - /* Get operating system version information */ - osvi.dwOSVersionInfoSize = sizeof(osvi); - GetVersionEx(&osvi); - - /* Branch on platform ID */ - switch (osvi.dwPlatformId) { - case VER_PLATFORM_WIN32_NT: - /* Low-level is supported on NT 4.0 SP3+ only */ - /* TODO: Return FALSE on NT 4.0 with no SP, SP1, or SP2 */ - break; - - case VER_PLATFORM_WIN32_WINDOWS: - /* Low-level hook is not supported on non-NT */ - return FALSE; - } - /* Install the hook only once */ if (!g_hhookKeyboardLL) g_hhookKeyboardLL = SetWindowsHookEx(WH_KEYBOARD_LL, From 8fd30859c293035fe505da76d8d7e64131bd5bc0 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Fri, 10 Feb 2012 13:25:32 +0000 Subject: [PATCH 10/14] hw/xwin: Remove long obsolete README for hw/xwin Signed-off-by: Jon TURNEY Reviewed-by: Colin Harrison --- hw/xwin/README | 141 ------------------------------------------------- 1 file changed, 141 deletions(-) delete mode 100644 hw/xwin/README diff --git a/hw/xwin/README b/hw/xwin/README deleted file mode 100644 index 219fd1337..000000000 --- a/hw/xwin/README +++ /dev/null @@ -1,141 +0,0 @@ -Cygwin/X Release Notes -====================== - -Release X11R6.7 -=============== - -Cygwin/X has continued its rapid pace of development that it has sustained -since Spring 2001 and this release shows it, we now have: a stable and fast -multi-window mode, seamless clipboard integration, a configurable tray menu -icon, popups on error messages pointing users to the log file and our mailing -list, the beginnings of indirect 3D acceleration for OpenGL applications, -improved non-US keyboard and clipboard support, and only a handful of bugs -that continue to be reported. - -Between the XFree86 4.3.0 release and the X.Org X11R6.7 release the Cyg- -win/XFree86 project broke away from The XFree86 Project, Inc. due to a lack -of support from the XFree86 project. As such, the Cygwin/XFree86 project was -renamed to the Cygwin/X project and the upstream source code tree that Cyg- -win/X pulls from and pushes to is now the tree managed by the X.Org Founda- -tion. The Cygwin/X project has seen a rush of development and interest in -the project since the split; one metric showing this is that the number of -CVS committers we have has gone from zero to six. - -The most outstanding features of this release are - - o Major multi-window mode improvements. (Takuma Murakami, Earle F. - Philhower III) - - o Initial work of accelerated OpenGL using the windows OpenGL drivers. - (Alexander Gottwald) - - o Massive rework of clipboard integration with windows. (Harold L Hunt II, - Kensuke Matsuzaki) - - o Improved Japanese clipboard and keyboard support. (Kensuke Matsuzaki, - Takuma Murakami, Alexander Gottwald) - - o Customizable tray menu icon allowing shortcuts to start programs, - etc.(Earle F. Philhower III) - - o New icons. (Jehan Bing, Michael Bax, Benjamin Rienfenstahl) - - o Fix some multi-monitor problems.(Takuma Murakami) - - o Fix repeated key strokes. (Ivan Pascal) - - o Automatic keyboard layouts for the most frequently used keyboard lay- - outs. (Alexander Gottwald) - - o Built in SHM support with detection of the SHM engine (cygserver). - (Ralf Habacker, Harold L Hunt II) - - o Merged in work on the NativeGDI engine. (Alan Hourihane) - -OpenGL with Cygwin/X -==================== - -Cygwin/X has supported GLX only with software rendering provided by the Mesa -library. Starting with X11R6.7 we add support for hardware accelerated OpenGL. - -This support is still under development and still has some bigger problems. -To provide both versions (the stable software rendering and the new hardware -accelerated) we ship to binaries. XWin.exe contains the software rendering -and XWin_GL.exe uses the hardware acceleration provided by the windows drivers. - -The known problems with hardware accelerated OpenGL are: - - o Only multiwindow mode is useful. In the other modes the OpenGL output - does not align with the X11 windows. - - o Using two programs which require different visuals will fail. For example - glxgears and glxinfo will not work without restarting XWin_GL.exe. - - o OpenGL extensions and functions from OpenGL 1.2 and later should work - but are not completely tested. - - o The standard Windows OpenGL driver will produce no output. Use the one - from your video adapter vendor. - -If you notice problems with some programs please send a message with the -logfile /tmp/XWin.log and a short error description to - -The hardware accelerated OpenGL was tested using: - - o glxgears - o glxinfo - o blender - o tuxkart - o GLUT demos (some did fail) - o tuxracer (currently not working) - - -Release X11R6.8 -=============== - -Having reached a quite mature state in release X11R6.7 the development -has slowed down a little bit. Some of the former active developers have -retired or cut their work for the Cygwin/X project due to conflicts with -job, study and family. - -The X11R6.8 release now includes major improvements from the xserver project. -This includes the XFixes, Damage, Composite and XEVIE extension which is a -major step towards allowing Cygwin/X to have real transparency. - -But at the current state Composite is not working with Cygwin/X. Not all code -in the Cygwin/X Server has been updated to support the Composite feature and -using it will even crash the xserver. But as a second problem nearly all -functions required for compositing are lacking acceleration in Cygwin/X so -the feature would not be very useful if it would work. So it is disabled by -default. - -OpenGL with Cygwin/X -==================== - -The OpenGL support has lost some of it's limitations from the last release -and should be much more stable. But due to missing wide spread testing in -the community it is still available in a separate program. XWin still uses -the old software OpenGL which is known to be stable. - -The known problems with hardware accelerated OpenGL are: - - o Only multiwindow mode is useful. In the other modes the OpenGL output - does not align with the X11 windows. - - o OpenGL extensions and functions from OpenGL 1.2 and later should work - but are not completely tested. - - o The standard Windows OpenGL driver will produce no output. Use the one - from your video adapter vendor. - -If you notice problems with some programs please send a message with the -logfile /tmp/XWin.log and a short error description to - -The hardware accelerated OpenGL was tested using: - - o glxgears - o glxinfo - o blender - o tuxkart - o GLUT demos (some did fail) - From 18801f5e5a98d80f4811ade8c98df65175b1935a Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Fri, 10 Feb 2012 09:27:16 +0000 Subject: [PATCH 11/14] hw/xwin: Remove unused WindowExposuresProcPtr storage in screen private We don't wrap the WindowExposures screen function Signed-off-by: Jon TURNEY Reviewed-by: Colin Harrison --- hw/xwin/win.h | 1 - 1 file changed, 1 deletion(-) diff --git a/hw/xwin/win.h b/hw/xwin/win.h index 9096df206..38d6bde18 100644 --- a/hw/xwin/win.h +++ b/hw/xwin/win.h @@ -579,7 +579,6 @@ typedef struct _winPrivScreenRec { UnrealizeWindowProcPtr UnrealizeWindow; ValidateTreeProcPtr ValidateTree; PostValidateTreeProcPtr PostValidateTree; - WindowExposuresProcPtr WindowExposures; CopyWindowProcPtr CopyWindow; ClearToBackgroundProcPtr ClearToBackground; ClipNotifyProcPtr ClipNotify; From 5940580f8c12145c1ef4c3eee898676b48d95879 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Mensmann?= Date: Tue, 17 Apr 2012 10:48:19 +0100 Subject: [PATCH 12/14] hw/xwin: Fix command line arguments for multiple monitors. Moving Xwin to a certain monitor using "-screen 0 @2" would fail, printing "ddxProcessArgument - screen - Querying monitors failed". This happened since commit 3ead1d810b0e157078db39712e02ea6dc85216d8, because EnumDisplayMonitor() returns FALSE if its callback function returns FALSE (which is not clearly documented), and QueryMonitor() would then also return FALSE. Moving back to the old behaviour, where the return value of EnumDisplayMonitors() is ignored. Reviewed-by: Jon TURNEY Reviewed-by: Colin Harrison --- hw/xwin/winmonitors.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hw/xwin/winmonitors.c b/hw/xwin/winmonitors.c index 473241099..07532f6f5 100644 --- a/hw/xwin/winmonitors.c +++ b/hw/xwin/winmonitors.c @@ -64,5 +64,7 @@ QueryMonitor(int index, struct GetMonitorInfoData *data) data->requestedMonitor = index; /* query information */ - return EnumDisplayMonitors(NULL, NULL, getMonitorInfo, (LPARAM) data); + EnumDisplayMonitors(NULL, NULL, getMonitorInfo, (LPARAM) data); + + return TRUE; } From 357ec54f46d31ff77c441c15c322152e04f89a11 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Wed, 14 Mar 2012 13:58:32 +0000 Subject: [PATCH 13/14] hw/xwin: Refer to xkeyboard-config man page for XKB configuration option values Also polish the keyboard configuration text a bit Include man section number in references to setxkbmap Consistently refer to 'manual page' rather using both that and 'man page' Signed-off-by: Jon TURNEY Reviewed-by: Colin Harrison --- hw/xwin/man/XWin.man | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/hw/xwin/man/XWin.man b/hw/xwin/man/XWin.man index d03a36521..dbadad6f5 100644 --- a/hw/xwin/man/XWin.man +++ b/hw/xwin/man/XWin.man @@ -313,18 +313,22 @@ exit silently and don't display any error message. .B "\-xkbvariant \fIvariant\fp" These options configure the xkeyboard extension to load a particular keyboard map as the X server starts. The behavior is similar -to the \fIsetxkbmap\fP program. The layout data is located at \fI -__datadir__/X11/xkb/\fP. Additional information is found in the -README files therein and in the man page of \fIsetxkbmap\fP. For example -in order to load a German layout for a pc105 keyboard one uses -the options: +to the \fIsetxkbmap\fP(1) program. + +See the \fIxkeyboard-config\fP(__miscmansuffix__) manual page for a list of +keyboard configurations. + +The keyboard layout data is located at \fI__datadir__/X11/xkb/\fP. Additional information +can be found in the README files there and in the \fIsetxkbmap\fP(1) manual page. + +For example, in order to load a German layout for a pc105 keyboard, use the options: .br .I " \-xkblayout de \-xkbmodel pc105" -Alternatively one may use the \fIsetxkbmap\fP program after \fIXWin\fP is +Alternatively, you can use the \fIsetxkbmap\fP(1) program after \fIXWin\fP is running. -The default is to select a configuration matching your current layout as +The default is to select a keyboard configuration matching your current layout as reported by \fIWindows\fP, if known, or the default X server configuration if no matching keyboard configuration was found. @@ -370,7 +374,7 @@ window, in both the generic case and for particular programs. * To change the style that is associated to the \fIWindows\fP window that \fXWin I-multiwindow\fP produces for each top-level X window. .PP -The format of the \fI.XWinrc\fP file is given in the man page XWinrc(5). +The format of the \fI.XWinrc\fP file is given in the XWinrc(5) manual page. .SH EXAMPLES Need some examples @@ -378,15 +382,15 @@ Need some examples .SH "SEE ALSO" X(__miscmansuffix__), Xserver(1), xdm(1), xinit(1), XWinrc(__filemansuffix__), -setxkbmap(1), xkeyboard-config (__miscmansuffix__). +setxkbmap(1), xkeyboard-config(__miscmansuffix__). .SH BUGS .I XWin -and this man page still have many limitations. +and this manual page still have many limitations. The \fIXWin\fP software is continuously developing; it is therefore possible that -this man page is not up to date. It is always prudent to +this manual page is not up to date. It is always prudent to look also at the output of \fIXWin -help\fP in order to check the options that are operative. From 75966a4186955f3a4625e93796145036c5986d2e Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 13 Jul 2012 14:36:25 -0700 Subject: [PATCH 14/14] xwin: Clean up os wrappers for System, Popen and Pclose on Windows Popen and Pclose are never used on Windows, so don't bother to even try to define them. System(s) was defined as system(s), but the two users of that function are in xkb, which carefully redefines that as Win32System. Move Win32System and Win32TempDir to os/utils.c, renaming Win32System to be just System, which simplifies the xkb code Signed-off-by: Keith Packard Reviewed-by: Jon TURNEY --- include/os.h | 10 ++++--- os/utils.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++++ xkb/ddxList.c | 6 ----- xkb/ddxLoad.c | 75 --------------------------------------------------- 4 files changed, 80 insertions(+), 84 deletions(-) diff --git a/include/os.h b/include/os.h index 7701c3977..9e323f331 100644 --- a/include/os.h +++ b/include/os.h @@ -359,9 +359,13 @@ Fopen(const char *, const char *); extern _X_EXPORT int Fclose(pointer); #else -#define System(a) system(a) -#define Popen(a,b) popen(a,b) -#define Pclose(a) pclose(a) + +extern const char * +Win32TempDir(void); + +extern int +System(const char *cmdline); + #define Fopen(a,b) fopen(a,b) #define Fclose(a) fclose(a) #endif diff --git a/os/utils.c b/os/utils.c index a6f6ef549..d902523be 100644 --- a/os/utils.c +++ b/os/utils.c @@ -1561,6 +1561,79 @@ Fclose(pointer iop) #endif /* !WIN32 */ +#ifdef WIN32 + +#include + +const char * +Win32TempDir() +{ + static char buffer[PATH_MAX]; + + if (GetTempPath(sizeof(buffer), buffer)) { + int len; + + buffer[sizeof(buffer) - 1] = 0; + len = strlen(buffer); + if (len > 0) + if (buffer[len - 1] == '\\') + buffer[len - 1] = 0; + return buffer; + } + if (getenv("TEMP") != NULL) + return getenv("TEMP"); + else if (getenv("TMP") != NULL) + return getenv("TEMP"); + else + return "/tmp"; +} + +int +System(const char *cmdline) +{ + STARTUPINFO si; + PROCESS_INFORMATION pi; + DWORD dwExitCode; + char *cmd = strdup(cmdline); + + ZeroMemory(&si, sizeof(si)); + si.cb = sizeof(si); + ZeroMemory(&pi, sizeof(pi)); + + if (!CreateProcess(NULL, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { + LPVOID buffer; + + if (!FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + GetLastError(), + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPTSTR) & buffer, 0, NULL)) { + ErrorF("[xkb] Starting '%s' failed!\n", cmdline); + } + else { + ErrorF("[xkb] Starting '%s' failed: %s", cmdline, (char *) buffer); + LocalFree(buffer); + } + + free(cmd); + return -1; + } + /* Wait until child process exits. */ + WaitForSingleObject(pi.hProcess, INFINITE); + + GetExitCodeProcess(pi.hProcess, &dwExitCode); + + /* Close process and thread handles. */ + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + free(cmd); + + return dwExitCode; +} +#endif + /* * CheckUserParameters: check for long command line arguments and long * environment variables. By default, these checks are only done when diff --git a/xkb/ddxList.c b/xkb/ddxList.c index 9b69b2b82..79f46379c 100644 --- a/xkb/ddxList.c +++ b/xkb/ddxList.c @@ -44,12 +44,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE. #ifdef WIN32 /* from ddxLoad.c */ -extern const char *Win32TempDir(void); -extern int Win32System(const char *cmdline); - -#undef System -#define System Win32System - #define W32_tmparg " '%s'" #define W32_tmpfile ,tmpname #define W32_tmplen strlen(tmpname)+3 diff --git a/xkb/ddxLoad.c b/xkb/ddxLoad.c index cb2dfc31c..d462957f4 100644 --- a/xkb/ddxLoad.c +++ b/xkb/ddxLoad.c @@ -68,81 +68,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE. #define PATHSEPARATOR "/" #endif -#ifdef WIN32 - -#include -const char * -Win32TempDir() -{ - static char buffer[PATH_MAX]; - - if (GetTempPath(sizeof(buffer), buffer)) { - int len; - - buffer[sizeof(buffer) - 1] = 0; - len = strlen(buffer); - if (len > 0) - if (buffer[len - 1] == '\\') - buffer[len - 1] = 0; - return buffer; - } - if (getenv("TEMP") != NULL) - return getenv("TEMP"); - else if (getenv("TMP") != NULL) - return getenv("TEMP"); - else - return "/tmp"; -} - -int -Win32System(const char *cmdline) -{ - STARTUPINFO si; - PROCESS_INFORMATION pi; - DWORD dwExitCode; - char *cmd = strdup(cmdline); - - ZeroMemory(&si, sizeof(si)); - si.cb = sizeof(si); - ZeroMemory(&pi, sizeof(pi)); - - if (!CreateProcess(NULL, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { - LPVOID buffer; - - if (!FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, - GetLastError(), - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPTSTR) & buffer, 0, NULL)) { - ErrorF("[xkb] Starting '%s' failed!\n", cmdline); - } - else { - ErrorF("[xkb] Starting '%s' failed: %s", cmdline, (char *) buffer); - LocalFree(buffer); - } - - free(cmd); - return -1; - } - /* Wait until child process exits. */ - WaitForSingleObject(pi.hProcess, INFINITE); - - GetExitCodeProcess(pi.hProcess, &dwExitCode); - - /* Close process and thread handles. */ - CloseHandle(pi.hProcess); - CloseHandle(pi.hThread); - free(cmd); - - return dwExitCode; -} - -#undef System -#define System(x) Win32System(x) -#endif - static void OutputDirectory(char *outdir, size_t size) {