diff --git a/lib/CloseButton.vala b/lib/CloseButton.vala index 6bb31e509..8c4a69897 100644 --- a/lib/CloseButton.vala +++ b/lib/CloseButton.vala @@ -8,20 +8,21 @@ public class Gala.CloseButton : Clutter.Actor { private static Gee.HashMap close_pixbufs; public signal void triggered (uint32 timestamp); - public float scale { get; construct set; } + + public float monitor_scale { get; construct set; } // used to avoid changing hitbox of the button private Clutter.Actor pixbuf_actor; private bool is_pressed = false; - public CloseButton (float scale) { - Object (scale: scale); - } - static construct { close_pixbufs = new Gee.HashMap (); } + public CloseButton (float monitor_scale) { + Object (monitor_scale: monitor_scale); + } + construct { reactive = true; @@ -30,23 +31,24 @@ public class Gala.CloseButton : Clutter.Actor { }; add_child (pixbuf_actor); - var pixbuf = get_close_button_pixbuf (scale); + load_pixbuf (); + notify["monitor-scale"].connect (load_pixbuf); + } + + private void load_pixbuf () { + var pixbuf = get_close_button_pixbuf (monitor_scale); if (pixbuf != null) { - try { - var image = new Gala.Image.from_pixbuf (pixbuf); - pixbuf_actor.set_content (image); - pixbuf_actor.set_size (pixbuf.width, pixbuf.height); - set_size (pixbuf.width, pixbuf.height); - } catch (Error e) { - create_error_texture (); - } + var image = new Gala.Image.from_pixbuf (pixbuf); + pixbuf_actor.set_content (image); + pixbuf_actor.set_size (pixbuf.width, pixbuf.height); + set_size (pixbuf.width, pixbuf.height); } else { create_error_texture (); } } - private static Gdk.Pixbuf? get_close_button_pixbuf (float scale) { - var height = Utils.calculate_button_size (scale); + private static Gdk.Pixbuf? get_close_button_pixbuf (float monitor_scale) { + var height = Utils.calculate_button_size (monitor_scale); if (close_pixbufs[height] == null) { try { @@ -71,7 +73,7 @@ public class Gala.CloseButton : Clutter.Actor { // works as good as some weird fallback-image-failed-to-load pixbuf critical ("Could not create close button"); - var size = Utils.calculate_button_size (scale); + var size = Utils.calculate_button_size (monitor_scale); pixbuf_actor.set_size (size, size); pixbuf_actor.background_color = { 255, 0, 0, 255 }; } diff --git a/src/Widgets/MultitaskingView/WindowClone.vala b/src/Widgets/MultitaskingView/WindowClone.vala index a2553340e..fedc156c1 100644 --- a/src/Widgets/MultitaskingView/WindowClone.vala +++ b/src/Widgets/MultitaskingView/WindowClone.vala @@ -137,9 +137,17 @@ public class Gala.WindowClone : ActorTarget, RootTarget { window_title = new Tooltip (); + close_button = new Gala.CloseButton (monitor_scale) { + opacity = 0 + }; + bind_property ("monitor-scale", close_button, "monitor-scale"); + close_button.triggered.connect (close_window); + close_button.notify["has-pointer"].connect (() => update_hover_widgets ()); + add_child (active_shape); add_child (clone_container); add_child (window_title); + add_child (close_button); notify["monitor-scale"].connect (reallocate); reallocate (); @@ -164,19 +172,12 @@ public class Gala.WindowClone : ActorTarget, RootTarget { } private void reallocate () { - 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)) { visible = !overview_mode }; window_icon.opacity = 0; window_icon.set_pivot_point (0.5f, 0.5f); - add_child (close_button); add_child (window_icon); set_child_below_sibling (window_icon, window_title);