@@ -13,10 +13,10 @@ public class Gala.WindowSwitcher : CanvasActor, GestureTarget, RootTarget {
1313 private const int MIN_OFFSET = 64 ;
1414 private const double GESTURE_STEP = 0.1 ;
1515
16+ public Clutter . Actor ? actor { get { return this ; } }
1617 public WindowManager wm { get ; construct; }
1718 public bool opened { get ; private set ; default = false ; }
18-
19- public Clutter . Actor ? actor { get { return this ; } }
19+ public float monitor_scale { get ; private set ; default = 1.0f ; }
2020
2121 private GestureController gesture_controller;
2222 private int modifier_mask;
@@ -50,8 +50,6 @@ public class Gala.WindowSwitcher : CanvasActor, GestureTarget, RootTarget {
5050
5151 private double previous_progress = 0d ;
5252
53- private float scaling_factor = 1.0f ;
54-
5553 public WindowSwitcher (WindowManager wm ) {
5654 Object (wm: wm);
5755 }
@@ -95,37 +93,31 @@ public class Gala.WindowSwitcher : CanvasActor, GestureTarget, RootTarget {
9593 orientation = VERTICAL
9694 };
9795
98- shadow_effect = new ShadowEffect (" window-switcher" , scaling_factor) {
96+ notify[" monitor-scale" ]. connect (scale);
97+ scale ();
98+
99+ shadow_effect = new ShadowEffect (" window-switcher" , monitor_scale) {
99100 border_radius = 10 ,
100101 shadow_opacity = 100
101102 };
103+ bind_property (" monitor-scale" , shadow_effect, " monitor-scale" );
102104 add_effect (shadow_effect);
103105
104106
105- blur_effect = new BackgroundBlurEffect (40 , 9 , scaling_factor);
107+ blur_effect = new BackgroundBlurEffect (40 , 9 , monitor_scale);
108+ bind_property (" monitor-scale" , blur_effect, " monitor-scale" );
106109 add_effect (blur_effect);
107110
108- scale ();
109-
110111 container. button_release_event. connect (container_mouse_release);
111112
112113 // Redraw the components if the colour scheme changes.
113114 style_manager. notify[" prefers-color-scheme" ]. connect (content. invalidate);
114115
115- unowned var monitor_manager = wm. get_display (). get_context (). get_backend (). get_monitor_manager ();
116- monitor_manager. monitors_changed. connect (scale);
117-
118116 notify[" opacity" ]. connect (() = > visible = opacity != 0 );
119117 }
120118
121119 private void scale () {
122- unowned var display = wm. get_display ();
123- scaling_factor = display. get_monitor_scale (display. get_current_monitor ());
124-
125- shadow_effect. monitor_scale = scaling_factor;
126- blur_effect. monitor_scale = scaling_factor;
127-
128- var margin = Utils . scale_to_int (WRAPPER_PADDING , scaling_factor);
120+ var margin = Utils . scale_to_int (WRAPPER_PADDING , monitor_scale);
129121
130122 container. margin_left = margin;
131123 container. margin_right = margin;
@@ -150,7 +142,7 @@ public class Gala.WindowSwitcher : CanvasActor, GestureTarget, RootTarget {
150142 container. get_preferred_size (null , null , out container_nat_width, null );
151143
152144 var max_width = float . min (
153- geom. width - Utils . scale_to_int (MIN_OFFSET * 2 , scaling_factor ), // Don't overflow the monitor
145+ geom. width - Utils . scale_to_int (MIN_OFFSET * 2 , monitor_scale ), // Don't overflow the monitor
154146 container_nat_width // Ellipsize the label if it's longer than the icons
155147 );
156148
@@ -184,12 +176,12 @@ public class Gala.WindowSwitcher : CanvasActor, GestureTarget, RootTarget {
184176
185177 ctx. set_operator (Cairo . Operator . SOURCE );
186178
187- var stroke_width = Utils . scale_to_int (1 , scaling_factor );
179+ var stroke_width = Utils . scale_to_int (1 , monitor_scale );
188180 Drawing . Utilities . cairo_rounded_rectangle (
189181 ctx,
190182 stroke_width / 2.0 , stroke_width / 2.0 ,
191183 width - stroke_width, height - stroke_width,
192- Utils . scale_to_int (9 , scaling_factor )
184+ Utils . scale_to_int (9 , monitor_scale )
193185 );
194186
195187 ctx. set_source_rgba (
@@ -214,7 +206,7 @@ public class Gala.WindowSwitcher : CanvasActor, GestureTarget, RootTarget {
214206 ctx, stroke_width * 1.5 , stroke_width * 1.5 ,
215207 width - stroke_width * 3 ,
216208 height - stroke_width * 3 ,
217- Utils . scale_to_int (8 , scaling_factor )
209+ Utils . scale_to_int (8 , monitor_scale )
218210 );
219211
220212 ctx. set_line_width (stroke_width);
@@ -334,14 +326,17 @@ public class Gala.WindowSwitcher : CanvasActor, GestureTarget, RootTarget {
334326 container. remove_all_children ();
335327 select_icon (null );
336328
329+ monitor_scale = display. get_monitor_scale (display. get_current_monitor ());
330+
337331 var windows = display. get_tab_list (Meta . TabList . NORMAL , workspace);
338332 if (windows == null ) {
339333 return false ;
340334 }
341335
342336 unowned var current_window = display. get_tab_current (Meta . TabList . NORMAL , workspace);
343337 foreach (unowned var window in windows) {
344- var icon = new WindowSwitcherIcon (window, scaling_factor);
338+ var icon = new WindowSwitcherIcon (window, monitor_scale);
339+ bind_property (" monitor-scale" , icon, " monitor-scale" );
345340 add_icon (icon);
346341
347342 if (window == current_window) {
@@ -356,6 +351,8 @@ public class Gala.WindowSwitcher : CanvasActor, GestureTarget, RootTarget {
356351 container. remove_all_children ();
357352 select_icon (null );
358353
354+ monitor_scale = display. get_monitor_scale (display. get_current_monitor ());
355+
359356 var windows = display. get_tab_list (Meta . TabList . NORMAL , workspace);
360357 if (windows == null ) {
361358 return false ;
@@ -370,7 +367,8 @@ public class Gala.WindowSwitcher : CanvasActor, GestureTarget, RootTarget {
370367 var app = window_tracker. get_app_for_window (current_window);
371368 foreach (unowned var window in windows) {
372369 if (window_tracker. get_app_for_window (window) == app) {
373- var icon = new WindowSwitcherIcon (window, scaling_factor);
370+ var icon = new WindowSwitcherIcon (window, monitor_scale);
371+ bind_property (" monitor-scale" , icon, " monitor-scale" );
374372 add_icon (icon);
375373
376374 if (window == current_window) {
0 commit comments