xserver: Branch 'master' - 15 commits

Keith Packard keithp at kemper.freedesktop.org
Tue Jul 17 12:15:52 PDT 2012


 hw/xwin/Makefile.am            |    1 
 hw/xwin/README                 |  141 -----------------------------------------
 hw/xwin/man/XWin.man           |   26 ++++---
 hw/xwin/win.h                  |    2 
 hw/xwin/winblock.c             |    2 
 hw/xwin/winclipboard.h         |    7 --
 hw/xwin/winclipboardinit.c     |    2 
 hw/xwin/winclipboardthread.c   |    8 --
 hw/xwin/winclipboardunicode.c  |   65 ------------------
 hw/xwin/winclipboardwndproc.c  |    7 --
 hw/xwin/winclipboardwrappers.c |   10 --
 hw/xwin/winclipboardxevents.c  |   14 ----
 hw/xwin/wincreatewnd.c         |   93 +++++++++++++++++----------
 hw/xwin/windialogs.c           |    8 +-
 hw/xwin/winerror.c             |    4 -
 hw/xwin/winkeyhook.c           |   18 -----
 hw/xwin/winmonitors.c          |    5 +
 hw/xwin/winmonitors.h          |   29 ++++++++
 hw/xwin/winmultiwindowwm.c     |   79 +++++++++++-----------
 hw/xwin/winprocarg.c           |   18 +++--
 hw/xwin/winscrinit.c           |    4 -
 hw/xwin/winwndproc.c           |    7 ++
 include/os.h                   |   10 ++
 os/utils.c                     |   73 +++++++++++++++++++++
 xkb/ddxList.c                  |    6 -
 xkb/ddxLoad.c                  |   75 ---------------------
 26 files changed, 267 insertions(+), 447 deletions(-)

New commits:
commit 6e438a0e183f5a6c22070746c038af53d5b935ca
Merge: 5884e7d... 75966a4...
Author: Keith Packard <keithp at keithp.com>
Date:   Tue Jul 17 12:12:53 2012 -0700

    Merge remote-tracking branch 'jturney/master'

commit 75966a4186955f3a4625e93796145036c5986d2e
Author: Keith Packard <keithp at keithp.com>
Date:   Fri Jul 13 14:36:25 2012 -0700

    xwin: Clean up os wrappers for System, Popen and Pclose on Windows
    
    Popen and Pclose are never used on Windows, so don't bother to even
    try to define them.
    
    System(s) was defined as system(s), but the two users of that
    function are in xkb, which carefully redefines that as
    Win32System. Move Win32System and Win32TempDir to os/utils.c, renaming
    Win32System to be just System, which simplifies the xkb code
    
    Signed-off-by: Keith Packard <keithp at keithp.com>
    Reviewed-by: Jon TURNEY <jon.turney at dronecode.org.uk>

diff --git a/include/os.h b/include/os.h
index 7701c39..9e323f3 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 a6f6ef5..d902523 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 9b69b2b..79f4637 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 cb2dfc3..d462957 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)
 {
commit 357ec54f46d31ff77c441c15c322152e04f89a11
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Wed Mar 14 13:58:32 2012 +0000

    hw/xwin: Refer to xkeyboard-config man page for XKB configuration option values
    
    Also polish the keyboard configuration text a bit
    Include man section number in references to setxkbmap
    Consistently refer to 'manual page' rather using both that and 'man page'
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Reviewed-by: Colin Harrison <colin.harrison at virgin.net>

diff --git a/hw/xwin/man/XWin.man b/hw/xwin/man/XWin.man
index d03a365..dbadad6 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.
 
commit 5940580f8c12145c1ef4c3eee898676b48d95879
Author: Jörg Mensmann <joerg_ml at bitplanet.de>
Date:   Tue Apr 17 10:48:19 2012 +0100

    hw/xwin: Fix command line arguments for multiple monitors.
    
    Moving Xwin to a certain monitor using "-screen 0 @2" would fail,
    printing "ddxProcessArgument - screen - Querying monitors failed".
    
    This happened since commit 3ead1d810b0e157078db39712e02ea6dc85216d8,
    because EnumDisplayMonitor() returns FALSE if its callback function
    returns FALSE (which is not clearly documented), and QueryMonitor()
    would then also return FALSE.
    
    Moving back to the old behaviour, where the return value of
    EnumDisplayMonitors() is ignored.
    
    Reviewed-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Reviewed-by: Colin Harrison <colin.harrison at virgin.net>

diff --git a/hw/xwin/winmonitors.c b/hw/xwin/winmonitors.c
index 4732410..07532f6 100644
--- a/hw/xwin/winmonitors.c
+++ b/hw/xwin/winmonitors.c
@@ -64,5 +64,7 @@ QueryMonitor(int index, struct GetMonitorInfoData *data)
     data->requestedMonitor = index;
 
     /* query information */
-    return EnumDisplayMonitors(NULL, NULL, getMonitorInfo, (LPARAM) data);
+    EnumDisplayMonitors(NULL, NULL, getMonitorInfo, (LPARAM) data);
+
+    return TRUE;
 }
commit 18801f5e5a98d80f4811ade8c98df65175b1935a
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Fri Feb 10 09:27:16 2012 +0000

    hw/xwin: Remove unused WindowExposuresProcPtr storage in screen private
    
    We don't wrap the WindowExposures screen function
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Reviewed-by: Colin Harrison <colin.harrison at virgin.net>

diff --git a/hw/xwin/win.h b/hw/xwin/win.h
index 9096df2..38d6bde 100644
--- a/hw/xwin/win.h
+++ b/hw/xwin/win.h
@@ -579,7 +579,6 @@ typedef struct _winPrivScreenRec {
     UnrealizeWindowProcPtr UnrealizeWindow;
     ValidateTreeProcPtr ValidateTree;
     PostValidateTreeProcPtr PostValidateTree;
-    WindowExposuresProcPtr WindowExposures;
     CopyWindowProcPtr CopyWindow;
     ClearToBackgroundProcPtr ClearToBackground;
     ClipNotifyProcPtr ClipNotify;
commit 8fd30859c293035fe505da76d8d7e64131bd5bc0
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Fri Feb 10 13:25:32 2012 +0000

    hw/xwin: Remove long obsolete README for hw/xwin
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Reviewed-by: Colin Harrison <colin.harrison at virgin.net>

diff --git a/hw/xwin/README b/hw/xwin/README
deleted file mode 100644
index 219fd13..0000000
--- 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 at 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 at cygwin.com>
-
-The hardware accelerated OpenGL was tested using: 
-
-   o glxgears
-   o glxinfo
-   o blender
-   o tuxkart
-   o GLUT demos (some did fail)
-
commit 3568d4af4ff2490e79286d242916e81afed57b58
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Thu Feb 23 22:32:09 2012 +0000

    hw/xwin: Remove a pointless OS version check in winInstallKeyboardHookLL()
    
    Checking for OS later than NT4 SP3 (which we didn't do correctly anyhow,
    just checking for NT) is pointless when other code in hw/xwin assumes at
    least NT 5.0
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Reviewed-by: Colin Harrison <colin.harrison at virgin.net>

diff --git a/hw/xwin/winkeyhook.c b/hw/xwin/winkeyhook.c
index 1241508..fe77b21 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,
commit 0ed0d3979050c4ee7bef64441d50c494d58d93b0
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Thu Jul 5 22:08:38 2012 +0100

    hw/xwin: Remove winClipboardDetectUnicodeSupport()
    
    This code for detecting if the Windows clipboard can support unicode
    is long obsolete.
    
    All NT versions of Windows support unicode clipboard, so any version
    of Windows we can run on must support unicode clipboard.
    
    The -nounicodeclipboard flag to disable use of unicode on the clipboard
    is retained.
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Reviewed-by: Colin Harrison <colin.harrison at virgin.net>

diff --git a/hw/xwin/Makefile.am b/hw/xwin/Makefile.am
index c490163..4c2f04e 100644
--- a/hw/xwin/Makefile.am
+++ b/hw/xwin/Makefile.am
@@ -5,7 +5,6 @@ SRCS_CLIPBOARD = \
 	winclipboardinit.c \
 	winclipboardtextconv.c \
 	winclipboardthread.c \
-	winclipboardunicode.c \
 	winclipboardwndproc.c \
 	winclipboardwrappers.c \
 	winclipboardxevents.c
diff --git a/hw/xwin/winclipboard.h b/hw/xwin/winclipboard.h
index 203a963..27eb2f9 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/winclipboardthread.c b/hw/xwin/winclipboardthread.c
index 47bd50f..f2e8e6d 100644
--- a/hw/xwin/winclipboardthread.c
+++ b/hw/xwin/winclipboardthread.c
@@ -64,7 +64,6 @@ static int clipboardRestarts = 0;
 static XIOErrorHandler g_winClipboardOldIOErrorHandler;
 static pthread_t g_winClipboardProcThread;
 
-Bool g_fUnicodeSupport = FALSE;
 Bool g_fUseUnicode = FALSE;
 
 /*
@@ -106,11 +105,8 @@ winClipboardProc(void *pvNotUsed)
     winDebug("winClipboardProc - Hello\n");
     ++clipboardRestarts;
 
-    /* Do we have Unicode support? */
-    g_fUnicodeSupport = winClipboardDetectUnicodeSupport();
-
     /* Do we use Unicode clipboard? */
-    fUseUnicode = g_fUnicodeClipboard && g_fUnicodeSupport;
+    fUseUnicode = g_fUnicodeClipboard;
 
     /* Save the Unicode support flag in a global */
     g_fUseUnicode = fUseUnicode;
diff --git a/hw/xwin/winclipboardunicode.c b/hw/xwin/winclipboardunicode.c
deleted file mode 100644
index 9c06f7b..0000000
--- 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 78b0615..cbe6599 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 882edc1..1118f4f 100644
--- a/hw/xwin/winclipboardwrappers.c
+++ b/hw/xwin/winclipboardwrappers.c
@@ -60,7 +60,6 @@ DISPATCH_PROC(winProcSetSelectionOwner);
  * References to external symbols
  */
 
-extern Bool g_fUnicodeSupport;
 extern int g_iNumScreens;
 extern unsigned int g_uiAuthDataLen;
 extern char *g_pAuthData;
@@ -362,11 +361,8 @@ winProcSetSelectionOwner(ClientPtr client)
         goto winProcSetSelectionOwner_Done;
     }
 
-    /* Advertise Unicode if we support it */
-    if (g_fUnicodeSupport)
-        SetClipboardData(CF_UNICODETEXT, NULL);
-
-    /* Always advertise regular text */
+    /* Advertise regular text and unicode */
+    SetClipboardData(CF_UNICODETEXT, NULL);
     SetClipboardData(CF_TEXT, NULL);
 
     /* Save handle to last owned selection */
diff --git a/hw/xwin/winclipboardxevents.c b/hw/xwin/winclipboardxevents.c
index 59b1f07..ce533c5 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:
commit c98471fad7d85fc9d9959b1c48edd90415f7bf15
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Thu Jul 5 18:00:06 2012 +0100

    hw/xwin: Consolidate duplicated code as getHwnd() function
    
    Consolidate code to find the native HWND of an X window, stored in the _WINDOWSWM_NATIVE_HWND
    property, duplicated in UpdateName() and PreserveWin32Stack() as getHwnd()
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Reviewed-by: Colin Harrison <colin.harrison at virgin.net>

diff --git a/hw/xwin/winmultiwindowwm.c b/hw/xwin/winmultiwindowwm.c
index 66ced75..76b4683 100644
--- a/hw/xwin/winmultiwindowwm.c
+++ b/hw/xwin/winmultiwindowwm.c
@@ -477,23 +477,23 @@ SendXMessage(Display * pDisplay, Window iWin, Atom atmType, long nData)
 }
 
 /*
- * Updates the name of a HWND according to its X WM_NAME property
+ * See if we can get the stored HWND for this window...
  */
