[mutter] window: Fix delayed mouse mode on X
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] window: Fix delayed mouse mode on X
- Date: Wed, 21 May 2014 20:57:46 +0000 (UTC)
commit f38c1f6ab4a45d409077962b0324cade8582f0ce
Author: Florian Müllner <fmuellner gnome org>
Date: Wed May 7 23:22:41 2014 +0200
window: Fix delayed mouse mode on X
On X, basing the check whether the pointer is on the window on
Clutter events does not work, as the relevant events are handled
by GDK instead.
So add an X-specific window_has_pointer() implementation to also
fix mouse mode when running as X compositor.
https://bugzilla.gnome.org/show_bug.cgi?id=730541
src/core/window.c | 35 ++++++++++++++++++++++++++++++++++-
1 files changed, 34 insertions(+), 1 deletions(-)
---
diff --git a/src/core/window.c b/src/core/window.c
index 9bbfbce..53880e4 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -7699,7 +7699,7 @@ mouse_mode_focus (MetaWindow *window,
}
static gboolean
-window_has_pointer (MetaWindow *window)
+window_has_pointer_wayland (MetaWindow *window)
{
ClutterDeviceManager *dm;
ClutterInputDevice *dev;
@@ -7714,6 +7714,39 @@ window_has_pointer (MetaWindow *window)
}
static gboolean
+window_has_pointer_x11 (MetaWindow *window)
+{
+ MetaDisplay *display = window->display;
+ MetaScreen *screen = window->screen;
+ Window root, child;
+ double root_x, root_y, x, y;
+ XIButtonState buttons;
+ XIModifierState mods;
+ XIGroupState group;
+
+ meta_error_trap_push (display);
+ XIQueryPointer (display->xdisplay,
+ META_VIRTUAL_CORE_POINTER_ID,
+ screen->xroot,
+ &root, &child,
+ &root_x, &root_y, &x, &y,
+ &buttons, &mods, &group);
+ meta_error_trap_pop (display);
+ free (buttons.mask);
+
+ return meta_display_lookup_x_window (display, child) == window;
+}
+
+static gboolean
+window_has_pointer (MetaWindow *window)
+{
+ if (meta_is_wayland_compositor ())
+ return window_has_pointer_wayland (window);
+ else
+ return window_has_pointer_x11 (window);
+}
+
+static gboolean
window_focus_on_pointer_rest_callback (gpointer data)
{
MetaFocusData *focus_data = data;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]