[Spice-devel] [PATCH spice-gtk v5 2/6] gtk: Use gdk_window_get_device_position
Pavel Grunt
pgrunt at redhat.com
Fri Feb 17 10:24:51 UTC 2017
gdk_window_get_pointer has been deprecated since Gtk 3.0
Introduce helper functions for getting the display's pointing
device and modifiers to keep the update_mouse_mode simple
Acked-by: Christophe Fergeau <cfergeau at redhat.com>
---
src/spice-widget.c | 42 ++++++++++++++++++++++++++++++++----------
1 file changed, 32 insertions(+), 10 deletions(-)
diff --git a/src/spice-widget.c b/src/spice-widget.c
index ea7b135..49a6c98 100644
--- a/src/spice-widget.c
+++ b/src/spice-widget.c
@@ -2361,11 +2361,40 @@ static void spice_display_class_init(SpiceDisplayClass *klass)
#define SPICE_GDK_BUTTONS_MASK \
(GDK_BUTTON1_MASK|GDK_BUTTON2_MASK|GDK_BUTTON3_MASK|GDK_BUTTON4_MASK|GDK_BUTTON5_MASK)
+static GdkDevice *spice_gdk_window_get_pointing_device(GdkWindow *window)
+{
+ GdkDisplay *gdk_display = gdk_window_get_display(window);
+ G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+#if GTK_CHECK_VERSION(3, 20, 0)
+ return gdk_seat_get_pointer(gdk_display_get_default_seat(gdk_display));
+#else
+ return gdk_device_manager_get_client_pointer(gdk_display_get_device_manager(gdk_display));
+#endif
+ G_GNUC_END_IGNORE_DEPRECATIONS
+}
+
+static GdkModifierType spice_display_get_modifiers_state(SpiceDisplay *display)
+{
+ GdkModifierType modifiers;
+ GdkWindow *window = gtk_widget_get_window(GTK_WIDGET(display));
+
+ if (window == NULL) {
+ return 0;
+ }
+
+ gdk_window_get_device_position(window,
+ spice_gdk_window_get_pointing_device(window),
+ NULL,
+ NULL,
+ &modifiers);
+
+ return modifiers;
+}
+
static void update_mouse_mode(SpiceChannel *channel, gpointer data)
{
SpiceDisplay *display = data;
SpiceDisplayPrivate *d = display->priv;
- GdkWindow *window = gtk_widget_get_window(GTK_WIDGET(display));
g_object_get(channel, "mouse-mode", &d->mouse_mode, NULL);
SPICE_DEBUG("mouse mode %u", d->mouse_mode);
@@ -2378,15 +2407,8 @@ static void update_mouse_mode(SpiceChannel *channel, gpointer data)
d->mouse_guest_x = -1;
d->mouse_guest_y = -1;
- if (window != NULL) {
- GdkModifierType modifiers;
- /* FIXME: gdk_window_get_pointer() is deprecated */
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS
- gdk_window_get_pointer(window, NULL, NULL, &modifiers);
- G_GNUC_END_IGNORE_DEPRECATIONS
-
- if (modifiers & SPICE_GDK_BUTTONS_MASK)
- try_mouse_grab(display);
+ if (spice_display_get_modifiers_state(display) & SPICE_GDK_BUTTONS_MASK) {
+ try_mouse_grab(display);
}
break;
default:
--
2.11.1
More information about the Spice-devel
mailing list