[Xquartz-changes] xserver: Branch 'master' - 5 commits

Jeremy Huddleston jeremyhu at freedesktop.org
Sat Mar 17 02:50:29 PDT 2012


Rebased ref, commits from common ancestor:
commit d6630a6f96197f0f304beb76da2a0154b657342d
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date:   Fri Feb 17 13:15:12 2012 -0800

    XQuartz: Detect FatalErrors on startup to prevent tight crash loops
    
    If a FatalError occurs before the server finishes launching, it will
    not have drained the launchd-owned DISPLAY socket, so launchd will
    just relaunch it.  This can cause the server to crash in a tight loop
    which will spam the user with CrashReporter windows that claim focus on
    appearance.
    
    This allows users stuck in this loop to "deal" with the problem without
    popping up a crash report every 10 seconds.
    
    Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>

diff --git a/hw/xquartz/X11Application.h b/hw/xquartz/X11Application.h
index 9a64279..09d196b 100644
--- a/hw/xquartz/X11Application.h
+++ b/hw/xquartz/X11Application.h
@@ -76,6 +76,8 @@ void X11ApplicationLaunchClient (const char *cmd);
 
 Bool X11ApplicationCanEnterRandR (void);
 
+void X11ApplicationFatalError(const char *f, va_list args) __printflike(1, 0);
+
 void X11ApplicationMain(int argc, char **argv, char **envp);
 
 #define PREFS_APPSMENU              "apps_menu"
diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index c9c70a3..47ba867 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -70,6 +70,7 @@ static dispatch_queue_t eventTranslationQueue;
 
 extern Bool noTestExtensions;
 extern Bool noRenderExtension;
+extern BOOL serverRunning;
 
 #if MAC_OS_X_VERSION_MIN_REQUIRED >= 1050
 static TISInputSourceRef last_key_layout;
@@ -944,6 +945,48 @@ Bool X11ApplicationCanEnterRandR(void) {
     }
 }
 
