window: Don't use expression for title
This commit is contained in:
parent
5b3ad7c257
commit
6c58f4cabd
2 changed files with 20 additions and 44 deletions
|
|
@ -288,7 +288,11 @@ mod imp {
|
||||||
glib::clone!(@weak obj => move || if !obj.is_visible() { obj.present() }),
|
glib::clone!(@weak obj => move || if !obj.is_visible() { obj.present() }),
|
||||||
);
|
);
|
||||||
|
|
||||||
obj.on_images_available();
|
obj.on_current_page_changed();
|
||||||
|
|
||||||
|
self.image_view.connect_current_page_notify(
|
||||||
|
glib::clone!(@weak obj => move |_| obj.on_current_page_changed()),
|
||||||
|
);
|
||||||
|
|
||||||
let gesture_click = gtk::GestureClick::new();
|
let gesture_click = gtk::GestureClick::new();
|
||||||
gesture_click
|
gesture_click
|
||||||
|
|
@ -354,13 +358,6 @@ mod imp {
|
||||||
glib::clone!(@weak obj => move |_| obj.on_top_bar_style_notify()),
|
glib::clone!(@weak obj => move |_| obj.on_top_bar_style_notify()),
|
||||||
);
|
);
|
||||||
|
|
||||||
self.image_view.connect_notify_local(
|
|
||||||
Some("current-page"),
|
|
||||||
glib::clone!(@weak obj => move |_, _| {
|
|
||||||
obj.on_images_available();
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
|
|
||||||
// action win.previous status
|
// action win.previous status
|
||||||
self.image_view.connect_notify_local(
|
self.image_view.connect_notify_local(
|
||||||
Some("is-previous-available"),
|
Some("is-previous-available"),
|
||||||
|
|
@ -721,13 +718,23 @@ impl LpWindow {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Handles change in availability of images
|
/// Handles change in availability of images
|
||||||
fn on_images_available(&self) {
|
fn on_current_page_changed(&self) {
|
||||||
let imp = self.imp();
|
let imp = self.imp();
|
||||||
|
|
||||||
let shows_image = imp.image_view.current_page().is_some();
|
// Window title
|
||||||
|
let title = self
|
||||||
|
.imp()
|
||||||
|
.image_view
|
||||||
|
.current_file()
|
||||||
|
.and_then(|f| util::get_file_display_name(&f))
|
||||||
|
.unwrap_or_else(|| gettext("Image Viewer"));
|
||||||
|
|
||||||
imp.properties_button.set_sensitive(shows_image);
|
self.set_title(Some(&title));
|
||||||
self.set_actions_enabled(shows_image);
|
|
||||||
|
let has_image = imp.image_view.current_page().is_some();
|
||||||
|
|
||||||
|
imp.properties_button.set_sensitive(has_image);
|
||||||
|
self.set_actions_enabled(has_image);
|
||||||
self.action_set_enabled(
|
self.action_set_enabled(
|
||||||
"win.trash",
|
"win.trash",
|
||||||
imp.image_view
|
imp.image_view
|
||||||
|
|
@ -735,7 +742,7 @@ impl LpWindow {
|
||||||
.is_some_and(|file| file.path().is_some()),
|
.is_some_and(|file| file.path().is_some()),
|
||||||
);
|
);
|
||||||
|
|
||||||
if shows_image {
|
if has_image {
|
||||||
imp.stack.set_visible_child(&*imp.image_view);
|
imp.stack.set_visible_child(&*imp.image_view);
|
||||||
imp.image_view.grab_focus();
|
imp.image_view.grab_focus();
|
||||||
self.queue_hide_controls();
|
self.queue_hide_controls();
|
||||||
|
|
@ -906,32 +913,6 @@ impl LpWindow {
|
||||||
imp.stack.visible_child().as_ref() == Some(imp.image_view.upcast_ref())
|
imp.stack.visible_child().as_ref() == Some(imp.image_view.upcast_ref())
|
||||||
}
|
}
|
||||||
|
|
||||||
// In the LpWindow UI file we define a `gtk::Expression`s
|
|
||||||
// that is a closure. This closure takes the current `gio::File`
|
|
||||||
// and processes it to return a window title.
|
|
||||||
//
|
|
||||||
// In this function we chain `Option`s with `and_then()` in order
|
|
||||||
// to handle optional results with a fallback, without needing to
|
|
||||||
// have multiple `match` or `if let` branches, and without needing
|
|
||||||
// to unwrap.
|
|
||||||
#[template_callback]
|
|
||||||
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")
|
|
||||||
} else {
|
|
||||||
self.imp()
|
|
||||||
.image_view
|
|
||||||
.current_file()
|
|
||||||
.and_then(|f| util::get_file_display_name(&f)) // If the file exists, get display name
|
|
||||||
.unwrap_or_else(|| gettext("Image Viewer")) // Return that or
|
|
||||||
// the default if
|
|
||||||
// there's nothing
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn on_click(&self) {
|
fn on_click(&self) {
|
||||||
self.show_controls();
|
self.show_controls();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -63,11 +63,6 @@
|
||||||
<property name="height-request">360</property>
|
<property name="height-request">360</property>
|
||||||
<property name="title" translatable="yes">Image Viewer</property>
|
<property name="title" translatable="yes">Image Viewer</property>
|
||||||
<signal name="notify::fullscreened" handler="on_fullscreened" swapped="yes" />
|
<signal name="notify::fullscreened" handler="on_fullscreened" swapped="yes" />
|
||||||
<binding name="title">
|
|
||||||
<closure type="gchararray" function="window_title">
|
|
||||||
<lookup name="current-page">image_view</lookup>
|
|
||||||
</closure>
|
|
||||||
</binding>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="AdwBreakpoint">
|
<object class="AdwBreakpoint">
|
||||||
<condition>max-width: 590sp</condition>
|
<condition>max-width: 590sp</condition>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue