diff --git a/src/Widgets/MultitaskingView/MonitorClone.vala b/src/Widgets/MultitaskingView/MonitorClone.vala index c2a9429ec..0ed759dde 100644 --- a/src/Widgets/MultitaskingView/MonitorClone.vala +++ b/src/Widgets/MultitaskingView/MonitorClone.vala @@ -16,6 +16,7 @@ public class Gala.MonitorClone : ActorTarget { public WindowManager wm { get; construct; } public int monitor { get; construct; } + public float monitor_scale { get; construct set; } private WindowCloneContainer window_container; private BackgroundManager background; @@ -26,15 +27,16 @@ public class Gala.MonitorClone : ActorTarget { construct { reactive = true; + update_allocation (); unowned var display = wm.get_display (); background = new BackgroundManager (display, monitor, false); - var scale = display.get_monitor_scale (monitor); - - window_container = new WindowCloneContainer (wm, scale); + window_container = new WindowCloneContainer (wm, monitor_scale); + window_container.add_constraint (new Clutter.BindConstraint (this, SIZE, 0.0f)); window_container.window_selected.connect ((w) => { window_selected (w); }); + bind_property ("monitor-scale", window_container, "monitor-scale"); display.window_entered_monitor.connect (window_entered); display.window_left_monitor.connect (window_left); @@ -55,8 +57,6 @@ public class Gala.MonitorClone : ActorTarget { var drop = new DragDropAction (DragDropActionType.DESTINATION, "multitaskingview-window"); add_action (drop); - - update_allocation (); } ~MonitorClone () { @@ -75,10 +75,8 @@ public class Gala.MonitorClone : ActorTarget { set_position (monitor_geometry.x, monitor_geometry.y); set_size (monitor_geometry.width, monitor_geometry.height); - window_container.set_size (monitor_geometry.width, monitor_geometry.height); - var scale = display.get_monitor_scale (monitor); - window_container.monitor_scale = scale; + monitor_scale = display.get_monitor_scale (monitor); } private void window_left (int window_monitor, Meta.Window window) { diff --git a/src/Widgets/MultitaskingView/MultitaskingView.vala b/src/Widgets/MultitaskingView/MultitaskingView.vala index 2af5cd741..8983634e3 100644 --- a/src/Widgets/MultitaskingView/MultitaskingView.vala +++ b/src/Widgets/MultitaskingView/MultitaskingView.vala @@ -166,7 +166,7 @@ public class Gala.MultitaskingView : ActorTarget, ActivatableComponent { foreach (unowned var child in workspaces.get_children ()) { unowned var workspace_clone = (WorkspaceClone) child; - workspace_clone.scale_factor = scale; + 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 934af2e3d..69b54903a 100644 --- a/src/Widgets/MultitaskingView/WindowClone.vala +++ b/src/Widgets/MultitaskingView/WindowClone.vala @@ -49,18 +49,7 @@ public class Gala.WindowClone : ActorTarget { } public bool overview_mode { get; construct; } - private float _monitor_scale_factor = 1.0f; - public float monitor_scale_factor { - get { - return _monitor_scale_factor; - } - set { - if (value != _monitor_scale_factor) { - _monitor_scale_factor = value; - reallocate (); - } - } - } + public float monitor_scale { get; construct set; } [CCode (notify = false)] public uint8 shadow_opacity { @@ -92,11 +81,11 @@ public class Gala.WindowClone : ActorTarget { private GestureController gesture_controller; - public WindowClone (WindowManager wm, Meta.Window window, float scale, bool overview_mode = false) { + public WindowClone (WindowManager wm, Meta.Window window, float monitor_scale, bool overview_mode = false) { Object ( wm: wm, window: window, - monitor_scale_factor: scale, + monitor_scale: monitor_scale, overview_mode: overview_mode ); } @@ -145,6 +134,7 @@ public class Gala.WindowClone : ActorTarget { add_child (clone_container); add_child (window_title); + notify["monitor-scale"].connect (reallocate); reallocate (); InternalUtils.wait_for_window_actor (window, load_clone); @@ -163,13 +153,13 @@ public class Gala.WindowClone : ActorTarget { } private void reallocate () { - close_button = new Gala.CloseButton (monitor_scale_factor) { + close_button = new Gala.CloseButton (monitor_scale) { opacity = 0 }; close_button.triggered.connect (close_window); close_button.notify["has-pointer"].connect (() => update_hover_widgets ()); - window_icon = new WindowIcon (window, WINDOW_ICON_SIZE, (int)Math.round (monitor_scale_factor)) { + window_icon = new WindowIcon (window, WINDOW_ICON_SIZE, (int)Math.round (monitor_scale)) { visible = !overview_mode }; window_icon.opacity = 0; @@ -206,7 +196,7 @@ public class Gala.WindowClone : ActorTarget { if (window.fullscreen || window.maximized_horizontally && window.maximized_vertically) { if (shadow_effect == null) { - shadow_effect = new ShadowEffect ("window", monitor_scale_factor); + shadow_effect = new ShadowEffect ("window", monitor_scale); shadow_opacity = 0; clone.add_effect_with_name ("shadow", shadow_effect); } @@ -278,7 +268,7 @@ public class Gala.WindowClone : ActorTarget { return; } - var target_translation_y = (float) (-CLOSE_TRANSLATION * monitor_scale_factor * progress); + var target_translation_y = (float) (-CLOSE_TRANSLATION * monitor_scale * progress); var target_opacity = (uint) (255 * (1 - progress)); clone_container.translation_y = target_translation_y; diff --git a/src/Widgets/MultitaskingView/WindowCloneContainer.vala b/src/Widgets/MultitaskingView/WindowCloneContainer.vala index 190609a20..dc0dec2eb 100644 --- a/src/Widgets/MultitaskingView/WindowCloneContainer.vala +++ b/src/Widgets/MultitaskingView/WindowCloneContainer.vala @@ -19,18 +19,7 @@ public class Gala.WindowCloneContainer : ActorTarget { public WindowManager wm { get; construct; } public bool overview_mode { get; construct; } - private float _monitor_scale = 1.0f; - public float monitor_scale { - get { - return _monitor_scale; - } - set { - if (value != _monitor_scale) { - _monitor_scale = value; - reallocate (); - } - } - } + public float monitor_scale { get; construct set; } private bool opened = false; @@ -40,15 +29,8 @@ public class Gala.WindowCloneContainer : ActorTarget { */ private unowned WindowClone? current_window = null; - public WindowCloneContainer (WindowManager wm, float scale, bool overview_mode = false) { - Object (wm: wm, monitor_scale: scale, overview_mode: overview_mode); - } - - private void reallocate () { - foreach (unowned var child in get_children ()) { - unowned var clone = (WindowClone) child; - clone.monitor_scale_factor = monitor_scale; - } + public WindowCloneContainer (WindowManager wm, float monitor_scale, bool overview_mode = false) { + Object (wm: wm, monitor_scale: monitor_scale, overview_mode: overview_mode); } /** @@ -85,6 +67,8 @@ public class Gala.WindowCloneContainer : ActorTarget { }); new_window.request_reposition.connect (() => reflow (false)); + bind_property ("monitor-scale", new_window, "monitor-scale"); + unowned Meta.Window? target = null; foreach (unowned var w in windows_ordered) { if (w != window) { diff --git a/src/Widgets/MultitaskingView/WorkspaceClone.vala b/src/Widgets/MultitaskingView/WorkspaceClone.vala index 987b112f2..82aa32a1f 100644 --- a/src/Widgets/MultitaskingView/WorkspaceClone.vala +++ b/src/Widgets/MultitaskingView/WorkspaceClone.vala @@ -128,30 +128,18 @@ public class Gala.WorkspaceClone : ActorTarget { public WindowManager wm { get; construct; } public Meta.Workspace workspace { get; construct; } + public float monitor_scale { get; construct set; } + public IconGroup icon_group { get; private set; } public WindowCloneContainer window_container { get; private set; } - private float _scale_factor = 1.0f; - public float scale_factor { - get { - return _scale_factor; - } - set { - if (value != _scale_factor) { - _scale_factor = value; - reallocate (); - update_targets (); - } - } - } - private BackgroundManager background; private bool opened; private uint hover_activate_timeout = 0; - public WorkspaceClone (WindowManager wm, Meta.Workspace workspace, float scale) { - Object (wm: wm, workspace: workspace, scale_factor: scale); + public WorkspaceClone (WindowManager wm, Meta.Workspace workspace, float monitor_scale) { + Object (wm: wm, workspace: workspace, monitor_scale: monitor_scale); } construct { @@ -166,15 +154,17 @@ public class Gala.WorkspaceClone : ActorTarget { background = new FramedBackground (display); background.add_action (background_click_action); - window_container = new WindowCloneContainer (wm, scale_factor) { + window_container = new WindowCloneContainer (wm, monitor_scale) { width = monitor_geometry.width, height = monitor_geometry.height, }; window_container.window_selected.connect ((w) => { window_selected (w); }); window_container.requested_close.connect (() => activate (true)); + bind_property ("monitor-scale", window_container, "monitor-scale"); - icon_group = new IconGroup (display, workspace, scale_factor); + icon_group = new IconGroup (display, workspace, monitor_scale); icon_group.selected.connect (() => activate (true)); + bind_property ("monitor-scale", icon_group, "scale-factor"); var icons_drop_action = new DragDropAction (DragDropActionType.DESTINATION, "multitaskingview-window"); icon_group.add_action (icons_drop_action); @@ -221,7 +211,7 @@ public class Gala.WorkspaceClone : ActorTarget { unowned var monitor_manager = display.get_context ().get_backend ().get_monitor_manager (); monitor_manager.monitors_changed.connect (update_targets); - + notify["monitor-scale"].connect (update_targets); update_targets (); } @@ -238,11 +228,6 @@ public class Gala.WorkspaceClone : ActorTarget { icon_group.destroy (); } - private void reallocate () { - icon_group.scale_factor = scale_factor; - window_container.monitor_scale = scale_factor; - } - /** * Add a window to the WindowCloneContainer and the IconGroup if it really * belongs to this workspace and this monitor. @@ -301,8 +286,8 @@ public class Gala.WorkspaceClone : ActorTarget { var monitor = display.get_monitor_geometry (display.get_primary_monitor ()); - var scale = (float)(monitor.height - InternalUtils.scale_to_int (TOP_OFFSET + BOTTOM_OFFSET, scale_factor)) / monitor.height; - var pivot_y = InternalUtils.scale_to_int (TOP_OFFSET, scale_factor) / (monitor.height - monitor.height * scale); + var scale = (float)(monitor.height - InternalUtils.scale_to_int (TOP_OFFSET + BOTTOM_OFFSET, monitor_scale)) / monitor.height; + var pivot_y = InternalUtils.scale_to_int (TOP_OFFSET, monitor_scale) / (monitor.height - monitor.height * scale); background.set_pivot_point (0.5f, pivot_y); var initial_width = monitor.width; @@ -312,10 +297,10 @@ public class Gala.WorkspaceClone : ActorTarget { 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)); - window_container.padding_top = InternalUtils.scale_to_int (TOP_OFFSET, scale_factor); + window_container.padding_top = InternalUtils.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 = InternalUtils.scale_to_int (BOTTOM_OFFSET, scale_factor); + window_container.padding_bottom = InternalUtils.scale_to_int (BOTTOM_OFFSET, monitor_scale); } public override void update_progress (GestureAction action, double progress) {