diff --git a/src/AppSystem/App.vala b/src/AppSystem/App.vala index 5ebadc82..a081ddd0 100644 --- a/src/AppSystem/App.vala +++ b/src/AppSystem/App.vala @@ -103,7 +103,6 @@ public class Dock.App : Object { notify["pinned"].connect (() => { check_remove (); - ItemManager.get_default ().sync_pinned (); }); WindowSystem.get_default ().notify["active-workspace"].connect (() => { diff --git a/src/BaseItem.vala b/src/BaseItem.vala index c676093f..a05fd1c3 100644 --- a/src/BaseItem.vala +++ b/src/BaseItem.vala @@ -133,7 +133,7 @@ public class Dock.BaseItem : Gtk.Box { reveal.done.connect (set_revealed_finish); var animation_target = new Adw.CallbackAnimationTarget ((val) => { - ItemManager.get_default ().move (this, val, 0); + ((ItemManager) get_ancestor (typeof (ItemManager))).move (this, val, 0); current_pos = val; }); @@ -284,7 +284,7 @@ public class Dock.BaseItem : Gtk.Box { * @param y pointer y position */ public void calculate_dnd_move (BaseItem source, double x, double y) { - var launcher_manager = ItemManager.get_default (); + var launcher_manager = (ItemManager) get_ancestor (typeof (ItemManager)); int target_index = launcher_manager.get_index_for_launcher (this); int source_index = launcher_manager.get_index_for_launcher (source); diff --git a/src/DBus/ShellKeyGrabber.vala b/src/DBus/ShellKeyGrabber.vala index 7c2ebc22..8af33a80 100644 --- a/src/DBus/ShellKeyGrabber.vala +++ b/src/DBus/ShellKeyGrabber.vala @@ -59,6 +59,8 @@ public interface ShellKeyGrabber : GLib.Object { private static HashTable saved_action_ids; + private static Dock.ItemManager item_manager; + public static void init () { settings = new Settings ("io.elementary.dock.keybindings"); saved_action_ids = new HashTable (null, null); @@ -71,6 +73,10 @@ public interface ShellKeyGrabber : GLib.Object { Bus.watch_name (BusType.SESSION, "org.gnome.Shell", BusNameWatcherFlags.NONE, () => on_watch.begin (), () => instance = null); } + public static void set_item_manager (Dock.ItemManager manager) { + item_manager = manager; + } + private static async void on_watch () { try { instance = yield Bus.get_proxy (SESSION, "org.gnome.Shell", "/org/gnome/Shell"); @@ -109,7 +115,7 @@ public interface ShellKeyGrabber : GLib.Object { return; } - Dock.ItemManager.get_default ().launch (saved_action_ids[action]); + item_manager.launch (saved_action_ids[action]); } private static void ungrab_keybindings () requires (instance != null) { diff --git a/src/ItemManager.vala b/src/ItemManager.vala index ee5a25a6..d9e508c5 100644 --- a/src/ItemManager.vala +++ b/src/ItemManager.vala @@ -6,11 +6,6 @@ public class Dock.ItemManager : Gtk.Fixed { private static Settings settings; - private static GLib.Once instance; - public static unowned ItemManager get_default () { - return instance.once (() => { return new ItemManager (); }); - } - public Launcher? added_launcher { get; set; default = null; } private Adw.TimedAnimation resize_animation; @@ -227,6 +222,7 @@ if (item is Launcher) { launchers.add ((Launcher) item); sync_pinned (); + item.notify["pinned"].connect (sync_pinned); } else if (item is WorkspaceIconGroup) { icon_groups.add ((WorkspaceIconGroup) item); } diff --git a/src/MainWindow.vala b/src/MainWindow.vala index 2d05ae08..5750ed9f 100644 --- a/src/MainWindow.vala +++ b/src/MainWindow.vala @@ -20,6 +20,8 @@ public class Dock.MainWindow : Gtk.ApplicationWindow { private Settings transparency_settings; private static Settings settings = new Settings ("io.elementary.dock"); + private ItemManager item_manager; + private Pantheon.Desktop.Shell? desktop_shell; private Pantheon.Desktop.Panel? panel; @@ -40,27 +42,26 @@ public class Dock.MainWindow : Gtk.ApplicationWindow { dock_box.append (new Container ()); dock_box.append (new BottomMargin ()); - unowned var launcher_manager = ItemManager.get_default (); + item_manager = new ItemManager (); // Don't clip launchers to dock background https://github.com/elementary/dock/issues/275 var overlay = new Gtk.Overlay () { child = dock_box }; - overlay.add_overlay (launcher_manager); + overlay.add_overlay (item_manager); var size_group = new Gtk.SizeGroup (Gtk.SizeGroupMode.BOTH); size_group.add_widget (dock_box); - size_group.add_widget (launcher_manager); - + size_group.add_widget (item_manager); child = overlay; remove_css_class ("background"); // Fixes DnD reordering of launchers failing on a very small line between two launchers var drop_target_launcher = new Gtk.DropTarget (typeof (Launcher), MOVE); - launcher_manager.add_controller (drop_target_launcher); + item_manager.add_controller (drop_target_launcher); - launcher_manager.realize.connect (init_panel); + item_manager.realize.connect (init_panel); settings.changed["autohide-mode"].connect (() => { if (panel != null) { @@ -78,6 +79,8 @@ public class Dock.MainWindow : Gtk.ApplicationWindow { } window_drag_manager = new WindowDragManager (this); + + ShellKeyGrabber.set_item_manager (item_manager); } private void update_transparency () { @@ -112,7 +115,7 @@ public class Dock.MainWindow : Gtk.ApplicationWindow { surface.compute_size.connect ((surface, size) => { // manually set shadow width since the additional margin we add to avoid icons clipping when // bouncing isn't added by default and instead counts to the frame - var item_manager_width = ItemManager.get_default ().get_width (); + var item_manager_width = item_manager.get_width (); var shadow_size = (surface.width - item_manager_width) / 2; var top_margin = TOP_MARGIN + shadow_size - 1; size.set_shadow_width (shadow_size, shadow_size, top_margin, shadow_size); @@ -121,7 +124,7 @@ public class Dock.MainWindow : Gtk.ApplicationWindow { surface.layout.connect ((surface, width, height) => { // manually set input region since container's shadow are is the content of the window // and it still gets window events - var item_manager_width = ItemManager.get_default ().get_width (); + var item_manager_width = item_manager.get_width (); var shadow_size = (width - item_manager_width) / 2; var top_margin = TOP_MARGIN + shadow_size; surface.set_input_region (new Cairo.Region.rectangle ({ diff --git a/src/WorkspaceSystem/IconGroup.vala b/src/WorkspaceSystem/IconGroup.vala index 53605988..ee0b239a 100644 --- a/src/WorkspaceSystem/IconGroup.vala +++ b/src/WorkspaceSystem/IconGroup.vala @@ -48,7 +48,8 @@ public class Dock.WorkspaceIconGroup : BaseIconGroup, WorkspaceItem { private void on_moving_changed () { if (!moving) { - workspace.reorder (ItemManager.get_default ().get_index_for_launcher (this)); + var item_manager = (ItemManager) get_ancestor (typeof (ItemManager)); + workspace.reorder (item_manager.get_index_for_launcher (this)); } }