diff options
Diffstat (limited to 'xorg-server/hw')
24 files changed, 196 insertions, 371 deletions
diff --git a/xorg-server/hw/xfree86/common/xf86Extensions.h b/xorg-server/hw/xfree86/common/xf86Extensions.h index 9b8448d64..cad86c881 100644 --- a/xorg-server/hw/xfree86/common/xf86Extensions.h +++ b/xorg-server/hw/xfree86/common/xf86Extensions.h @@ -29,25 +29,25 @@ #include "extnsionst.h" #ifdef XF86DRI -extern Bool noXFree86DRIExtension; +extern _X_EXPORT Bool noXFree86DRIExtension; extern void XFree86DRIExtensionInit(void); #endif #ifdef DRI2 #include <X11/extensions/dri2proto.h> -extern Bool noDRI2Extension; +extern _X_EXPORT Bool noDRI2Extension; extern void DRI2ExtensionInit(void); #endif #ifdef XF86VIDMODE #include <X11/extensions/xf86vmproto.h> -extern Bool noXFree86VidModeExtension; +extern _X_EXPORT Bool noXFree86VidModeExtension; extern void XFree86VidModeExtensionInit(void); #endif #ifdef XFreeXDGA #include <X11/extensions/xf86dgaproto.h> -extern Bool noXFree86DGAExtension; +extern _X_EXPORT Bool noXFree86DGAExtension; extern void XFree86DGAExtensionInit(void); extern void XFree86DGARegister(void); #endif diff --git a/xorg-server/hw/xfree86/dri2/dri2ext.c b/xorg-server/hw/xfree86/dri2/dri2ext.c index eb6fd44fc..ee610c0ec 100644 --- a/xorg-server/hw/xfree86/dri2/dri2ext.c +++ b/xorg-server/hw/xfree86/dri2/dri2ext.c @@ -550,15 +550,16 @@ static int ProcDRI2GetParam(ClientPtr client) { REQUEST(xDRI2GetParamReq); - xDRI2GetParamReply rep; + xDRI2GetParamReply rep = { + .type = X_Reply, + .sequenceNumber = client->sequence, + .length = 0 + }; DrawablePtr pDrawable; CARD64 value; int status; REQUEST_SIZE_MATCH(xDRI2GetParamReq); - rep.type = X_Reply; - rep.length = 0; - rep.sequenceNumber = client->sequence; if (!validDrawable(client, stuff->drawable, DixReadAccess, &pDrawable, &status)) diff --git a/xorg-server/hw/xwin/Makefile.am b/xorg-server/hw/xwin/Makefile.am index c49016398..4c2f04ef0 100644 --- a/xorg-server/hw/xwin/Makefile.am +++ b/xorg-server/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/xorg-server/hw/xwin/README b/xorg-server/hw/xwin/README deleted file mode 100644 index 9f7090344..000000000 --- a/xorg-server/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/xorg-server/hw/xwin/man/XWin.man b/xorg-server/hw/xwin/man/XWin.man index d03a36521..dbadad6f5 100644 --- a/xorg-server/hw/xwin/man/XWin.man +++ b/xorg-server/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/xorg-server/hw/xwin/win.h b/xorg-server/hw/xwin/win.h index b84ea9b14..38d6bde18 100644 --- a/xorg-server/hw/xwin/win.h +++ b/xorg-server/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/xorg-server/hw/xwin/winblock.c b/xorg-server/hw/xwin/winblock.c index c1a6e705a..480e3bd48 100644 --- a/xorg-server/hw/xwin/winblock.c +++ b/xorg-server/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/xorg-server/hw/xwin/winclipboard.h b/xorg-server/hw/xwin/winclipboard.h index 203a9639a..27eb2f96f 100644 --- a/xorg-server/hw/xwin/winclipboard.h +++ b/xorg-server/hw/xwin/winclipboard.h @@ -112,13 +112,6 @@ void winDeinitClipboard(void); /* - * winclipboardunicode.c - */ - -Bool - winClipboardDetectUnicodeSupport(void); - -/* * winclipboardwndproc.c */ diff --git a/xorg-server/hw/xwin/winclipboardinit.c b/xorg-server/hw/xwin/winclipboardinit.c index 696d9e2d6..304e6df9f 100644 --- a/xorg-server/hw/xwin/winclipboardinit.c +++ b/xorg-server/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/xorg-server/hw/xwin/winclipboardthread.c b/xorg-server/hw/xwin/winclipboardthread.c index 181cb7203..f2e8e6d6f 100644 --- a/xorg-server/hw/xwin/winclipboardthread.c +++ b/xorg-server/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/xorg-server/hw/xwin/winclipboardunicode.c b/xorg-server/hw/xwin/winclipboardunicode.c deleted file mode 100644 index 9c06f7b4d..000000000 --- a/xorg-server/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/xorg-server/hw/xwin/winclipboardwndproc.c b/xorg-server/hw/xwin/winclipboardwndproc.c index 78b061517..cbe6599f4 100644 --- a/xorg-server/hw/xwin/winclipboardwndproc.c +++ b/xorg-server/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/xorg-server/hw/xwin/winclipboardwrappers.c b/xorg-server/hw/xwin/winclipboardwrappers.c index 53b419ea0..1118f4ff8 100644 --- a/xorg-server/hw/xwin/winclipboardwrappers.c +++ b/xorg-server/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/xorg-server/hw/xwin/winclipboardxevents.c b/xorg-server/hw/xwin/winclipboardxevents.c index 59b1f0715..ce533c59f 100644 --- a/xorg-server/hw/xwin/winclipboardxevents.c +++ b/xorg-server/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/xorg-server/hw/xwin/wincreatewnd.c b/xorg-server/hw/xwin/wincreatewnd.c index 0a18a6a29..6732dcb58 100644 --- a/xorg-server/hw/xwin/wincreatewnd.c +++ b/xorg-server/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/xorg-server/hw/xwin/windialogs.c b/xorg-server/hw/xwin/windialogs.c index c62b5dbe9..a02146e95 100644 --- a/xorg-server/hw/xwin/windialogs.c +++ b/xorg-server/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/xorg-server/hw/xwin/winerror.c b/xorg-server/hw/xwin/winerror.c index a25307cb6..56c1e34e7 100644 --- a/xorg-server/hw/xwin/winerror.c +++ b/xorg-server/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/xorg-server/hw/xwin/winkeyhook.c b/xorg-server/hw/xwin/winkeyhook.c index 124150850..fe77b2190 100644 --- a/xorg-server/hw/xwin/winkeyhook.c +++ b/xorg-server/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/xorg-server/hw/xwin/winmonitors.c b/xorg-server/hw/xwin/winmonitors.c index 26e20b743..07532f6f5 100644 --- a/xorg-server/hw/xwin/winmonitors.c +++ b/xorg-server/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/xorg-server/hw/xwin/winmonitors.h b/xorg-server/hw/xwin/winmonitors.h index acef48274..8201e47f4 100644 --- a/xorg-server/hw/xwin/winmonitors.h +++ b/xorg-server/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/xorg-server/hw/xwin/winmultiwindowwm.c b/xorg-server/hw/xwin/winmultiwindowwm.c index c355e8919..76b46837c 100644 --- a/xorg-server/hw/xwin/winmultiwindowwm.c +++ b/xorg-server/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/xorg-server/hw/xwin/winprocarg.c b/xorg-server/hw/xwin/winprocarg.c index 0f789f09d..a5b3c07bf 100644 --- a/xorg-server/hw/xwin/winprocarg.c +++ b/xorg-server/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/xorg-server/hw/xwin/winscrinit.c b/xorg-server/hw/xwin/winscrinit.c index 5f112f97f..be25f12af 100644 --- a/xorg-server/hw/xwin/winscrinit.c +++ b/xorg-server/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/xorg-server/hw/xwin/winwndproc.c b/xorg-server/hw/xwin/winwndproc.c index 3f5d66b96..fe662b9ba 100644 --- a/xorg-server/hw/xwin/winwndproc.c +++ b/xorg-server/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; |