Skip to content
30 changes: 23 additions & 7 deletions src/ItemManager.vala
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,9 @@

public Launcher? added_launcher { get; set; default = null; }

private DynamicWorkspaceIcon dynamic_workspace_item;

#if WORKSPACE_SWITCHER
private Gtk.Separator separator;
private DynamicWorkspaceIcon dynamic_workspace_item;
#endif

static construct {
Expand All @@ -21,25 +20,42 @@
construct {
var app_group = new ItemGroup (AppSystem.get_default ().apps, (obj) => new Launcher ((App) obj));

var app_group_scrolled = new Gtk.ScrolledWindow () {
child = app_group,
vscrollbar_policy = NEVER,
propagate_natural_width = true
};

var background_item = new BackgroundItem ();
var background_group = new ItemGroup (background_item.group_model, (obj) => (BackgroundItem) obj);

#if WORKSPACE_SWITCHER
dynamic_workspace_item = new DynamicWorkspaceIcon ();

separator = new Gtk.Separator (VERTICAL) {
valign = START,
margin_top = Launcher.PADDING,
};
settings.bind ("icon-size", separator, "height-request", GET);

var workspace_group = new ItemGroup (WorkspaceSystem.get_default ().workspaces, (obj) => new WorkspaceIconGroup ((Workspace) obj));

dynamic_workspace_item = new DynamicWorkspaceIcon ();

var workspace_box = new Gtk.Box (HORIZONTAL, 0);
workspace_box.append (workspace_group);
workspace_box.append (dynamic_workspace_item);

var workspace_group_scrolled = new Gtk.ScrolledWindow () {
child = workspace_box,
vscrollbar_policy = NEVER,
propagate_natural_width = true
};
#endif

append (app_group);
append (app_group_scrolled);
append (background_group);
#if WORKSPACE_SWITCHER
append (separator);
append (new ItemGroup (WorkspaceSystem.get_default ().workspaces, (obj) => new WorkspaceIconGroup ((Workspace) obj)));
append (dynamic_workspace_item);
append (workspace_group_scrolled);
#endif
overflow = VISIBLE;

Expand Down
30 changes: 30 additions & 0 deletions src/MainWindow.vala
Original file line number Diff line number Diff line change
Expand Up @@ -190,4 +190,34 @@ public class Dock.MainWindow : Gtk.ApplicationWindow {
xdisplay.change_property (window, prop, X.XA_STRING, 8, 0, (uchar[]) value, value.length);
}
}

public override void measure (
Gtk.Orientation orientation,
int for_size,
out int minimum,
out int natural,
out int minimum_baseline,
out int natural_baseline
) {
if (orientation != HORIZONTAL) {
base.measure (orientation, for_size, out minimum, out natural, out minimum_baseline, out natural_baseline);
return;
}

minimum = minimum_baseline = natural_baseline = -1;

var monitor_width = int.MAX;
unowned var surface = get_surface ();
if (surface != null) {
unowned var monitor = Gdk.Display.get_default ().get_monitor_at_surface (surface);
if (monitor != null) {
monitor_width = monitor.geometry.width;
}
}

int item_manager_natural_width;
item_manager.measure (HORIZONTAL, -1, null, out item_manager_natural_width, null, null);

natural = int.min (item_manager_natural_width, monitor_width - 2 * BottomMargin.get_size ());
}
}