Skip to content

Commit f70a8c5

Browse files
authored
Make ItemManager not a singleton (#589)
There is no benefit of it being a singleton and singletons often bring a bunch of problems and lead to suboptimal architecture.
1 parent 6f218aa commit f70a8c5

4 files changed

Lines changed: 19 additions & 24 deletions

File tree

src/BaseItem.vala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ public class Dock.BaseItem : Gtk.Box {
312312
* @param y pointer y position
313313
*/
314314
public void calculate_dnd_move (BaseItem source, double x, double y) {
315-
var launcher_manager = ItemManager.get_default ();
315+
var launcher_manager = (ItemManager) get_ancestor (typeof (ItemManager));
316316
launcher_manager.move_launcher_after (source, (int) index);
317317
}
318318

src/DBus/ShellKeyGrabber.vala

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,16 @@ public interface ShellKeyGrabber : GLib.Object {
109109
return;
110110
}
111111

112-
Dock.ItemManager.get_default ().launch (saved_action_ids[action]);
112+
var index = saved_action_ids[action] - 1;
113+
var apps = Dock.AppSystem.get_default ().apps;
114+
115+
if (index < 0 || index >= apps.get_n_items ()) {
116+
return;
117+
}
118+
119+
var context = Gdk.Display.get_default ().get_app_launch_context ();
120+
var app = (Dock.App) apps.get_item (index);
121+
app.launch (context);
113122
}
114123

115124
private static void ungrab_keybindings () requires (instance != null) {

src/ItemManager.vala

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,6 @@
66
public class Dock.ItemManager : Gtk.Box {
77
private static Settings settings;
88

9-
private static GLib.Once<ItemManager> instance;
10-
public static unowned ItemManager get_default () {
11-
return instance.once (() => { return new ItemManager (); });
12-
}
13-
149
public Launcher? added_launcher { get; set; default = null; }
1510

1611
private DynamicWorkspaceIcon dynamic_workspace_item;
@@ -163,14 +158,4 @@
163158
warning ("Tried to move neither launcher nor icon group");
164159
}
165160
}
166-
167-
public void launch (uint index) {
168-
if (index < 1 || index > AppSystem.get_default ().apps.get_n_items ()) {
169-
return;
170-
}
171-
172-
var context = Gdk.Display.get_default ().get_app_launch_context ();
173-
var app = (App) AppSystem.get_default ().apps.get_item (index - 1);
174-
app.launch (context);
175-
}
176161
}

src/MainWindow.vala

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public class Dock.MainWindow : Gtk.ApplicationWindow {
2323
private Pantheon.Desktop.Shell? desktop_shell;
2424
private Pantheon.Desktop.Panel? panel;
2525

26+
private ItemManager item_manager;
2627
private WindowDragManager window_drag_manager;
2728
private bool initialized_blur = false;
2829
private int border_radius = 0;
@@ -40,27 +41,27 @@ public class Dock.MainWindow : Gtk.ApplicationWindow {
4041
dock_box.append (new Container ());
4142
dock_box.append (new BottomMargin ());
4243

43-
unowned var launcher_manager = ItemManager.get_default ();
44+
item_manager = new ItemManager ();
4445

4546
// Don't clip launchers to dock background https://github.com/elementary/dock/issues/275
4647
var overlay = new Gtk.Overlay () {
4748
child = dock_box
4849
};
49-
overlay.add_overlay (launcher_manager);
50+
overlay.add_overlay (item_manager);
5051

5152
var size_group = new Gtk.SizeGroup (Gtk.SizeGroupMode.BOTH);
5253
size_group.add_widget (dock_box);
53-
size_group.add_widget (launcher_manager);
54+
size_group.add_widget (item_manager);
5455

5556
child = overlay;
5657

5758
remove_css_class ("background");
5859

5960
// Fixes DnD reordering of launchers failing on a very small line between two launchers
6061
var drop_target_launcher = new Gtk.DropTarget (typeof (Launcher), MOVE);
61-
launcher_manager.add_controller (drop_target_launcher);
62+
item_manager.add_controller (drop_target_launcher);
6263

63-
launcher_manager.realize.connect (init_panel);
64+
item_manager.realize.connect (init_panel);
6465

6566
settings.changed["autohide-mode"].connect (() => {
6667
if (panel != null) {
@@ -112,7 +113,7 @@ public class Dock.MainWindow : Gtk.ApplicationWindow {
112113
surface.compute_size.connect ((surface, size) => {
113114
// manually set shadow width since the additional margin we add to avoid icons clipping when
114115
// bouncing isn't added by default and instead counts to the frame
115-
var item_manager_width = ItemManager.get_default ().get_width ();
116+
var item_manager_width = item_manager.get_width ();
116117
var shadow_size = (surface.width - item_manager_width) / 2;
117118
var top_margin = TOP_MARGIN + shadow_size - 1;
118119
size.set_shadow_width (shadow_size, shadow_size, top_margin, shadow_size);
@@ -121,7 +122,7 @@ public class Dock.MainWindow : Gtk.ApplicationWindow {
121122
surface.layout.connect ((surface, width, height) => {
122123
// manually set input region since container's shadow are is the content of the window
123124
// and it still gets window events
124-
var item_manager_width = ItemManager.get_default ().get_width ();
125+
var item_manager_width = item_manager.get_width ();
125126
var shadow_size = (width - item_manager_width) / 2;
126127
var top_margin = TOP_MARGIN + shadow_size;
127128
surface.set_input_region (new Cairo.Region.rectangle ({

0 commit comments

Comments
 (0)