diff --git a/src/Widgets/MultitaskingView/MultitaskingView.vala b/src/Widgets/MultitaskingView/MultitaskingView.vala index 6f6df41bb..85f4ffff9 100644 --- a/src/Widgets/MultitaskingView/MultitaskingView.vala +++ b/src/Widgets/MultitaskingView/MultitaskingView.vala @@ -149,7 +149,6 @@ public class Gala.MultitaskingView : ActorTarget, RootTarget, ActivatableCompone foreach (unowned var child in workspaces.get_children ()) { unowned var workspace_clone = (WorkspaceClone) child; workspace_clone.monitor_scale = scale; - workspace_clone.update_size (primary_geometry); } } diff --git a/src/Widgets/MultitaskingView/WindowClone.vala b/src/Widgets/MultitaskingView/WindowClone.vala index 0519e84f2..06924aefd 100644 --- a/src/Widgets/MultitaskingView/WindowClone.vala +++ b/src/Widgets/MultitaskingView/WindowClone.vala @@ -505,7 +505,7 @@ public class Gala.WindowClone : ActorTarget, RootTarget { did_move = true; } - var workspace = ((WorkspaceClone) destination.get_parent ()).workspace; + var workspace = ((WorkspaceClone) destination.get_parent ().get_parent ()).workspace; if (workspace != window.get_workspace ()) { window.change_workspace (workspace); did_move = true; diff --git a/src/Widgets/MultitaskingView/WindowCloneContainer.vala b/src/Widgets/MultitaskingView/WindowCloneContainer.vala index 9b1e76a20..0d34425e7 100644 --- a/src/Widgets/MultitaskingView/WindowCloneContainer.vala +++ b/src/Widgets/MultitaskingView/WindowCloneContainer.vala @@ -11,10 +11,7 @@ public class Gala.WindowCloneContainer : ActorTarget { public signal void window_selected (Meta.Window window); public signal void requested_close (); - public int padding_top { get; set; default = 12; } - public int padding_left { get; set; default = 12; } - public int padding_right { get; set; default = 12; } - public int padding_bottom { get; set; default = 12; } + public Mtk.Rectangle area { get; set; } public WindowManager wm { get; construct; } public WindowListModel windows { get; construct; } @@ -140,13 +137,6 @@ public class Gala.WindowCloneContainer : ActorTarget { return (int) (seq_b - seq_a); }); - Mtk.Rectangle area = { - padding_left, - padding_top, - (int) width - padding_left - padding_right, - (int) height - padding_top - padding_bottom - }; - foreach (var tilable in calculate_grid_placement (area, windows)) { tilable.clone.take_slot (tilable.rect, !view_toggle); } diff --git a/src/Widgets/MultitaskingView/WorkspaceClone.vala b/src/Widgets/MultitaskingView/WorkspaceClone.vala index 2b13d65f9..1fd02d098 100644 --- a/src/Widgets/MultitaskingView/WorkspaceClone.vala +++ b/src/Widgets/MultitaskingView/WorkspaceClone.vala @@ -121,6 +121,7 @@ public class Gala.WorkspaceClone : ActorTarget { public WindowCloneContainer window_container { get; private set; } private BackgroundManager background; + private Clutter.Actor background_container; private WindowListModel windows; private uint hover_activate_timeout = 0; @@ -128,6 +129,10 @@ public class Gala.WorkspaceClone : ActorTarget { Object (wm: wm, workspace: workspace, monitor_scale: monitor_scale); } + class construct { + set_layout_manager_type (typeof (Clutter.BinLayout)); + } + construct { unowned var display = workspace.get_display (); var monitor_geometry = display.get_monitor_geometry (display.get_primary_monitor ()); @@ -137,12 +142,15 @@ public class Gala.WorkspaceClone : ActorTarget { background = new FramedBackground (display); background.add_action (background_click_action); + // Background will always request the whole unscaled monitor size and we can't + // force it smaller via set_size because that would cause effects to get the size wrong + // Therefore put it into this container and force the container's size to the scaled size + background_container = new Clutter.Actor (); + background_container.add_child (background); + windows = new WindowListModel (display, STACKING, true, display.get_primary_monitor (), workspace); - window_container = new WindowCloneContainer (wm, windows, monitor_scale) { - width = monitor_geometry.width, - height = monitor_geometry.height, - }; + window_container = new WindowCloneContainer (wm, windows, monitor_scale); window_container.window_selected.connect ((window) => window_selected (window)); window_container.requested_close.connect (() => activate (true)); bind_property ("monitor-scale", window_container, "monitor-scale"); @@ -167,7 +175,7 @@ public class Gala.WorkspaceClone : ActorTarget { } }); - add_child (background); + add_child (background_container); add_child (window_container); unowned var monitor_manager = display.get_context ().get_backend ().get_monitor_manager (); @@ -181,13 +189,6 @@ public class Gala.WorkspaceClone : ActorTarget { window_container.destroy (); } - public void update_size (Mtk.Rectangle monitor_geometry) { - if (window_container.width != monitor_geometry.width || window_container.height != monitor_geometry.height) { - window_container.set_size (monitor_geometry.width, monitor_geometry.height); - background.set_size (window_container.width, window_container.height); - } - } - private void update_targets () { remove_all_targets (); @@ -198,20 +199,23 @@ public class Gala.WorkspaceClone : ActorTarget { var monitor = display.get_monitor_geometry (primary); + background_container.height = window_container.height = monitor.height; + var scale = (float)(monitor.height - Utils.scale_to_int (TOP_OFFSET + BOTTOM_OFFSET, monitor_scale)) / monitor.height; var pivot_y = Utils.scale_to_int (TOP_OFFSET, monitor_scale) / (monitor.height - monitor.height * scale); - background.set_pivot_point (0.5f, pivot_y); + background.set_pivot_point (0f, pivot_y); var initial_width = monitor.width; - var target_width = monitor.width * scale + WorkspaceRow.WORKSPACE_GAP * 2; + var target_width = (int) Math.ceilf (monitor.width * scale); - add_target (new PropertyTarget (MULTITASKING_VIEW, this, "width", typeof (float), (float) initial_width, (float) target_width)); + add_target (new PropertyTarget (MULTITASKING_VIEW, background_container, "width", typeof (float), (float) initial_width, (float) target_width)); add_target (new PropertyTarget (MULTITASKING_VIEW, background, "scale-x", typeof (double), 1d, (double) scale)); add_target (new PropertyTarget (MULTITASKING_VIEW, background, "scale-y", typeof (double), 1d, (double) scale)); + add_target (new PropertyTarget (MULTITASKING_VIEW, window_container, "width", typeof (float), (float) initial_width, (float) target_width)); - window_container.padding_top = Utils.scale_to_int (TOP_OFFSET, monitor_scale); - window_container.padding_left = window_container.padding_right = (int) (monitor.width - monitor.width * scale) / 2; - window_container.padding_bottom = Utils.scale_to_int (BOTTOM_OFFSET, monitor_scale); + window_container.area = { + 12, Utils.scale_to_int (TOP_OFFSET, monitor_scale), target_width - 24, (int) (monitor.height * scale) + }; } private void activate (bool close_view) { diff --git a/src/Widgets/MultitaskingView/WorkspaceRow.vala b/src/Widgets/MultitaskingView/WorkspaceRow.vala index 1398a2361..12098d100 100644 --- a/src/Widgets/MultitaskingView/WorkspaceRow.vala +++ b/src/Widgets/MultitaskingView/WorkspaceRow.vala @@ -23,12 +23,13 @@ public class Gala.WorkspaceRow : ActorTarget { set_allocation (allocation); double progress = get_current_progress (SWITCH_WORKSPACE); + var monitor_width = display.get_monitor_geometry (display.get_primary_monitor ()).width; int index = 0; for (var child = get_first_child (); child != null; child = child.get_next_sibling ()) { float preferred_width; child.get_preferred_width (-1, null, out preferred_width); - var child_x = (float) Math.round ((progress + index) * (preferred_width + WORKSPACE_GAP)); + var child_x = (float) Math.round ((progress + index) * (preferred_width + WORKSPACE_GAP) + (monitor_width - preferred_width) / 2); child.allocate_preferred_size (child_x, 0); diff --git a/src/Widgets/WindowOverview.vala b/src/Widgets/WindowOverview.vala index 6eea75c97..ecda2a4da 100644 --- a/src/Widgets/WindowOverview.vala +++ b/src/Widgets/WindowOverview.vala @@ -120,10 +120,7 @@ public class Gala.WindowOverview : ActorTarget, RootTarget, ActivatableComponent model.items_changed.connect (on_items_changed); window_clone_container = new WindowCloneContainer (wm, model, scale, true) { - padding_top = TOP_GAP, - padding_left = BORDER, - padding_right = BORDER, - padding_bottom = BOTTOM_GAP, + area = { BORDER, TOP_GAP, geometry.width - 2 * BORDER, geometry.height - TOP_GAP - BOTTOM_GAP }, width = geometry.width, height = geometry.height, x = geometry.x,