+void X11ApplicationFatalError(const char *f, va_list args) {
+#ifdef HAVE_LIBDISPATCH
+    NSString *title, *msg;
+    char *error_msg;
+
+    /* This is called by FatalError() in the server thread just before
+     * we would abort.  If the server never got off the ground, We should
+     * inform the user of the error rather than letting the ever-so-friendly
+     * CrashReporter do it for us.
+     *
+     * This also has the benefit of forcing user interaction rather than
+     * allowing an infinite throttled-restart if the crash occurs before
+     * we can drain the launchd socket.
+     */
+
+    if (serverRunning) {
+        return;
+    }
+
+    title = NSLocalizedString(@"The application X11 could not be opened.",
+                              @"Dialog title when encountering a fatal error");
+    msg = NSLocalizedString(@"An error occurred while starting the X11 server: \"%s\"\n\nClick Quit to quit X11. Click Report to see more details or send a report to Apple.",
+                            @"Dialog when encountering a fatal error");
+
+    vasprintf(&error_msg, f, args);
+    msg = [NSString stringWithFormat:msg, error_msg];
+
+    /* We want the AppKit thread to actually service the alert or we will race [NSApp run] and create an
+     * 'NSInternalInconsistencyException', reason: 'NSApp with wrong _running count'
+     */
+    dispatch_sync(dispatch_get_main_queue(), ^{
+        if (NSAlertDefaultReturn == NSRunAlertPanel(title, msg, NSLocalizedString(@"Quit", @""),
+                                                    NSLocalizedString (@"Report...", @""), nil)) {
+            exit(EXIT_FAILURE);
+        }
+    });
+
+    /* fall back to caller to do the abort() in the DIX */
+#endif
+}
+
+
 static void check_xinitrc (void) {
     char *tem, buf[1024];
     NSString *msg;
diff --git a/hw/xquartz/bundle/Resources/English.lproj/Localizable.strings b/hw/xquartz/bundle/Resources/English.lproj/Localizable.strings
index bf2089c..36ae0ff 100644
Binary files a/hw/xquartz/bundle/Resources/English.lproj/Localizable.strings and b/hw/xquartz/bundle/Resources/English.lproj/Localizable.strings differ
diff --git a/hw/xquartz/darwin.c b/hw/xquartz/darwin.c
index 39442f8..4e62daa 100644
--- a/hw/xquartz/darwin.c
+++ b/hw/xquartz/darwin.c
@@ -78,6 +78,8 @@
 #include "quartzKeyboard.h"
 #include "quartz.h"
 
+#include "X11Application.h"
+
 aslclient aslc;
 
 void xq_asl_log (int level, const char *subsystem, const char *file, const char *function, int line, const char *fmt, ...) {
@@ -608,7 +610,7 @@ void InitOutput( ScreenInfo *pScreenInfo, int argc, char **argv )
  */
 void OsVendorFatalError(const char *f, va_list args)
 {
-    ErrorF( "   OsVendorFatalError\n" );
+    X11ApplicationFatalError(f, args);
 }
 
 
commit d48f7ffcf3b6395c030cd9cd8850a598ab42a24a
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date:   Fri Feb 17 12:35:02 2012 -0800

    os: Pass the FatalError message to OsVendorFatalError
    
    Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
    Reviewed-by: Jon TURNEY <jon.turney at dronecode.org.uk>

diff --git a/hw/dmx/dmxinit.c b/hw/dmx/dmxinit.c
index 57c2425..9388833 100644
--- a/hw/dmx/dmxinit.c
+++ b/hw/dmx/dmxinit.c
@@ -855,7 +855,7 @@ void OsVendorInit(void)
  * OsVendorVErrorFProc will cause \a VErrorF() (which is called by the
  * two routines mentioned here, as well as by others) to use the
  * referenced routine instead of \a vfprintf().) */
-void OsVendorFatalError(void)
+void OsVendorFatalError(const char *f, va_list args)
 {
 }
 
diff --git a/hw/dmx/dmxlog.c b/hw/dmx/dmxlog.c
index 94b8035..0ebe9f9 100644
--- a/hw/dmx/dmxlog.c
+++ b/hw/dmx/dmxlog.c
@@ -102,9 +102,6 @@ static void VFatalError(const char *format, va_list args)
 {
     VErrorF(format, args);
     ErrorF("\n");
-#ifdef DDXOSFATALERROR
-    OsVendorFatalError();
-#endif
     AbortServer();
     /*NOTREACHED*/
 }
diff --git a/hw/kdrive/src/kdrive.c b/hw/kdrive/src/kdrive.c
index f6cc351..5d69830 100644
--- a/hw/kdrive/src/kdrive.c
+++ b/hw/kdrive/src/kdrive.c
@@ -1167,7 +1167,7 @@ KdInitOutput (ScreenInfo    *pScreenInfo,
 }
 
 void
-OsVendorFatalError(void)
+OsVendorFatalError(const char *f, va_list args)
 {
 }
 
diff --git a/hw/vfb/InitOutput.c b/hw/vfb/InitOutput.c
index e1af5a4..71c7b6d 100644
--- a/hw/vfb/InitOutput.c
+++ b/hw/vfb/InitOutput.c
@@ -219,7 +219,7 @@ OsVendorInit(void)
 }
 
 void
-OsVendorFatalError(void)
+OsVendorFatalError(const char *f, va_list args)
 {
 }
 
diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index 5263b5f..56550c9 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -1036,7 +1036,7 @@ AbortDDX(enum ExitCode error)
 }
 
 void
