diff options
author | Keith Packard <keithp@keithp.com> | 2012-07-17 12:12:53 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2012-07-17 12:12:53 -0700 |
commit | 6e438a0e183f5a6c22070746c038af53d5b935ca (patch) | |
tree | 0222415b49a84ff0257b64e70f1bee819975df48 | |
parent | 5884e7dedecdd82ddbb037360cf9c85143e094b5 (diff) | |
parent | 75966a4186955f3a4625e93796145036c5986d2e (diff) |
Merge remote-tracking branch 'jturney/master'
-rw-r--r-- | hw/xwin/Makefile.am | 1 | ||||
-rw-r--r-- | hw/xwin/README | 141 | ||||
-rw-r--r-- | hw/xwin/man/XWin.man | 26 | ||||
-rw-r--r-- | hw/xwin/win.h | 2 | ||||
-rw-r--r-- | hw/xwin/winblock.c | 2 | ||||
-rw-r--r-- | hw/xwin/winclipboard.h | 7 | ||||
-rw-r--r-- | hw/xwin/winclipboardinit.c | 2 | ||||
-rw-r--r-- | hw/xwin/winclipboardthread.c | 8 | ||||
-rw-r--r-- | hw/xwin/winclipboardunicode.c | 65 | ||||
-rw-r--r-- | hw/xwin/winclipboardwndproc.c | 7 | ||||
-rw-r--r-- | hw/xwin/winclipboardwrappers.c | 10 | ||||
-rw-r--r-- | hw/xwin/winclipboardxevents.c | 14 | ||||
-rw-r--r-- | hw/xwin/wincreatewnd.c | 93 | ||||
-rw-r--r-- | hw/xwin/windialogs.c | 8 | ||||
-rw-r--r-- | hw/xwin/winerror.c | 4 | ||||
-rw-r--r-- | hw/xwin/winkeyhook.c | 18 | ||||
-rw-r--r-- | hw/xwin/winmonitors.c | 5 | ||||
-rw-r--r-- | hw/xwin/winmonitors.h | 29 | ||||
-rw-r--r-- | hw/xwin/winmultiwindowwm.c | 79 | ||||
-rw-r--r-- | hw/xwin/winprocarg.c | 18 | ||||
-rw-r--r-- | hw/xwin/winscrinit.c | 4 | ||||
-rw-r--r-- | hw/xwin/winwndproc.c | 7 | ||||
-rw-r--r-- | include/os.h | 10 | ||||
-rw-r--r-- | os/utils.c | 73 | ||||
-rw-r--r-- | xkb/ddxList.c | 6 | ||||
-rw-r--r-- | xkb/ddxLoad.c | 75 |
26 files changed, 267 insertions, 447 deletions
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/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 <cygwin-xfree@cygwin.com> - -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 <cygwin-xfree@cygwin.com> - -The hardware accelerated OpenGL was tested using: - - o glxgears - o glxinfo - o blender - o tuxkart - o GLUT demos (some did fail) - 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. diff --git a/hw/xwin/win.h b/hw/xwin/win.h index b84ea9b14..38d6bde18 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; @@ -578,7 +579,6 @@ typedef struct _winPrivScreenRec { UnrealizeWindowProcPtr UnrealizeWindow; ValidateTreeProcPtr ValidateTree; PostValidateTreeProcPtr PostValidateTree; - WindowExposuresProcPtr WindowExposures; CopyWindowProcPtr CopyWindow; ClearToBackgroundProcPtr ClearToBackground; ClipNotifyProcPtr ClipNotify; 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/winclipboard.h b/hw/xwin/winclipboard.h index 203a9639a..27eb2f96f 100644 --- a/hw/xwin/winclipboard.h +++ b/hw/xwin/winclipboard.h @@ -112,13 +112,6 @@ void winDeinitClipboard(void); /* - * winclipboardunicode.c - */ - -Bool - winClipboardDetectUnicodeSupport(void); - -/* * winclipboardwndproc.c */ 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..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; /* @@ -103,14 +102,11 @@ winClipboardProc(void *pvNotUsed) char szDisplay[512]; int iSelectError; - ErrorF("winClipboardProc - Hello\n"); + 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 <xwin-config.h> -#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 53b419ea0..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; @@ -90,7 +89,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) { @@ -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 @@ -37,12 +37,6 @@ #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: 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; - /* SPI_GETWORKAREA only gets the work area of the primary screen. */ - SystemParametersInfo(SPI_GETWORKAREA, 0, prcWorkArea, 0); + /* 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; - /* Bail out here if we aren't using multiple monitors */ - if (!pScreenInfo->fMultipleMonitors) + 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; + } - winDebug("winGetWorkArea - Original WorkArea: %d %d %d %d\n", + /* SPI_GETWORKAREA only gets the work area of the primary screen. */ + SystemParametersInfo(SPI_GETWORKAREA, 0, prcWorkArea, 0); + + 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/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; 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/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, diff --git a/hw/xwin/winmonitors.c b/hw/xwin/winmonitors.c index 26e20b743..07532f6f5 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; @@ -63,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; } 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/winmultiwindowwm.c b/hw/xwin/winmultiwindowwm.c index c355e8919..76b46837c 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; } @@ -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 = 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, + HWND *retHwnd, hWnd = NULL; + + 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; @@ -802,7 +805,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 +1175,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 0f789f09d..a5b3c07bf 100644 --- a/hw/xwin/winprocarg.c +++ b/hw/xwin/winprocarg.c @@ -101,20 +101,22 @@ 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; } } defaultScreenInfo.iMonitor = 1; + defaultScreenInfo.hMonitor = MonitorFromWindow(NULL, MONITOR_DEFAULTTOPRIMARY); defaultScreenInfo.dwWidth = dwWidth; defaultScreenInfo.dwHeight = dwHeight; defaultScreenInfo.dwUserWidth = dwWidth; @@ -159,7 +161,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 +178,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 */ @@ -333,6 +335,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 +386,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 +419,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; } @@ -1158,9 +1163,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); } 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; \ } 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; 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 <X11/Xwindows.h> + +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 <X11/Xwindows.h> -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) { |