diff --git a/src/core/window-private.h b/src/core/window-private.h index 39fd38d12..d1730c988 100644 --- a/src/core/window-private.h +++ b/src/core/window-private.h @@ -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 diff --git a/src/core/window.c b/src/core/window.c index 8c7f49b21..d99db949f 100644 --- a/src/core/window.c +++ b/src/core/window.c @@ -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) { diff --git a/src/wayland/meta-window-wayland.c b/src/wayland/meta-window-wayland.c index e2b7c01b4..31e0ef103 100644 --- a/src/wayland/meta-window-wayland.c +++ b/src/wayland/meta-window-wayland.c @@ -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 * diff --git a/src/x11/window-x11.c b/src/x11/window-x11.c index fcb0653df..00c8d3c1d 100644 --- a/src/x11/window-x11.c +++ b/src/x11/window-x11.c @@ -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;