summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2012-07-17 12:12:53 -0700
committerKeith Packard <keithp@keithp.com>2012-07-17 12:12:53 -0700
commit6e438a0e183f5a6c22070746c038af53d5b935ca (patch)
tree0222415b49a84ff0257b64e70f1bee819975df48
parent5884e7dedecdd82ddbb037360cf9c85143e094b5 (diff)
parent75966a4186955f3a4625e93796145036c5986d2e (diff)
Merge remote-tracking branch 'jturney/master'
-rw-r--r--hw/xwin/Makefile.am1
-rw-r--r--hw/xwin/README141
-rw-r--r--hw/xwin/man/XWin.man26
-rw-r--r--hw/xwin/win.h2
-rw-r--r--hw/xwin/winblock.c2
-rw-r--r--hw/xwin/winclipboard.h7
-rw-r--r--hw/xwin/winclipboardinit.c2
-rw-r--r--hw/xwin/winclipboardthread.c8
-rw-r--r--hw/xwin/winclipboardunicode.c65
-rw-r--r--hw/xwin/winclipboardwndproc.c7
-rw-r--r--hw/xwin/winclipboardwrappers.c10
-rw-r--r--hw/xwin/winclipboardxevents.c14
-rw-r--r--hw/xwin/wincreatewnd.c93
-rw-r--r--hw/xwin/windialogs.c8
-rw-r--r--hw/xwin/winerror.c4
-rw-r--r--hw/xwin/winkeyhook.c18
-rw-r--r--hw/xwin/winmonitors.c5
-rw-r--r--hw/xwin/winmonitors.h29
-rw-r--r--hw/xwin/winmultiwindowwm.c79
-rw-r--r--hw/xwin/winprocarg.c18
-rw-r--r--hw/xwin/winscrinit.c4
-rw-r--r--hw/xwin/winwndproc.c7
-rw-r--r--include/os.h10
-rw-r--r--os/utils.c73
-rw-r--r--xkb/ddxList.c6
-rw-r--r--xkb/ddxLoad.c75
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)
{