-
-static void
-UpdateName(WMInfoPtr pWMInfo, Window iWindow)
+static HWND
+getHwnd(WMInfoPtr pWMInfo, Window iWindow)
 {
-    wchar_t *pszName;
     Atom atmType;
     int fmtRet;
     unsigned long items, remain;
-    HWND *retHwnd, hWnd;
-    XWindowAttributes attr;
-
-    hWnd = 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;
 
commit df7636dddb4981e14ee7d128c43bb08bdf6a8727
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Thu Jul 5 14:20:52 2012 +0100

    hw/xwin: Correct function name in log message
    
    Correct function name in log message winInitializeDefaultScreens -> winInitializeScreenDefaults
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Reviewed-by: Colin Harrison <colin.harrison at virgin.net>

diff --git a/hw/xwin/winprocarg.c b/hw/xwin/winprocarg.c
index 72fbf14..a5b3c07 100644
--- a/hw/xwin/winprocarg.c
+++ b/hw/xwin/winprocarg.c
@@ -101,14 +101,15 @@ winInitializeScreenDefaults(void)
             int dpiY = GetDeviceCaps(hdc, LOGPIXELSY);
 
             winErrorFVerb(2,
-                          "winInitializeDefaultScreens - native DPI x %d y %d\n",
+                          "winInitializeScreenDefaults - native DPI x %d y %d\n",
                           dpiX, dpiY);
+
             monitorResolution = dpiY;
             ReleaseDC(NULL, hdc);
         }
         else {
             winErrorFVerb(1,
-                          "winInitializeDefaultScreens - Failed to retrieve native DPI, falling back to default of %d DPI\n",
+                          "winInitializeScreenDefaults - Failed to retrieve native DPI, falling back to default of %d DPI\n",
                           WIN_DEFAULT_DPI);
             monitorResolution = WIN_DEFAULT_DPI;
         }
commit 9cdd3ed07425b222e8197b9a2f57ec1525c6fd54
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Fri Mar 16 12:56:45 2012 +0000

    hw/xwin: Tidy up some more pointless output which is always emitted
    
    It's not very useful to log lines like the below when the About.. dialog is used
    
    winAboutDlgProc - WM_COMMAND - IDOK or IDCANCEL
    winAboutDlgProc - WM_CLOSE
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Reviewed-by: Colin Harrison <colin.harrison at virgin.net>

diff --git a/hw/xwin/windialogs.c b/hw/xwin/windialogs.c
index c62b5db..a02146e 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;
commit eb5b4d8d809712053701f057a35bbf5348ac9059
Author: Colin Harrison <colin.harrison at virgin.net>
Date:   Thu Jul 5 14:03:44 2012 +0100

    hw/xwin: RANDR resize didn't occur when screen window was maximized or restored
    
    In windowed mode, with option -resize, RANDR resize was missing when the screen
    window was maximized or restored.
    
    Signed-off-by: Colin Harrison <colin.harrison at virgin.net>
    Reviewed-by: Jon TURNEY <jon.turney at dronecode.org.uk>