-OsVendorFatalError(void)
+OsVendorFatalError(const char *f, va_list args)
 {
 #ifdef VENDORSUPPORT
     ErrorF("\nPlease refer to your Operating System Vendor support pages\n"
diff --git a/hw/xnest/Init.c b/hw/xnest/Init.c
index af57518..b7e76b5 100644
--- a/hw/xnest/Init.c
+++ b/hw/xnest/Init.c
@@ -138,7 +138,7 @@ void OsVendorInit(void)
     return;
 }
 
-void OsVendorFatalError(void)
+void OsVendorFatalError(const char *f, va_list args)
 {
     return;
 }
diff --git a/hw/xquartz/darwin.c b/hw/xquartz/darwin.c
index c44b29e..39442f8 100644
--- a/hw/xquartz/darwin.c
+++ b/hw/xquartz/darwin.c
@@ -606,7 +606,7 @@ void InitOutput( ScreenInfo *pScreenInfo, int argc, char **argv )
 /*
  * OsVendorFatalError
  */
-void OsVendorFatalError( void )
+void OsVendorFatalError(const char *f, va_list args)
 {
     ErrorF( "   OsVendorFatalError\n" );
 }
diff --git a/hw/xwin/winerror.c b/hw/xwin/winerror.c
index 0440d13..82ab382 100644
--- a/hw/xwin/winerror.c
+++ b/hw/xwin/winerror.c
@@ -71,7 +71,7 @@ OsVendorVErrorF (const char *pszFormat, va_list va_args)
  * Attempt to do last-ditch, safe, important cleanup here.
  */
 void
-OsVendorFatalError (void)
+OsVendorFatalError (const char *f, va_list args)
 {
   /* Don't give duplicate warning if UseMsg was called */
   if (g_fSilentFatalError)
diff --git a/include/os.h b/include/os.h
index 48ce329..ae7a6f1 100644
--- a/include/os.h
+++ b/include/os.h
@@ -296,7 +296,7 @@ extern _X_EXPORT void OsInit(void);
 
 extern _X_EXPORT void OsCleanup(Bool);
 
-extern _X_EXPORT void OsVendorFatalError(void);
+extern _X_EXPORT void OsVendorFatalError(const char *f, va_list args) _X_ATTRIBUTE_PRINTF(1,0);;
 
 extern _X_EXPORT void OsVendorInit(void);
 
diff --git a/os/log.c b/os/log.c
index 671a01b..cdff7d1 100644
--- a/os/log.c
+++ b/os/log.c
@@ -585,6 +585,7 @@ void
 FatalError(const char *f, ...)
 {
     va_list args;
+    va_list args2;
     static Bool beenhere = FALSE;
 
     if (beenhere)
@@ -592,20 +593,23 @@ FatalError(const char *f, ...)
     else
 	ErrorF("\nFatal server error:\n");
 
-    va_start(args, f);
+    /* Make a copy for OsVendorFatalError */
+    va_copy(args2, args);
+
 #ifdef __APPLE__
     {
-        va_list args2;
-        va_copy(args2, args);
-        (void)vsnprintf(__crashreporter_info_buff__, sizeof(__crashreporter_info_buff__), f, args2);
-        va_end(args2);
+        va_list apple_args;
+        va_copy(apple_args, args);
+        (void)vsnprintf(__crashreporter_info_buff__, sizeof(__crashreporter_info_buff__), f, apple_args);
+        va_end(apple_args);
     }
 #endif
     VErrorF(f, args);
     va_end(args);
     ErrorF("\n");
     if (!beenhere)
-	OsVendorFatalError();
+	OsVendorFatalError(f, args2);
+    va_end(args2);
     if (!beenhere) {
 	beenhere = TRUE;
 	AbortServer();
diff --git a/test/ddxstubs.c b/test/ddxstubs.c
index baf2a7a..afaadfc 100644
--- a/test/ddxstubs.c
+++ b/test/ddxstubs.c
@@ -43,7 +43,7 @@ void ProcessInputEvents(void) {
 void OsVendorInit(void) {
 }
 
-void OsVendorFatalError(void) {
+void OsVendorFatalError(const char *f, va_list args) {
 }
 
 void AbortDDX(enum ExitCode error) {
commit a7002fce86ce47d08e8ffd7205a76fa9e88ad55b
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date:   Tue Mar 13 00:15:55 2012 -0700

    XQuartz: Add a defaults option to disable the RENDER extension
    
    RENDER has some ugly issues on XQuartz, so add an option to disable RENDER.
    
    Enables workaround for: https://bugs.freedesktop.org/show_bug.cgi?id=26124
    
    Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>

diff --git a/hw/xquartz/X11Application.h b/hw/xquartz/X11Application.h
index baee29d..9a64279 100644
--- a/hw/xquartz/X11Application.h
+++ b/hw/xquartz/X11Application.h
@@ -96,6 +96,7 @@ void X11ApplicationMain(int argc, char **argv, char **envp);
 #define PREFS_APPKIT_MODIFIERS      "appkit_modifiers"
 #define PREFS_WINDOW_ITEM_MODIFIERS "window_item_modifiers"
 #define PREFS_ROOTLESS              "rootless"
+#define PREFS_RENDER_EXTENSION      "enable_render_extension"
 #define PREFS_TEST_EXTENSIONS       "enable_test_extensions"
 #define PREFS_XP_OPTIONS            "xp_options"
 #define PREFS_LOGIN_SHELL           "login_shell"
diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index 048e787..c9c70a3 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -69,6 +69,7 @@ static dispatch_queue_t eventTranslationQueue;
 #endif
 
 extern Bool noTestExtensions;
+extern Bool noRenderExtension;
 
 #if MAC_OS_X_VERSION_MIN_REQUIRED >= 1050
 static TISInputSourceRef last_key_layout;
@@ -792,6 +793,9 @@ static NSMutableArray * cfarray_to_nsarray (CFArrayRef in) {
     noTestExtensions = ![self prefs_get_boolean:@PREFS_TEST_EXTENSIONS
                                         default:FALSE];
     
+    noRenderExtension = ![self prefs_get_boolean:@PREFS_RENDER_EXTENSION
+                                        default:TRUE];
+    
     XQuartzScrollInDeviceDirection = [self prefs_get_boolean:@PREFS_SCROLL_IN_DEV_DIRECTION
                                                      default:XQuartzScrollInDeviceDirection];
 
commit 902f5716729976d320a13d0e4d9b736839da1a06
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date:   Sat Mar 17 00:04:27 2012 -0700

    XQuartz: Use doubles for input valuators
    
    Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>

diff --git a/hw/xquartz/darwinEvents.c b/hw/xquartz/darwinEvents.c
index 3438da1..a4718a3 100644
--- a/hw/xquartz/darwinEvents.c
+++ b/hw/xquartz/darwinEvents.c
@@ -403,9 +403,12 @@ static void DarwinPokeEQ(void) {
  * Note: pointer_x and pointer_y are relative to the upper-left of primary
  *       display.
  */
-static void DarwinPrepareValuators(DeviceIntPtr pDev, int *valuators, ScreenPtr screen,
-                                   float pointer_x, float pointer_y, 
-                                   float pressure, float tilt_x, float tilt_y) {
+static void DarwinPrepareValuators(DeviceIntPtr pDev, ValuatorMask *pmask, ScreenPtr screen,
+                                   double pointer_x, double pointer_y, 
+                                   double pressure, double tilt_x, double tilt_y) {
+
+    valuator_mask_zero(pmask);
+
     /* Fix offset between darwin and X screens */
     pointer_x -= darwinMainScreenX + screen->x;
     pointer_y -= darwinMainScreenY + screen->y;
@@ -417,21 +420,19 @@ static void DarwinPrepareValuators(DeviceIntPtr pDev, int *valuators, ScreenPtr
         pointer_y = 0.0;
     
     if(pDev == darwinPointer) {
-        valuators[0] = pointer_x;
-        valuators[1] = pointer_y;
-        valuators[2] = 0;
-        valuators[3] = 0;
-        valuators[4] = 0;
+        valuator_mask_set_double(pmask, 0, pointer_x);
+        valuator_mask_set_double(pmask, 1, pointer_y);
     } else {
-        /* Setup our array of values */
-        valuators[0] = XQUARTZ_VALUATOR_LIMIT * (pointer_x / (float)screenInfo.screens[0]->width);
-        valuators[1] = XQUARTZ_VALUATOR_LIMIT * (pointer_y / (float)screenInfo.screens[0]->height);
-        valuators[2] = XQUARTZ_VALUATOR_LIMIT * pressure;
-        valuators[3] = XQUARTZ_VALUATOR_LIMIT * tilt_x;
-        valuators[4] = XQUARTZ_VALUATOR_LIMIT * tilt_y;
+        valuator_mask_set_double(pmask, 0, XQUARTZ_VALUATOR_LIMIT * (pointer_x / (double)screenInfo.screens[0]->width));
+        valuator_mask_set_double(pmask, 1, XQUARTZ_VALUATOR_LIMIT * (pointer_y / (double)screenInfo.screens[0]->height));
+        valuator_mask_set_double(pmask, 2, XQUARTZ_VALUATOR_LIMIT * pressure);
+        valuator_mask_set_double(pmask, 3, XQUARTZ_VALUATOR_LIMIT * tilt_x);
+        valuator_mask_set_double(pmask, 4, XQUARTZ_VALUATOR_LIMIT * tilt_y);
     }
-    //DEBUG_LOG("Pointer (%f, %f), Valuators: {%d,%d,%d,%d,%d}\n", pointer_x, pointer_y,
-    //          valuators[0], valuators[1], valuators[2], valuators[3], valuators[4]);
+    //DEBUG_LOG("Pointer (%lf, %lf), Valuators: {%lf,%lf,%lf,%lf,%lf}\n", pointer_x, pointer_y,
+    //          valuator_mask_get_double(pmask, 0), valuator_mask_get_double(pmask, 1),
+    //          valuator_mask_get_double(pmask, 2), valuator_mask_get_double(pmask, 3),
+    //          valuator_mask_get_double(pmask, 4));
 }
 
 void DarwinInputReleaseButtonsAndKeys(DeviceIntPtr pDev) {
@@ -456,11 +457,11 @@ void DarwinInputReleaseButtonsAndKeys(DeviceIntPtr pDev) {
     } darwinEvents_unlock();
 }
 
-void DarwinSendPointerEvents(DeviceIntPtr pDev, int ev_type, int ev_button, float pointer_x, float pointer_y, 
-			     float pressure, float tilt_x, float tilt_y) {
+void DarwinSendPointerEvents(DeviceIntPtr pDev, int ev_type, int ev_button, double pointer_x, double pointer_y, 
+			     double pressure, double tilt_x, double tilt_y) {
 	static int darwinFakeMouseButtonDown = 0;
     ScreenPtr screen;
-    int valuators[5];
+    ValuatorMask valuators;
 	
     //DEBUG_LOG("x=%f, y=%f, p=%f, tx=%f, ty=%f\n", pointer_x, pointer_y, pressure, tilt_x, tilt_y);
     
@@ -507,11 +508,9 @@ void DarwinSendPointerEvents(DeviceIntPtr pDev, int ev_type, int ev_button, floa
         darwinFakeMouseButtonDown = 0;
 	}
 
-    DarwinPrepareValuators(pDev, valuators, screen, pointer_x, pointer_y, pressure, tilt_x, tilt_y);
+    DarwinPrepareValuators(pDev, &valuators, screen, pointer_x, pointer_y, pressure, tilt_x, tilt_y);
     darwinEvents_lock(); {
-        ValuatorMask mask;
-        valuator_mask_set_range(&mask, 0, (pDev == darwinPointer) ? 2 : 5, valuators);
-        QueuePointerEvents(pDev, ev_type, ev_button, POINTER_ABSOLUTE, &mask);
+        QueuePointerEvents(pDev, ev_type, ev_button, POINTER_ABSOLUTE, &valuators);
         DarwinPokeEQ();
     } darwinEvents_unlock();
 }
@@ -529,10 +528,10 @@ void DarwinSendKeyboardEvents(int ev_type, int keycode) {
     } darwinEvents_unlock();
 }
 
-void DarwinSendProximityEvents(DeviceIntPtr pDev, int ev_type, float pointer_x, float pointer_y,  
-                               float pressure, float tilt_x, float tilt_y) {
+void DarwinSendProximityEvents(DeviceIntPtr pDev, int ev_type, double pointer_x, double pointer_y,  
+                               double pressure, double tilt_x, double tilt_y) {
     ScreenPtr screen;
-    int valuators[5];
+    ValuatorMask valuators;
 
     DEBUG_LOG("DarwinSendProximityEvents: %d l:%f,%f p:%f t:%f,%f\n", ev_type, pointer_x, pointer_y, pressure, tilt_x, tilt_y);
 
@@ -547,20 +546,18 @@ void DarwinSendProximityEvents(DeviceIntPtr pDev, int ev_type, float pointer_x,
         return;
     }    
 
-    DarwinPrepareValuators(pDev, valuators, screen, pointer_x, pointer_y, pressure, tilt_x, tilt_y);
+    DarwinPrepareValuators(pDev, &valuators, screen, pointer_x, pointer_y, pressure, tilt_x, tilt_y);
     darwinEvents_lock(); {
-        ValuatorMask mask;
-        valuator_mask_set_range(&mask, 0, 5, valuators);
-        QueueProximityEvents(pDev, ev_type, &mask);
+        QueueProximityEvents(pDev, ev_type, &valuators);
         DarwinPokeEQ();
     } darwinEvents_unlock();
 }
 
 
 /* Send the appropriate number of button clicks to emulate scroll wheel */
-void DarwinSendScrollEvents(float count_x, float count_y, 
-							float pointer_x, float pointer_y, 
-			    			float pressure, float tilt_x, float tilt_y) {
+void DarwinSendScrollEvents(double count_x, double count_y, 
+							double pointer_x, double pointer_y, 
+			    			double pressure, double tilt_x, double tilt_y) {
 	int sign_x, sign_y;
 	if(!darwinEvents) {
 		DEBUG_LOG("DarwinSendScrollEvents called before darwinEvents was initialized\n");
diff --git a/hw/xquartz/darwinEvents.h b/hw/xquartz/darwinEvents.h
index a44872b..edb3fd4 100644
--- a/hw/xquartz/darwinEvents.h
+++ b/hw/xquartz/darwinEvents.h
@@ -37,13 +37,13 @@ void DarwinEQEnqueue(const xEventPtr e);
 void DarwinEQPointerPost(DeviceIntPtr pDev, xEventPtr e);
 void DarwinEQSwitchScreen(ScreenPtr pScreen, Bool fromDIX);
 void DarwinInputReleaseButtonsAndKeys(DeviceIntPtr pDev);
-void DarwinSendPointerEvents(DeviceIntPtr pDev, int ev_type, int ev_button, float pointer_x, float pointer_y,
-			     float pressure, float tilt_x, float tilt_y);
-void DarwinSendProximityEvents(DeviceIntPtr pDev, int ev_type, float pointer_x, float pointer_y,
-                               float pressure, float tilt_x, float tilt_y);
+void DarwinSendPointerEvents(DeviceIntPtr pDev, int ev_type, int ev_button, double pointer_x, double pointer_y,
+			     double pressure, double tilt_x, double tilt_y);
+void DarwinSendProximityEvents(DeviceIntPtr pDev, int ev_type, double pointer_x, double pointer_y,
+                               double pressure, double tilt_x, double tilt_y);
 void DarwinSendKeyboardEvents(int ev_type, int keycode);
-void DarwinSendScrollEvents(float count_x, float count_y, float pointer_x, float pointer_y,
-			    float pressure, float tilt_x, float tilt_y);
+void DarwinSendScrollEvents(double count_x, double count_y, double pointer_x, double pointer_y,
+			    double pressure, double tilt_x, double tilt_y);
 void DarwinUpdateModKeys(int flags);
 void DarwinListenOnOpenFD(int fd);
 
commit 80a9a678134a60510e6fb68791c0e7e9fba55129
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date:   Sat Mar 17 00:08:19 2012 -0700

    XQuartz: Xi: darwinPointer is now Relative
    
    There is really no real reason why this should be necessary, but wine
    developers are stuborn, so doing this to try to work around this wine
    issue:
    
    http://bugs.winehq.org/show_bug.cgi?id=29732
    
    Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>

diff --git a/hw/xquartz/darwin.c b/hw/xquartz/darwin.c
index 197380a..c44b29e 100644
--- a/hw/xquartz/darwin.c
+++ b/hw/xquartz/darwin.c
@@ -323,8 +323,8 @@ static int DarwinMouseProc(DeviceIntPtr pPointer, int what) {
                                     (PtrCtrlProcPtr)NoopDDA,
                                     GetMotionHistorySize(), NAXES,
                                     axes_labels);
-            InitValuatorAxisStruct(pPointer, 0, axes_labels[0], NO_AXIS_LIMITS, NO_AXIS_LIMITS, 0, 0, 0, Absolute);
-            InitValuatorAxisStruct(pPointer, 1, axes_labels[1], NO_AXIS_LIMITS, NO_AXIS_LIMITS, 0, 0, 0, Absolute);
+            InitValuatorAxisStruct(pPointer, 0, axes_labels[0], NO_AXIS_LIMITS, NO_AXIS_LIMITS, 1, 0, 1, Relative);
+            InitValuatorAxisStruct(pPointer, 1, axes_labels[1], NO_AXIS_LIMITS, NO_AXIS_LIMITS, 1, 0, 1, Relative);
             break;
         case DEVICE_ON:
             pPointer->public.on = TRUE;


More information about the Xquartz-changes mailing list