[Spice-devel] [PATCH spice-gtk] Disable mouse accelleration when grabbing the mouse (in server mode)

Hans de Goede hdegoede at redhat.com
Wed Dec 14 05:17:15 PST 2011


Otherwise accel will be applied twice, once by the client and then once
more by the guest. Unfortunately there seems to be no gdk / gtk API for this
so this patch uses direct libX11 calls.

Signed-off-by: Hans de Goede <hdegoede at redhat.com>
---
 gtk/spice-widget.c |   33 +++++++++++++++++++++++++++++++++
 1 files changed, 33 insertions(+), 0 deletions(-)

diff --git a/gtk/spice-widget.c b/gtk/spice-widget.c
index d2d09af..5ed2e10 100644
--- a/gtk/spice-widget.c
+++ b/gtk/spice-widget.c
@@ -25,6 +25,10 @@
 #include <X11/XKBlib.h>
 #include <gdk/gdkx.h>
 #endif
+#ifdef GDK_WINDOWING_X11
+#include <X11/Xlib.h>
+#include <gdk/gdkx.h>
+#endif
 #ifdef WIN32
 #include <windows.h>
 #include <gdk/gdkwin32.h>
@@ -568,6 +572,21 @@ static GdkGrabStatus do_pointer_grab(SpiceDisplay *display)
 #endif
     gtk_grab_add(GTK_WIDGET(display));
 
+#ifdef GDK_WINDOWING_X11
+    if (status == GDK_GRAB_SUCCESS) {
+        int accel_numerator;
+        int accel_denominator;
+        int threshold;
+        GdkWindow *w = GDK_WINDOW(gtk_widget_get_window(GTK_WIDGET(display)));
+        Display *x_display = GDK_WINDOW_XDISPLAY(w);
+    
+        XGetPointerControl(x_display, &accel_numerator, &accel_denominator,
+                           &threshold);
+        XChangePointerControl(x_display, False, False, accel_numerator,
+                              accel_denominator, threshold);
+    }
+#endif
+
     gdk_cursor_unref(blank);
     return status;
 }
@@ -670,6 +689,20 @@ static void try_mouse_ungrab(SpiceDisplay *display)
 #ifdef WIN32
     ClipCursor(NULL);
 #endif
+#ifdef GDK_WINDOWING_X11
+    {
+        int accel_numerator;
+        int accel_denominator;
+        int threshold;
+        GdkWindow *w = GDK_WINDOW(gtk_widget_get_window(GTK_WIDGET(display)));
+        Display *x_display = GDK_WINDOW_XDISPLAY(w);
+    
+        XGetPointerControl(x_display, &accel_numerator, &accel_denominator,
+                           &threshold);
+        XChangePointerControl(x_display, True, True, accel_numerator,
+                              accel_denominator, threshold);
+    }
+#endif
 
     d->mouse_grab_active = false;
 
-- 
1.7.7.4



More information about the Spice-devel mailing list