window: Fix delayed mouse mode

Using clutter_actor_has_pointer() to test whether the pointer is
on the window makes for clean and nice-looking code, but does not
work in practice - ClutterActor:has-pointer is not recursive, so
we miss when the pointer is on the associated surface actor rather
than the actor itself.
Instead, check whether the window actor contains the core pointer's
pointer actor, which actually works.

https://bugzilla.gnome.org/show_bug.cgi?id=730541
This commit is contained in:
Florian Müllner 2014-05-21 19:50:26 +02:00
parent f1a7231ac2
commit f159611fab

View File

@ -7701,8 +7701,16 @@ mouse_mode_focus (MetaWindow *window,
static gboolean static gboolean
window_has_pointer (MetaWindow *window) window_has_pointer (MetaWindow *window)
{ {
ClutterActor *actor = CLUTTER_ACTOR (meta_window_get_compositor_private (window)); ClutterDeviceManager *dm;
return clutter_actor_has_pointer (actor); ClutterInputDevice *dev;
ClutterActor *pointer_actor, *window_actor;
dm = clutter_device_manager_get_default ();
dev = clutter_device_manager_get_core_device (dm, CLUTTER_POINTER_DEVICE);
pointer_actor = clutter_input_device_get_pointer_actor (dev);
window_actor = CLUTTER_ACTOR (meta_window_get_compositor_private (window));
return pointer_actor && clutter_actor_contains (window_actor, pointer_actor);
} }
static gboolean static gboolean