https://bugzilla.redhat.com/show_bug.cgi?id=867885 --- gtk/spice-widget-priv.h | 1 + gtk/spice-widget.c | 56 +++++++++++++++++++++++++++++-------------------- 2 files changed, 34 insertions(+), 23 deletions(-) diff --git a/gtk/spice-widget-priv.h b/gtk/spice-widget-priv.h index 4ee0e59..779e435 100644 --- a/gtk/spice-widget-priv.h +++ b/gtk/spice-widget-priv.h @@ -114,6 +114,7 @@ struct _SpiceDisplayPrivate { gint mark; #ifdef WIN32 HHOOK keyboard_hook; + int win_mouse[3]; #endif guint keypress_delay; gint zoom_level; diff --git a/gtk/spice-widget.c b/gtk/spice-widget.c index a2691f7..9a6bfd3 100644 --- a/gtk/spice-widget.c +++ b/gtk/spice-widget.c @@ -689,6 +689,36 @@ static void update_keyboard_grab(SpiceDisplay *display) try_keyboard_ungrab(display); } +static void set_mouse_accel(SpiceDisplay *display, gboolean enabled) +{ + SpiceDisplayPrivate *d = SPICE_DISPLAY_GET_PRIVATE(display); + +#if defined GDK_WINDOWING_X11 + GdkWindow *w = GDK_WINDOW(gtk_widget_get_window(GTK_WIDGET(display))); + Display *x_display = GDK_WINDOW_XDISPLAY(w); + + if (enabled) { + /* restore mouse acceleration */ + XChangePointerControl(x_display, True, True, + d->x11_accel_numerator, d->x11_accel_denominator, d->x11_threshold); + } else { + XGetPointerControl(x_display, + &d->x11_accel_numerator, &d->x11_accel_denominator, &d->x11_threshold); + /* set mouse acceleration to default */ + XChangePointerControl(x_display, True, True, -1, -1, -1); + SPICE_DEBUG("disabled X11 mouse motion %d %d %d", + d->x11_accel_numerator, d->x11_accel_denominator, d->x11_threshold); + } +#elif defined GDK_WINDOWING_WIN32 + if (enabled) + SystemParametersInfo(SPI_SETMOUSE, 0, &d->win_mouse, 0); + else + SystemParametersInfo(SPI_GETMOUSE, 0, &d->win_mouse, 0); +#else + g_warning("Mouse acceleration code missing for your platform"); +#endif +} + static GdkGrabStatus do_pointer_grab(SpiceDisplay *display) { SpiceDisplayPrivate *d = SPICE_DISPLAY_GET_PRIVATE(display); @@ -738,19 +768,8 @@ static GdkGrabStatus do_pointer_grab(SpiceDisplay *display) } #endif -#ifdef GDK_WINDOWING_X11 - if (status == GDK_GRAB_SUCCESS) { - GdkWindow *w = GDK_WINDOW(gtk_widget_get_window(GTK_WIDGET(display))); - Display *x_display = GDK_WINDOW_XDISPLAY(w); - - XGetPointerControl(x_display, - &d->x11_accel_numerator, &d->x11_accel_denominator, &d->x11_threshold); - /* set mouse acceleration to default */ - XChangePointerControl(x_display, True, True, -1, -1, -1); - SPICE_DEBUG("updated mouse motion %d %d %d", - d->x11_accel_numerator, d->x11_accel_denominator, d->x11_threshold); - } -#endif + if (status == GDK_GRAB_SUCCESS) + set_mouse_accel(display, FALSE); gdk_cursor_unref(blank); return status; @@ -838,16 +857,7 @@ static void try_mouse_ungrab(SpiceDisplay *display) #ifdef WIN32 ClipCursor(NULL); #endif -#ifdef GDK_WINDOWING_X11 - { - GdkWindow *w = GDK_WINDOW(gtk_widget_get_window(GTK_WIDGET(display))); - Display *x_display = GDK_WINDOW_XDISPLAY(w); - - /* restore mouse acceleration */ - XChangePointerControl(x_display, True, True, - d->x11_accel_numerator, d->x11_accel_denominator, d->x11_threshold); - } -#endif + set_mouse_accel(display, TRUE); d->mouse_grab_active = false; -- 1.7.11.7 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel