@@ -40,7 +40,7 @@ namespace Gala {
4040
4141 private IconGroupContainer icon_groups;
4242 private ActorTarget workspaces;
43- private Clutter . Actor primary_monitor_container ;
43+ private PrimaryMonitorClone primary_monitor_clone ;
4444 private Clutter . BrightnessContrastEffect brightness_effect;
4545
4646 private GLib . Settings gala_behavior_settings;
@@ -66,17 +66,6 @@ namespace Gala {
6666
6767 add_target (ShellClientsManager . get_instance ()); // For hiding the panels
6868
69- workspaces = new WorkspaceRow (display);
70-
71- workspaces_gesture_controller = new GestureController (WorkspaceRow . GESTURE_ID , SWITCH_WORKSPACE , workspaces) {
72- enabled = false ,
73- overshoot_upper_clamp = 0.1
74- };
75- workspaces_gesture_controller. enable_touchpad ();
76- workspaces_gesture_controller. enable_scroll (this , HORIZONTAL );
77-
78- icon_groups = new IconGroupContainer (display. get_monitor_scale (display. get_primary_monitor ()));
79-
8069 brightness_effect = new Clutter .BrightnessContrastEffect ();
8170 update_brightness_effect ();
8271
@@ -86,13 +75,24 @@ namespace Gala {
8675
8776 add_child (blurred_bg);
8877
78+ icon_groups = new IconGroupContainer (display. get_monitor_scale (display. get_primary_monitor ()));
79+
80+ workspaces = new ActorTarget () {
81+ layout_manager = new Clutter .BoxLayout ()
82+ };
83+
8984 // Create a child container that will be sized to fit the primary monitor, to contain the "main"
9085 // multitasking view UI. The Clutter.Actor of this class has to be allowed to grow to the size of the
9186 // stage as it contains MonitorClones for each monitor.
92- primary_monitor_container = new ActorTarget ();
93- primary_monitor_container. add_child (icon_groups);
94- primary_monitor_container. add_child (workspaces);
95- add_child (primary_monitor_container);
87+ primary_monitor_clone = new PrimaryMonitorClone (display, icon_groups, workspaces);
88+ add_child (primary_monitor_clone);
89+
90+ workspaces_gesture_controller = new GestureController (PrimaryMonitorClone . GESTURE_ID , SWITCH_WORKSPACE , primary_monitor_clone) {
91+ enabled = false ,
92+ overshoot_upper_clamp = 0.1
93+ };
94+ workspaces_gesture_controller. enable_touchpad ();
95+ workspaces_gesture_controller. enable_scroll (this , HORIZONTAL );
9696
9797 unowned var manager = display. get_workspace_manager ();
9898 manager. workspace_added. connect (add_workspace);
@@ -186,8 +186,8 @@ namespace Gala {
186186 var scale = display. get_monitor_scale (primary);
187187 icon_groups. scale_factor = scale;
188188
189- primary_monitor_container . set_position (primary_geometry. x, primary_geometry. y);
190- primary_monitor_container . set_size (primary_geometry. width, primary_geometry. height);
189+ primary_monitor_clone . set_position (primary_geometry. x, primary_geometry. y);
190+ primary_monitor_clone . set_size (primary_geometry. width, primary_geometry. height);
191191
192192 foreach (unowned var child in workspaces. get_children ()) {
193193 unowned var workspace_clone = (WorkspaceClone ) child;
@@ -288,9 +288,7 @@ namespace Gala {
288288 modal_proxy = wm. push_modal (this );
289289 modal_proxy. set_keybinding_filter (keybinding_filter);
290290
291- var scale = display. get_monitor_scale (display. get_primary_monitor ());
292291 icon_groups. force_reposition ();
293- icon_groups. y = primary_monitor_container. height - InternalUtils . scale_to_int (WorkspaceClone . BOTTOM_OFFSET - 20 , scale);
294292 } else {
295293 DragDropAction . cancel_all_by_id (" multitaskingview-window" );
296294 }
@@ -332,6 +330,11 @@ namespace Gala {
332330 * positions immediately.
333331 */
334332 private void update_positions (bool animate) {
333+ for (var child = workspaces. get_first_child (); child != null ; child = child. get_next_sibling ()) {
334+ unowned var workspace_clone = (WorkspaceClone ) child;
335+ workspaces. set_child_at_index (workspace_clone, workspace_clone. workspace. index ());
336+ }
337+
335338 unowned var manager = display. get_workspace_manager ();
336339 workspaces_gesture_controller. overshoot_lower_clamp = - manager. n_workspaces - 0.1 + 1 ;
337340
@@ -340,32 +343,6 @@ namespace Gala {
340343 } else {
341344 workspaces_gesture_controller. progress = - manager. get_active_workspace_index ();
342345 }
343-
344- reposition_icon_groups (animate);
345- }
346-
347- private void reposition_icon_groups (bool animate) {
348- unowned Meta . WorkspaceManager manager = display. get_workspace_manager ();
349- var active_index = manager. get_active_workspace (). index ();
350-
351- if (animate) {
352- icon_groups. save_easing_state ();
353- icon_groups. set_easing_mode (Clutter . AnimationMode . EASE_OUT_QUAD );
354- icon_groups. set_easing_duration (200 );
355- }
356-
357- var scale = display. get_monitor_scale (display. get_primary_monitor ());
358- // make sure the active workspace's icongroup is always visible
359- var icon_groups_width = icon_groups. calculate_total_width ();
360- if (icon_groups_width > primary_monitor_container. width) {
361- icon_groups. x = (- active_index * InternalUtils . scale_to_int (IconGroupContainer . SPACING + IconGroup . SIZE , scale) + primary_monitor_container. width / 2 )
362- .clamp (primary_monitor_container. width - icon_groups_width - InternalUtils . scale_to_int (64 , scale), InternalUtils . scale_to_int (64 , scale));
363- } else
364- icon_groups. x = primary_monitor_container. width / 2 - icon_groups_width / 2 ;
365-
366- if (animate) {
367- icon_groups. restore_easing_state ();
368- }
369346 }
370347
371348 private void add_workspace (int num) {
0 commit comments