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:
@ -7701,8 +7701,16 @@ mouse_mode_focus (MetaWindow *window,
|
||||
static gboolean
|
||||
window_has_pointer (MetaWindow *window)
|
||||
{
|
||||
ClutterActor *actor = CLUTTER_ACTOR (meta_window_get_compositor_private (window));
|
||||
return clutter_actor_has_pointer (actor);
|
||||
ClutterDeviceManager *dm;
|
||||
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
|
||||
|
Reference in New Issue
Block a user