diff --git a/src/BaseItem.vala b/src/BaseItem.vala index 6bf3dcd4..d27f212d 100644 --- a/src/BaseItem.vala +++ b/src/BaseItem.vala @@ -312,7 +312,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)); launcher_manager.move_launcher_after (source, (int) index); } diff --git a/src/DBus/ShellKeyGrabber.vala b/src/DBus/ShellKeyGrabber.vala index 7c2ebc22..8c3fff46 100644 --- a/src/DBus/ShellKeyGrabber.vala +++ b/src/DBus/ShellKeyGrabber.vala @@ -109,7 +109,16 @@ public interface ShellKeyGrabber : GLib.Object { return; } - Dock.ItemManager.get_default ().launch (saved_action_ids[action]); + var index = saved_action_ids[action] - 1; + var apps = Dock.AppSystem.get_default ().apps; + + if (index < 0 || index >= apps.get_n_items ()) { + return; + } + + var context = Gdk.Display.get_default ().get_app_launch_context (); + var app = (Dock.App) apps.get_item (index); + app.launch (context); } private static void ungrab_keybindings () requires (instance != null) { diff --git a/src/ItemManager.vala b/src/ItemManager.vala index cfae0936..56408603 100644 --- a/src/ItemManager.vala +++ b/src/ItemManager.vala @@ -6,11 +6,6 @@ public class Dock.ItemManager : Gtk.Box { 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 DynamicWorkspaceIcon dynamic_workspace_item; @@ -163,14 +158,4 @@ warning ("Tried to move neither launcher nor icon group"); } } - - public void launch (uint index) { - if (index < 1 || index > AppSystem.get_default ().apps.get_n_items ()) { - return; - } - - var context = Gdk.Display.get_default ().get_app_launch_context (); - var app = (App) AppSystem.get_default ().apps.get_item (index - 1); - app.launch (context); - } } diff --git a/src/MainWindow.vala b/src/MainWindow.vala index 2d05ae08..6642a679 100644 --- a/src/MainWindow.vala +++ b/src/MainWindow.vala @@ -23,6 +23,7 @@ public class Dock.MainWindow : Gtk.ApplicationWindow { private Pantheon.Desktop.Shell? desktop_shell; private Pantheon.Desktop.Panel? panel; + private ItemManager item_manager; private WindowDragManager window_drag_manager; private bool initialized_blur = false; private int border_radius = 0; @@ -40,17 +41,17 @@ 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; @@ -58,9 +59,9 @@ public class Dock.MainWindow : Gtk.ApplicationWindow { // 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) { @@ -112,7 +113,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 +122,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 ({