mirror of
https://github.com/brl/mutter.git
synced 2024-11-25 17:40:40 -05:00
window: Add "is_focus_async" API
X11 clients can use different models of input handling, of which some may not result focus being set synchronously. For such clients, meta_focus_window() will not change the focus itself but rely on the client itself to set the input focus on the desired window. Add a new MetaWindow API to check when dealing with such a window. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1716>
This commit is contained in:
parent
9de36fed4d
commit
6438919a89
@ -613,6 +613,7 @@ struct _MetaWindowClass
|
||||
gboolean (*is_stackable) (MetaWindow *window);
|
||||
gboolean (*can_ping) (MetaWindow *window);
|
||||
gboolean (*are_updates_frozen) (MetaWindow *window);
|
||||
gboolean (*is_focus_async) (MetaWindow *window);
|
||||
|
||||
MetaStackLayer (*calculate_layer) (MetaWindow *window);
|
||||
|
||||
@ -883,4 +884,5 @@ void meta_window_force_restore_shortcuts (MetaWindow *window,
|
||||
gboolean meta_window_shortcuts_inhibited (MetaWindow *window,
|
||||
ClutterInputDevice *source);
|
||||
gboolean meta_window_is_stackable (MetaWindow *window);
|
||||
gboolean meta_window_is_focus_async (MetaWindow *window);
|
||||
#endif
|
||||
|
@ -8631,6 +8631,12 @@ meta_window_is_stackable (MetaWindow *window)
|
||||
return META_WINDOW_GET_CLASS (window)->is_stackable (window);
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_window_is_focus_async (MetaWindow *window)
|
||||
{
|
||||
return META_WINDOW_GET_CLASS (window)->is_focus_async (window);
|
||||
}
|
||||
|
||||
MetaStackLayer
|
||||
meta_window_calculate_layer (MetaWindow *window)
|
||||
{
|
||||
|
@ -708,6 +708,12 @@ meta_window_wayland_are_updates_frozen (MetaWindow *window)
|
||||
return !wl_window->has_been_shown;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_window_wayland_is_focus_async (MetaWindow *window)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static MetaStackLayer
|
||||
meta_window_wayland_calculate_layer (MetaWindow *window)
|
||||
{
|
||||
@ -764,6 +770,7 @@ meta_window_wayland_class_init (MetaWindowWaylandClass *klass)
|
||||
window_class->calculate_layer = meta_window_wayland_calculate_layer;
|
||||
window_class->map = meta_window_wayland_map;
|
||||
window_class->unmap = meta_window_wayland_unmap;
|
||||
window_class->is_focus_async = meta_window_wayland_is_focus_async;
|
||||
}
|
||||
|
||||
MetaWindow *
|
||||
|
@ -2059,6 +2059,16 @@ meta_window_x11_impl_always_update_shape (MetaWindow *window)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_window_x11_is_focus_async (MetaWindow *window)
|
||||
{
|
||||
MetaWindowX11 *window_x11 = META_WINDOW_X11 (window);
|
||||
MetaWindowX11Private *priv =
|
||||
meta_window_x11_get_instance_private (window_x11);
|
||||
|
||||
return !window->input && priv->wm_take_focus;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_window_x11_class_init (MetaWindowX11Class *klass)
|
||||
{
|
||||
@ -2089,6 +2099,7 @@ meta_window_x11_class_init (MetaWindowX11Class *klass)
|
||||
window_class->calculate_layer = meta_window_x11_calculate_layer;
|
||||
window_class->map = meta_window_x11_map;
|
||||
window_class->unmap = meta_window_x11_unmap;
|
||||
window_class->is_focus_async = meta_window_x11_is_focus_async;
|
||||
|
||||
klass->freeze_commits = meta_window_x11_impl_freeze_commits;
|
||||
klass->thaw_commits = meta_window_x11_impl_thaw_commits;
|
||||
|
Loading…
Reference in New Issue
Block a user