diff --git a/src/core/window.c b/src/core/window.c index b832da472..d3165d994 100644 --- a/src/core/window.c +++ b/src/core/window.c @@ -4892,14 +4892,6 @@ meta_window_appears_focused_changed (MetaWindow *window) if (window->frame) meta_frame_queue_draw (window->frame); - - if (window->surface) - { - if (meta_window_appears_focused (window)) - meta_wayland_surface_activated (window->surface); - else - meta_wayland_surface_deactivated (window->surface); - } } /** diff --git a/src/wayland/window-wayland.c b/src/wayland/window-wayland.c index 0e4f43e4b..4e805fd08 100644 --- a/src/wayland/window-wayland.c +++ b/src/wayland/window-wayland.c @@ -186,8 +186,30 @@ meta_window_wayland_move_resize_internal (MetaWindow *window, } static void -meta_window_wayland_init (MetaWindowWayland *window_wayland) +appears_focused_changed (GObject *object, + GParamSpec *pspec, + gpointer user_data) { + MetaWindow *window = META_WINDOW (object); + + /* When we're unmanaging, we remove focus from the window, + * causing this to fire. Don't do anything in that case. */ + if (window->unmanaging) + return; + + if (meta_window_appears_focused (window)) + meta_wayland_surface_activated (window->surface); + else + meta_wayland_surface_deactivated (window->surface); +} + +static void +meta_window_wayland_init (MetaWindowWayland *wl_window) +{ + MetaWindow *window = META_WINDOW (wl_window); + + g_signal_connect (window, "notify::appears-focused", + G_CALLBACK (appears_focused_changed), NULL); } static void