Merge remote-tracking branch 'jturney/master'
This commit is contained in:
commit
6e438a0e18
|
@ -5,7 +5,6 @@ SRCS_CLIPBOARD = \
|
|||
winclipboardinit.c \
|
||||
winclipboardtextconv.c \
|
||||
winclipboardthread.c \
|
||||
winclipboardunicode.c \
|
||||
winclipboardwndproc.c \
|
||||
winclipboardwrappers.c \
|
||||
winclipboardxevents.c
|
||||
|
|
141
hw/xwin/README
141
hw/xwin/README
|
@ -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)
|
||||
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -111,13 +111,6 @@ void *winClipboardProc(void *);
|
|||
void
|
||||
winDeinitClipboard(void);
|
||||
|
||||
/*
|
||||
* winclipboardunicode.c
|
||||
*/
|
||||
|
||||
Bool
|
||||
winClipboardDetectUnicodeSupport(void);
|
||||
|
||||
/*
|
||||
* winclipboardwndproc.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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 *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;
|
||||
|
||||
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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; \
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
10
include/os.h
10
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
|
||||
|
|
73
os/utils.c
73
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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue
Block a user