[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH ui/gtk 04/13] Conditionalize use of gdk_pointer_grab
From: |
Daniel P. Berrange |
Subject: |
[Qemu-devel] [PATCH ui/gtk 04/13] Conditionalize use of gdk_pointer_grab / gdk_pointer_ungrab |
Date: |
Mon, 25 Feb 2013 15:20:37 +0000 |
From: "Daniel P. Berrange" <address@hidden>
On GTK3 there is support for multiple pointer devices, so
rather than using gdk_pointer_grab / gdk_pointer_ungrab
we should iterate over all devices, grabbing each one in
turn
Signed-off-by: Daniel P. Berrange <address@hidden>
---
ui/gtk.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----------
1 file changed, 65 insertions(+), 11 deletions(-)
diff --git a/ui/gtk.c b/ui/gtk.c
index 3826bea..19d554d 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -807,25 +807,79 @@ static void gd_ungrab_keyboard(GtkDisplayState *s)
#endif
}
+static void gd_grab_pointer(GtkDisplayState *s)
+{
+#if GTK_CHECK_VERSION(3, 0, 0)
+ GdkDisplay *display = gtk_widget_get_display(s->drawing_area);
+ GdkDeviceManager *mgr = gdk_display_get_device_manager(display);
+ GList *devices = gdk_device_manager_list_devices(mgr,
+ GDK_DEVICE_TYPE_MASTER);
+ GList *tmp = devices;
+ while (tmp) {
+ GdkDevice *dev = tmp->data;
+ if (gdk_device_get_source(dev) == GDK_SOURCE_MOUSE) {
+ gdk_device_grab(dev,
+ gtk_widget_get_window(s->drawing_area),
+ GDK_OWNERSHIP_NONE,
+ FALSE, /* All events to come to our
+ window directly */
+ GDK_POINTER_MOTION_MASK |
+ GDK_BUTTON_PRESS_MASK |
+ GDK_BUTTON_RELEASE_MASK |
+ GDK_BUTTON_MOTION_MASK |
+ GDK_SCROLL_MASK,
+ s->null_cursor,
+ GDK_CURRENT_TIME);
+ }
+ tmp = tmp->next;
+ }
+ g_list_free(devices);
+#else
+ gdk_pointer_grab(gtk_widget_get_window(s->drawing_area),
+ FALSE, /* All events to come to our window directly */
+ GDK_POINTER_MOTION_MASK |
+ GDK_BUTTON_PRESS_MASK |
+ GDK_BUTTON_RELEASE_MASK |
+ GDK_BUTTON_MOTION_MASK |
+ GDK_SCROLL_MASK,
+ NULL, /* Allow cursor to move over entire desktop */
+ s->null_cursor,
+ GDK_CURRENT_TIME);
+#endif
+}
+
+static void gd_ungrab_pointer(GtkDisplayState *s)
+{
+#if GTK_CHECK_VERSION(3, 0, 0)
+ GdkDisplay *display = gtk_widget_get_display(s->drawing_area);
+ GdkDeviceManager *mgr = gdk_display_get_device_manager(display);
+ GList *devices = gdk_device_manager_list_devices(mgr,
+ GDK_DEVICE_TYPE_MASTER);
+ GList *tmp = devices;
+ while (tmp) {
+ GdkDevice *dev = tmp->data;
+ if (gdk_device_get_source(dev) == GDK_SOURCE_MOUSE) {
+ gdk_device_ungrab(dev,
+ GDK_CURRENT_TIME);
+ }
+ tmp = tmp->next;
+ }
+ g_list_free(devices);
+#else
+ gdk_pointer_ungrab(GDK_CURRENT_TIME);
+#endif
+}
+
static void gd_menu_grab_input(GtkMenuItem *item, void *opaque)
{
GtkDisplayState *s = opaque;
if (gd_is_grab_active(s)) {
gd_grab_keyboard(s);
- gdk_pointer_grab(gtk_widget_get_window(GTK_WIDGET(s->drawing_area)),
- FALSE, /* All events to come to our window directly */
- GDK_POINTER_MOTION_MASK |
- GDK_BUTTON_PRESS_MASK |
- GDK_BUTTON_RELEASE_MASK |
- GDK_BUTTON_MOTION_MASK |
- GDK_SCROLL_MASK,
- NULL, /* Allow cursor to move over entire desktop */
- s->null_cursor,
- GDK_CURRENT_TIME);
+ gd_grab_pointer(s);
} else {
gd_ungrab_keyboard(s);
- gdk_pointer_ungrab(GDK_CURRENT_TIME);
+ gd_ungrab_pointer(s);
}
gd_update_caption(s);
--
1.8.1.2
- [Qemu-devel] [PATCH ui/gtk 00/13] Add support for GTK3 & fix GTK 2.18, Daniel P. Berrange, 2013/02/25
- [Qemu-devel] [PATCH ui/gtk 02/13] Remove use of gdk_drawable_get_{screen, display}, Daniel P. Berrange, 2013/02/25
- [Qemu-devel] [PATCH ui/gtk 05/13] Remove use of GtkVBox in GTK3, Daniel P. Berrange, 2013/02/25
- [Qemu-devel] [PATCH ui/gtk 01/13] Add compat for gdk_drawable_get_size on GTK3, Daniel P. Berrange, 2013/02/25
- [Qemu-devel] [PATCH ui/gtk 04/13] Conditionalize use of gdk_pointer_grab / gdk_pointer_ungrab,
Daniel P. Berrange <=
- [Qemu-devel] [PATCH ui/gtk 03/13] Conditionalize use of gdk_keyboard_grab / gdk_keyboard_ungrab, Daniel P. Berrange, 2013/02/25
- [Qemu-devel] [PATCH ui/gtk 08/13] Conditionalize use of gtk_widget_size_request, Daniel P. Berrange, 2013/02/25
- [Qemu-devel] [PATCH ui/gtk 07/13] Conditionalize use of gdk_display_warp_pointer, Daniel P. Berrange, 2013/02/25
- [Qemu-devel] [PATCH ui/gtk 13/13] Add compat for GDK_KEY_XXX symbols, Daniel P. Berrange, 2013/02/25
- [Qemu-devel] [PATCH ui/gtk 09/13] Replace expose-event handler with draw handler in GTK3, Daniel P. Berrange, 2013/02/25
- [Qemu-devel] [PATCH ui/gtk 11/13] Add support for enabling build with GTK3, Daniel P. Berrange, 2013/02/25
- [Qemu-devel] [PATCH ui/gtk 10/13] Ensure x_keymap.o is built when GTK is enabled, Daniel P. Berrange, 2013/02/25
- [Qemu-devel] [PATCH ui/gtk 06/13] Replace gtk_menu_append with gtk_menu_shell_append, Daniel P. Berrange, 2013/02/25
- [Qemu-devel] [PATCH ui/gtk 12/13] Add compat macro for gtk_widget_get_realized, Daniel P. Berrange, 2013/02/25