mirror of
https://github.com/brl/mutter.git
synced 2024-11-25 17:40:40 -05:00
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:
parent
f1a7231ac2
commit
f159611fab
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user