diff --git a/hw/xwin/winwndproc.c b/hw/xwin/winwndproc.c
index 3f5d66b..fe662b9 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;
commit 7e07d61857c5d2ee6e3c36c81b51bb4fe378b5a0
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Thu Jul 5 14:01:03 2012 +0100

    hw/xwin: Bug fixes for screen sizing when the screen window is on a non-primary monitor
    
    There is a bug that when the -screen option is used to specify a monitor for
    the screen window to be located on, but no explicit size is specified
    (and the -multiplemonitors option isn't specified), the screen
    window size is always constrained to fit the work area of the primary
    monitor (rather than the work area of the specified monitor)
    
    This gives incorrect results if you want a screen the same size as your
    non-primary monitor (e.g. by using -screen 0 @2) and your non-primary
    monitor is larger than your primary monitor.
    
    (This can be worked around by specifying -multiplemonitors and an explicit
    screen size the same size as the monitor (e.g. -multiplemonitors -screen 0
    1600x1200 at 2))
    
    Fix to use work area for the monitor specified for the screen, rather than the
    primary monitor work area (unless -multiplemonitors is used, in which case we
    continue to use the virtual desktop work area instead)
    
    Also fix the adjustment for an autohide taskbar, so that it is only done if the
    taskbar is on the same monitor as the screen (or -multiplemonitors is used)
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Reviewed-by: Colin Harrison <colin.harrison at virgin.net>

diff --git a/hw/xwin/win.h b/hw/xwin/win.h
index b84ea9b..9096df2 100644
--- a/hw/xwin/win.h
+++ b/hw/xwin/win.h
@@ -388,6 +388,7 @@ typedef struct {
     DWORD dwScreen;
 
     int iMonitor;
+    HMONITOR hMonitor;
     DWORD dwUserWidth;
     DWORD dwUserHeight;
     DWORD dwWidth;
diff --git a/hw/xwin/wincreatewnd.c b/hw/xwin/wincreatewnd.c
index 0a18a6a..6732dcb 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/winmonitors.c b/hw/xwin/winmonitors.c
index 26e20b7..4732410 100644
--- a/hw/xwin/winmonitors.c
+++ b/hw/xwin/winmonitors.c
@@ -48,6 +48,7 @@ getMonitorInfo(HMONITOR hMonitor, HDC hdc, LPRECT rect, LPARAM _data)
         data->monitorOffsetY = rect->top;
         data->monitorHeight = rect->bottom - rect->top;
         data->monitorWidth = rect->right - rect->left;
+        data->monitorHandle = hMonitor;
         return FALSE;
     }
     return TRUE;
diff --git a/hw/xwin/winmonitors.h b/hw/xwin/winmonitors.h
index acef482..8201e47 100644
--- a/hw/xwin/winmonitors.h
+++ b/hw/xwin/winmonitors.h
@@ -1,3 +1,31 @@
+/*
+
+Copyright 1993, 1998  The Open Group
+Copyright (C) Colin Harrison 2005-2008
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group shall
+not be used in advertising or otherwise to promote the sale, use or
+other dealings in this Software without prior written authorization
+from The Open Group.
+
+*/
 
 /* data returned for monitor information */
 struct GetMonitorInfoData {
@@ -9,6 +37,7 @@ struct GetMonitorInfoData {
     int monitorOffsetY;
     int monitorHeight;
     int monitorWidth;
+    HMONITOR monitorHandle;
 };
 
 Bool QueryMonitor(int index, struct GetMonitorInfoData *data);
diff --git a/hw/xwin/winprocarg.c b/hw/xwin/winprocarg.c
index caa2708..72fbf14 100644
--- a/hw/xwin/winprocarg.c
+++ b/hw/xwin/winprocarg.c
@@ -115,6 +115,7 @@ winInitializeScreenDefaults(void)
     }
 
     defaultScreenInfo.iMonitor = 1;
+    defaultScreenInfo.hMonitor = MonitorFromWindow(NULL, MONITOR_DEFAULTTOPRIMARY);
     defaultScreenInfo.dwWidth = dwWidth;
     defaultScreenInfo.dwHeight = dwHeight;
     defaultScreenInfo.dwUserWidth = dwWidth;
@@ -333,6 +334,7 @@ ddxProcessArgument(int argc, char *argv[], int i)
                 g_ScreenInfo[nScreenNum].fUserGaveHeightAndWidth = FALSE;
                 g_ScreenInfo[nScreenNum].fUserGavePosition = TRUE;
                 g_ScreenInfo[nScreenNum].iMonitor = iMonitor;
+                g_ScreenInfo[nScreenNum].hMonitor = data.monitorHandle;
                 g_ScreenInfo[nScreenNum].dwWidth = data.monitorWidth;
                 g_ScreenInfo[nScreenNum].dwHeight = data.monitorHeight;
                 g_ScreenInfo[nScreenNum].dwUserWidth = data.monitorWidth;
@@ -383,6 +385,7 @@ ddxProcessArgument(int argc, char *argv[], int i)
                     }
                     else if (data.bMonitorSpecifiedExists == TRUE) {
                         g_ScreenInfo[nScreenNum].iMonitor = iMonitor;
+                        g_ScreenInfo[nScreenNum].hMonitor = data.monitorHandle;
                         g_ScreenInfo[nScreenNum].dwInitialX +=
                             data.monitorOffsetX;
                         g_ScreenInfo[nScreenNum].dwInitialY +=
@@ -415,6 +418,7 @@ ddxProcessArgument(int argc, char *argv[], int i)
                                   iMonitor);
                     g_ScreenInfo[nScreenNum].fUserGavePosition = TRUE;
                     g_ScreenInfo[nScreenNum].iMonitor = iMonitor;
+                    g_ScreenInfo[nScreenNum].hMonitor = data.monitorHandle;
                     g_ScreenInfo[nScreenNum].dwInitialX = data.monitorOffsetX;
                     g_ScreenInfo[nScreenNum].dwInitialY = data.monitorOffsetY;
                 }
