diff --git a/src/ShellClients/NotificationsClient.vala b/src/ShellClients/NotificationsClient.vala index 795f56ecf..173d16446 100644 --- a/src/ShellClients/NotificationsClient.vala +++ b/src/ShellClients/NotificationsClient.vala @@ -20,6 +20,7 @@ public class Gala.NotificationsClient : Object { client.window_created.connect ((window) => { window.set_data (NOTIFICATION_DATA_KEY, true); window.make_above (); + window.stick (); #if HAS_MUTTER46 client.wayland_client.make_dock (window); #endif diff --git a/src/WorkspaceManager.vala b/src/WorkspaceManager.vala index ce9070787..98ba05999 100644 --- a/src/WorkspaceManager.vala +++ b/src/WorkspaceManager.vala @@ -85,7 +85,7 @@ public class Gala.WorkspaceManager : Object { return; } - workspace.window_added.connect (window_added); + workspace.window_added.connect (queue_window_added); workspace.window_removed.connect (window_removed); } @@ -124,9 +124,15 @@ public class Gala.WorkspaceManager : Object { } } - private void window_added (Meta.Workspace? workspace, Meta.Window window) { + private void queue_window_added (Meta.Workspace? workspace, Meta.Window window) { + // We get this call very early so we have to queue an idle for ShellClients + // that might not have checked the window/got a protocol call yet + Idle.add (() => window_added (workspace, window)); + } + + private bool window_added (Meta.Workspace? workspace, Meta.Window window) { if (workspace == null || !Meta.Prefs.get_dynamic_workspaces () || window.on_all_workspaces) { - return; + return Source.REMOVE; } unowned Meta.WorkspaceManager manager = workspace.get_display ().get_workspace_manager (); @@ -139,6 +145,8 @@ public class Gala.WorkspaceManager : Object { ) { append_workspace (); } + + return Source.REMOVE; } private void window_removed (Meta.Workspace? workspace, Meta.Window window) { @@ -185,7 +193,7 @@ public class Gala.WorkspaceManager : Object { private void window_entered_monitor (Meta.Display display, int monitor, Meta.Window window) { if (InternalUtils.workspaces_only_on_primary () && monitor == display.get_primary_monitor ()) { - window_added (window.get_workspace (), window); + queue_window_added (window.get_workspace (), window); } } @@ -243,7 +251,7 @@ public class Gala.WorkspaceManager : Object { return; } - workspace.window_added.disconnect (window_added); + workspace.window_added.disconnect (queue_window_added); workspace.window_removed.disconnect (window_removed); workspaces_marked_removed.add (workspace);