diff --git a/data/ui/views/base.ui b/data/ui/views/base.ui index 5c3933355..2bff068a6 100644 --- a/data/ui/views/base.ui +++ b/data/ui/views/base.ui @@ -124,7 +124,6 @@ 32 - True diff --git a/src/Dialogs/Composer/AttachmentsPage.vala b/src/Dialogs/Composer/AttachmentsPage.vala index 6edbe3048..9c4de7769 100644 --- a/src/Dialogs/Composer/AttachmentsPage.vala +++ b/src/Dialogs/Composer/AttachmentsPage.vala @@ -29,6 +29,7 @@ public class Tuba.AttachmentsPage : ComposerPage { "video/x-ms-asf" }; + private Gtk.Spinner spinner; public GLib.ListStore attachments; public Adw.ToastOverlay toast_overlay; public bool can_publish { get; set; default = false; } @@ -117,8 +118,8 @@ public class Tuba.AttachmentsPage : ComposerPage { stack.add_named (list, "list"); stack.add_named (empty_state, "empty"); - var spinner = new Gtk.Spinner() { - spinning = true, + spinner = new Gtk.Spinner() { + spinning = false, halign = Gtk.Align.CENTER, valign = Gtk.Align.CENTER, vexpand = true, @@ -161,6 +162,7 @@ public class Tuba.AttachmentsPage : ComposerPage { var is_empty = attachments_size < 1; if (is_empty || uploading) { stack.visible_child_name = uploading ? "spinner" : "empty"; + spinner.spinning = uploading; bottom_bar.hide (); can_publish = false; } else { diff --git a/src/Views/Base.vala b/src/Views/Base.vala index 208d9d2bd..336d97ad6 100644 --- a/src/Views/Base.vala +++ b/src/Views/Base.vala @@ -30,6 +30,7 @@ public class Tuba.Views.Base : Box { [GtkChild] unowned Stack status_stack; [GtkChild] unowned Label status_title_label; [GtkChild] unowned Label status_message_label; + [GtkChild] unowned Spinner status_spinner; public string state { get; set; default = "status"; } public string status_title { get; set; default = STATUS_EMPTY; } @@ -41,9 +42,16 @@ public class Tuba.Views.Base : Box { build_header (); status_button.label = _("Reload"); - bind_property ("state", states, "visible-child-name", BindingFlags.SYNC_CREATE); + bind_property ("state", states, "visible-child-name", BindingFlags.SYNC_CREATE, (b, src, ref target) => { + target.set_string (src.get_string ()); + if (src.get_string () != "status") status_spinner.spinning = false; + + return true; + }); bind_property ("status-loading", status_stack, "visible-child-name", BindingFlags.SYNC_CREATE, (b, src, ref target) => { target.set_string (src.get_boolean () ? "spinner" : "message"); + status_spinner.spinning = src.get_boolean (); + return true; }); bind_property ("status-message", status_message_label, "label", BindingFlags.SYNC_CREATE, (b, src, ref target) => { diff --git a/src/Views/MediaViewer.vala b/src/Views/MediaViewer.vala index eeaa16c6a..0b1fe0b69 100644 --- a/src/Views/MediaViewer.vala +++ b/src/Views/MediaViewer.vala @@ -21,6 +21,7 @@ public class Tuba.Views.MediaViewer : Gtk.Box { public bool spinning { set { stack.visible_child_name = value ? "spinner" : _type; + spinner.spinning = value; } get { return stack.visible_child_name == "spinner"; } } @@ -38,6 +39,7 @@ public class Tuba.Views.MediaViewer : Gtk.Box { protected Gtk.Button fullscreen_btn; protected Adw.HeaderBar headerbar; protected ImageCache image_cache; + private Gtk.Spinner spinner; public Gdk.Paintable paintable { set { _type = "image"; @@ -88,8 +90,8 @@ public class Tuba.Views.MediaViewer : Gtk.Box { }; stack.add_named(pic, "image"); - var spinner = new Gtk.Spinner() { - spinning = true, + spinner = new Gtk.Spinner() { + spinning = false, halign = Gtk.Align.CENTER, valign = Gtk.Align.CENTER, vexpand = true, @@ -213,7 +215,7 @@ public class Tuba.Views.MediaViewer : Gtk.Box { this.paintable = null; this.set_video(null); this.url = ""; - this.spinning = true; + this.spinning = false; } private void on_media_viewer_cache_response(bool is_loaded, owned Gdk.Paintable? data) {