diff --git a/data/gtk/image_page.ui b/data/gtk/image_page.ui
index 560c5de..b1a10bc 100644
--- a/data/gtk/image_page.ui
+++ b/data/gtk/image_page.ui
@@ -43,10 +43,18 @@
@@ -98,7 +106,7 @@
Rotate Right
win.rotate_cw
@@ -110,3 +118,4 @@
+
diff --git a/src/widgets/image_page.rs b/src/widgets/image_page.rs
index 1d432dc..a52f041 100644
--- a/src/widgets/image_page.rs
+++ b/src/widgets/image_page.rs
@@ -39,12 +39,14 @@ mod imp {
#[template_child]
pub(super) stack: TemplateChild,
#[template_child]
- pub(super) spinner: TemplateChild,
+ pub(super) spinner_page: TemplateChild,
#[template_child]
pub(super) error_page: TemplateChild,
#[template_child]
pub(super) image_stack_page: TemplateChild,
#[template_child]
+ pub(super) spinner: TemplateChild,
+ #[template_child]
pub(super) scrolled_window: TemplateChild,
#[template_child]
pub(super) image: TemplateChild,
@@ -108,10 +110,20 @@ mod imp {
gesture.set_state(gtk::EventSequenceState::Claimed);
}));
+ self.stack
+ .connect_visible_child_notify(clone!(@weak obj => move |stack| {
+ let imp = obj.imp();
+ let spinner_visible =
+ stack.visible_child().as_ref() == Some(imp.spinner_page.upcast_ref());
+ // Hide spinner for crossfading into other content since it does not look great
+ imp.spinner.set_visible(spinner_visible);
+ }));
+
obj.image().connect_notify_local(
Some("is-loaded"),
clone!(@weak obj => move |_,_| {
if obj.image().is_loaded() {
+ log::debug!("Showing image");
obj.imp()
.stack
.set_visible_child(&*obj.imp().image_stack_page);
@@ -127,7 +139,6 @@ mod imp {
}
}),
);
-
// Do not waste CPU on spinner if it is not visible
self.spinner.connect_map(|s| s.start());
self.spinner.connect_unmap(|s| s.stop());