diff --git a/src/widgets/image_view.rs b/src/widgets/image_view.rs index 6ff9988..3f47830 100644 --- a/src/widgets/image_view.rs +++ b/src/widgets/image_view.rs @@ -132,6 +132,14 @@ mod imp { // Manually mange widget layout, see `WidgetImpl` for details obj.set_layout_manager(None::); + self.sliding_view.connect_current_page_notify( + glib::clone!(@weak obj => move |_| obj.page_changed()), + ); + + self.sliding_view.connect_target_page_reached( + glib::clone!(@weak obj => move || obj.target_page_reached()), + ); + let signal_group = glib::SignalGroup::new::(); obj.connect_notify_local( Some("current-page"), @@ -574,11 +582,10 @@ impl LpImageView { self.imp().drag_source.clone() } - #[template_callback] - fn page_changed_cb(&self) { - self.notify("current-page"); - self.notify("is-previous-available"); - self.notify("is-next-available"); + fn page_changed(&self) { + self.notify_current_page(); + self.notify_is_next_available(); + self.notify_is_previous_available(); let Some(new_page) = self.current_page() else { log::debug!("Page changed but no current page"); @@ -590,9 +597,8 @@ impl LpImageView { } } - #[template_callback] /// Called when page change animation completed - fn target_page_reached_cb(&self) { + fn target_page_reached(&self) { let current_page = self.current_page(); if self.imp().preserve_content.get() { diff --git a/src/widgets/image_view.ui b/src/widgets/image_view.ui index 3b09597..7766a31 100644 --- a/src/widgets/image_view.ui +++ b/src/widgets/image_view.ui @@ -8,10 +8,7 @@ True - - - - + diff --git a/src/window.rs b/src/window.rs index 9b4491a..badccbb 100644 --- a/src/window.rs +++ b/src/window.rs @@ -36,7 +36,7 @@ use std::path::{Path, PathBuf}; use crate::config; use crate::util::{self, Direction, Position}; -use crate::widgets::{LpDragOverlay, LpImage, LpImageView, LpPropertiesView}; +use crate::widgets::{LpDragOverlay, LpImage, LpImagePage, LpImageView, LpPropertiesView}; /// Show window after X milliseconds even if image dimensions are not known yet const SHOW_WINDOW_AFTER: u64 = 2000; @@ -884,7 +884,9 @@ impl LpWindow { // have multiple `match` or `if let` branches, and without needing // to unwrap. #[template_callback] - fn window_title(&self, file: Option<&gio::File>) -> String { + fn window_title(&self, current_page: Option<&LpImagePage>) -> String { + let file = current_page.and_then(|x| x.image().file()); + // ensure that templates are initialized if file.is_none() { gettext("Image Viewer") diff --git a/src/window.ui b/src/window.ui index 152143a..f9f44e4 100644 --- a/src/window.ui +++ b/src/window.ui @@ -65,11 +65,7 @@ - - - image_view - - + image_view