[gtk+/xi2: 1169/1239] GdkWindow: release all grabs on window if it's hidden.
- From: Carlos Garnacho <carlosg src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gtk+/xi2: 1169/1239] GdkWindow: release all grabs on window if it's hidden.
- Date: Tue, 29 Sep 2009 10:57:14 +0000 (UTC)
commit 45a58a294e5e62f3a83214d4d248c93870d0dfdc
Author: Carlos Garnacho <carlos gnome org>
Date: Wed Sep 16 13:47:48 2009 +0200
GdkWindow: release all grabs on window if it's hidden.
gdk/gdkwindow.c | 33 +++++++++++++++++++--------------
gdk/x11/gdkdisplay-x11.c | 1 -
2 files changed, 19 insertions(+), 15 deletions(-)
---
diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
index 5434e71..142ac61 100644
--- a/gdk/gdkwindow.c
+++ b/gdk/gdkwindow.c
@@ -6448,26 +6448,31 @@ gdk_window_hide (GdkWindow *window)
else if (was_mapped)
{
GdkDisplay *display;
+ GdkDeviceManager *device_manager;
+ GList *devices, *d;
/* May need to break grabs on children */
display = gdk_drawable_get_display (window);
+ device_manager = gdk_device_manager_get_for_display (display);
- /* FIXME: which device(s)? */
- if (_gdk_display_end_device_grab (display,
- display->core_pointer,
- _gdk_windowing_window_get_next_serial (display),
- window,
- TRUE))
- gdk_display_pointer_ungrab (display, GDK_CURRENT_TIME);
+ /* Get all devices */
+ devices = gdk_device_manager_get_devices (device_manager, GDK_DEVICE_TYPE_MASTER);
+ devices = g_list_concat (devices, gdk_device_manager_get_devices (device_manager, GDK_DEVICE_TYPE_SLAVE));
+ devices = g_list_concat (devices, gdk_device_manager_get_devices (device_manager, GDK_DEVICE_TYPE_FLOATING));
- if (_gdk_display_end_device_grab (display,
- gdk_device_get_relative (display->core_pointer),
- _gdk_windowing_window_get_next_serial (display),
- window,
- TRUE))
- gdk_display_keyboard_ungrab (display, GDK_CURRENT_TIME);
+ for (d = devices; d; d = d->next)
+ {
+ GdkDevice *device = d->data;
+
+ if (_gdk_display_end_device_grab (display, device,
+ _gdk_windowing_window_get_next_serial (display),
+ window,
+ TRUE))
+ gdk_display_device_ungrab (display, device, GDK_CURRENT_TIME);
+ }
private->state = GDK_WINDOW_STATE_WITHDRAWN;
+ g_list_free (devices);
}
did_hide = _gdk_window_update_viewable (window);
diff --git a/gdk/x11/gdkdisplay-x11.c b/gdk/x11/gdkdisplay-x11.c
index 9783c5c..eca82f2 100644
--- a/gdk/x11/gdkdisplay-x11.c
+++ b/gdk/x11/gdkdisplay-x11.c
@@ -400,7 +400,6 @@ gdk_display_x11_translate_event (GdkEventTranslator *translator,
}
}
- /* FIXME: if window is NULL, xwindow should still have something meaningful here? */
if (xwindow != None &&
screen_x11 && screen_x11->wmspec_check_window != None &&
xwindow == screen_x11->wmspec_check_window)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]