commit 090856b55b5895ce07f36ddebe6d8f7cb86c1826
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Thu Jul 5 13:19:02 2012 +0100

    hw/xwin: Tidy up some pointless output which is always emitted
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Reviewed-by: Colin Harrison <colin.harrison at virgin.net>

diff --git a/hw/xwin/winblock.c b/hw/xwin/winblock.c
index c1a6e70..480e3bd 100644
--- a/hw/xwin/winblock.c
+++ b/hw/xwin/winblock.c
@@ -58,7 +58,7 @@ winBlockHandler(ScreenPtr pScreen,
     if (pScreenPriv != NULL && !pScreenPriv->fServerStarted) {
         int iReturn;
 
-        winDebug("winBlockHandler - Releasing pmServerStarted\n");
+        ErrorF("winBlockHandler - pthread_mutex_unlock()\n");
 
         /* Flag that modules are to be started */
         pScreenPriv->fServerStarted = TRUE;
diff --git a/hw/xwin/winclipboardinit.c b/hw/xwin/winclipboardinit.c
index 696d9e2..304e6df 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 181cb72..47bd50f 100644
--- a/hw/xwin/winclipboardthread.c
+++ b/hw/xwin/winclipboardthread.c
@@ -103,7 +103,7 @@ winClipboardProc(void *pvNotUsed)
     char szDisplay[512];
     int iSelectError;
 
-    ErrorF("winClipboardProc - Hello\n");
+    winDebug("winClipboardProc - Hello\n");
     ++clipboardRestarts;
 
     /* Do we have Unicode support? */
diff --git a/hw/xwin/winclipboardwrappers.c b/hw/xwin/winclipboardwrappers.c
index 53b419e..882edc1 100644
--- a/hw/xwin/winclipboardwrappers.c
+++ b/hw/xwin/winclipboardwrappers.c
@@ -90,7 +90,7 @@ winProcEstablishConnection(ClientPtr client)
     static unsigned long s_ulServerGeneration = 0;
 
     if (s_iCallCount == 0)
-        ErrorF("winProcEstablishConnection - Hello\n");
+        winDebug("winProcEstablishConnection - Hello\n");
 
     /* Do nothing if clipboard is not enabled */
     if (!g_fClipboard) {
diff --git a/hw/xwin/winmultiwindowwm.c b/hw/xwin/winmultiwindowwm.c
index c355e89..66ced75 100644
--- a/hw/xwin/winmultiwindowwm.c
+++ b/hw/xwin/winmultiwindowwm.c
@@ -380,21 +380,21 @@ InitQueue(WMMsgQueuePtr pQueue)
     pQueue->nQueueSize = 0;
 
 #if CYGMULTIWINDOW_DEBUG
-    ErrorF("InitQueue - Queue Size %d %d\n", pQueue->nQueueSize,
-           QueueSize(pQueue));
+    winDebug("InitQueue - Queue Size %d %d\n", pQueue->nQueueSize,
+             QueueSize(pQueue));
 #endif
 
-    ErrorF("InitQueue - Calling pthread_mutex_init\n");
+    winDebug("InitQueue - Calling pthread_mutex_init\n");
 
     /* Create synchronization objects */
     pthread_mutex_init(&pQueue->pmMutex, NULL);
 
-    ErrorF("InitQueue - pthread_mutex_init returned\n");
-    ErrorF("InitQueue - Calling pthread_cond_init\n");
+    winDebug("InitQueue - pthread_mutex_init returned\n");
+    winDebug("InitQueue - Calling pthread_cond_init\n");
 
     pthread_cond_init(&pQueue->pcNotEmpty, NULL);
 
-    ErrorF("InitQueue - pthread_cond_init returned\n");
+    winDebug("InitQueue - pthread_cond_init returned\n");
 
     return TRUE;
 }
@@ -802,7 +802,7 @@ winMultiWindowXMsgProc(void *pArg)
     int iReturn;
     XIconSize *xis;
 
-    ErrorF("winMultiWindowXMsgProc - Hello\n");
+    winDebug("winMultiWindowXMsgProc - Hello\n");
 
     /* Check that argument pointer is not invalid */
     if (pProcArg == NULL) {
@@ -1172,7 +1172,7 @@ winInitMultiWindowWM(WMInfoPtr pWMInfo, WMProcArgPtr pProcArg)
     char pszDisplay[512];
     int iReturn;
 
-    ErrorF("winInitMultiWindowWM - Hello\n");
+    winDebug("winInitMultiWindowWM - Hello\n");
 
     /* Check that argument pointer is not invalid */
     if (pProcArg == NULL) {
diff --git a/hw/xwin/winprocarg.c b/hw/xwin/winprocarg.c
index b9114bf..caa2708 100644
--- a/hw/xwin/winprocarg.c
+++ b/hw/xwin/winprocarg.c
@@ -159,7 +159,7 @@ winInitializeScreenDefaults(void)
 static void
 winInitializeScreen(int i)
 {
-    winErrorFVerb(2, "winInitializeScreen - %d\n", i);
+    winErrorFVerb(3, "winInitializeScreen - %d\n", i);
 
     /* Initialize default screen values, if needed */
     winInitializeScreenDefaults();
@@ -176,7 +176,7 @@ winInitializeScreens(int maxscreens)
 {
     int i;
 
-    winErrorFVerb(2, "winInitializeScreens - %i\n", maxscreens);
+    winErrorFVerb(3, "winInitializeScreens - %i\n", maxscreens);
 
     if (maxscreens > g_iNumScreens) {
         /* Reallocate the memory for DDX-specific screen info */
diff --git a/hw/xwin/winscrinit.c b/hw/xwin/winscrinit.c
index 5f112f9..be25f12 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; \
     }
 
commit 9fe9c5f868886abf671b3be3964af1965dd92472
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Sun Feb 13 18:52:52 2011 +0000

    hw/xwin: Don't bother reporting XORG_VERSION_CURRENT
    
    Don't bother reporting XORG_VERSION_CURRENT, when we also
    report the version number broken down into it's components
    XORG_VERSION_MAJOR, XORG_VERSION_MINOR, etc. as well.
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Reviewed-by: Colin Harrison <colin.harrison at virgin.net>

diff --git a/hw/xwin/winerror.c b/hw/xwin/winerror.c
index a25307c..56c1e34 100644
--- a/hw/xwin/winerror.c
+++ b/hw/xwin/winerror.c
@@ -111,7 +111,7 @@ winMessageBoxF(const char *pszError, UINT uType, ...)
 #define MESSAGEBOXF \
 	"%s\n" \
 	"Vendor: %s\n" \
-	"Release: %d.%d.%d.%d (%d)\n" \
+	"Release: %d.%d.%d.%d\n" \
 	"Contact: %s\n" \
 	"%s\n\n" \
 	"XWin was started with the following command-line:\n\n" \
@@ -120,7 +120,7 @@ winMessageBoxF(const char *pszError, UINT uType, ...)
     size = asprintf(&pszMsgBox, MESSAGEBOXF,
                     pszErrorF, XVENDORNAME,
                     XORG_VERSION_MAJOR, XORG_VERSION_MINOR, XORG_VERSION_PATCH,
-                    XORG_VERSION_SNAP, XORG_VERSION_CURRENT,
+                    XORG_VERSION_SNAP,
                     BUILDERADDR, BUILDERSTRING, g_pszCommandLine);
 
     if (size == -1) {
diff --git a/hw/xwin/winprocarg.c b/hw/xwin/winprocarg.c
index 0f789f0..b9114bf 100644
--- a/hw/xwin/winprocarg.c
+++ b/hw/xwin/winprocarg.c
@@ -1158,9 +1158,8 @@ winLogVersionInfo(void)
 
     ErrorF("Welcome to the XWin X Server\n");
     ErrorF("Vendor: %s\n", XVENDORNAME);
-    ErrorF("Release: %d.%d.%d.%d (%d)\n", XORG_VERSION_MAJOR,
-           XORG_VERSION_MINOR, XORG_VERSION_PATCH, XORG_VERSION_SNAP,
-           XORG_VERSION_CURRENT);
+    ErrorF("Release: %d.%d.%d.%d\n", XORG_VERSION_MAJOR,
+           XORG_VERSION_MINOR, XORG_VERSION_PATCH, XORG_VERSION_SNAP);
     ErrorF("%s\n\n", BUILDERSTRING);
     ErrorF("Contact: %s\n", BUILDERADDR);
 }


More information about the xorg-commit mailing list