util/root: Use specific function to show toasts
This commit is contained in:
parent
3e69dc4c6f
commit
7b45009eed
5 changed files with 40 additions and 65 deletions
|
|
@ -39,15 +39,28 @@ pub trait ParentWindow: WidgetExt {
|
||||||
let result = self.root().and_downcast();
|
let result = self.root().and_downcast();
|
||||||
|
|
||||||
if result.is_none() {
|
if result.is_none() {
|
||||||
log::debug!(
|
log::error!(
|
||||||
"Couldn't find LpWindow for {self:?}. mapped={}",
|
"Couldn't find LpWindow for {self:?}. mapped={}. caller={}",
|
||||||
self.is_mapped()
|
self.is_mapped(),
|
||||||
|
std::panic::Location::caller(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn window_show_toast(&self, text: &str, priority: adw::ToastPriority) {
|
||||||
|
if let Some(window) = self.try_window() {
|
||||||
|
window.show_toast(text, priority);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn window_add_toast(&self, toast: adw::Toast) {
|
||||||
|
if let Some(window) = self.try_window() {
|
||||||
|
window.add_toast(toast);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn edit_window(&self) -> LpEditWindow {
|
fn edit_window(&self) -> LpEditWindow {
|
||||||
let parent = self.parent().unwrap();
|
let parent = self.parent().unwrap();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,6 @@ use adw::subclass::prelude::*;
|
||||||
use anyhow::Context;
|
use anyhow::Context;
|
||||||
use ashpd::desktop::{ResponseError, wallpaper};
|
use ashpd::desktop::{ResponseError, wallpaper};
|
||||||
use ashpd::{Error, WindowIdentifier};
|
use ashpd::{Error, WindowIdentifier};
|
||||||
use glib::translate::IntoGlib;
|
|
||||||
use glib::{Properties, clone};
|
use glib::{Properties, clone};
|
||||||
use gtk::CompositeTemplate;
|
use gtk::CompositeTemplate;
|
||||||
|
|
||||||
|
|
@ -45,6 +44,7 @@ use crate::decoder::DecoderError;
|
||||||
use crate::deps::*;
|
use crate::deps::*;
|
||||||
use crate::file_model::{FileEvent, LpFileModel};
|
use crate::file_model::{FileEvent, LpFileModel};
|
||||||
use crate::util::gettext::*;
|
use crate::util::gettext::*;
|
||||||
|
use crate::util::root::ParentWindow;
|
||||||
use crate::util::{self, Direction, Position};
|
use crate::util::{self, Direction, Position};
|
||||||
use crate::widgets::{LpImage, LpImagePage, LpPrint, LpSlidingView};
|
use crate::widgets::{LpImage, LpImagePage, LpPrint, LpSlidingView};
|
||||||
|
|
||||||
|
|
@ -483,17 +483,10 @@ impl LpImageView {
|
||||||
if let Some(directory) = directory {
|
if let Some(directory) = directory {
|
||||||
if let Err(err) = obj.model().load_directory(directory.clone()).await {
|
if let Err(err) = obj.model().load_directory(directory.clone()).await {
|
||||||
log::warn!("Failed to load directory: {}", err.root_cause());
|
log::warn!("Failed to load directory: {}", err.root_cause());
|
||||||
obj.activate_action(
|
obj.window_show_toast(
|
||||||
"win.show-toast",
|
&format!("{} {}", err, err.root_cause()),
|
||||||
Some(
|
adw::ToastPriority::High,
|
||||||
&(
|
);
|
||||||
format!("{} {}", err, err.root_cause()),
|
|
||||||
adw::ToastPriority::High.into_glib(),
|
|
||||||
)
|
|
||||||
.to_variant(),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -835,33 +828,18 @@ impl LpImageView {
|
||||||
.await
|
.await
|
||||||
.and_then(|req| req.response())
|
.and_then(|req| req.response())
|
||||||
{
|
{
|
||||||
Ok(_) => self
|
Ok(_) => self.window_show_toast(
|
||||||
.activate_action(
|
// Translators: This is a toast notification, informing the user that
|
||||||
"win.show-toast",
|
// an image has been set as background.
|
||||||
Some(
|
&gettext("Set as background."),
|
||||||
&(
|
adw::ToastPriority::High,
|
||||||
// Translators: This is a toast notification, informing the user that
|
),
|
||||||
// an image has been set as background.
|
|
||||||
gettext("Set as background."),
|
|
||||||
adw::ToastPriority::High.into_glib(),
|
|
||||||
)
|
|
||||||
.to_variant(),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
.unwrap(),
|
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
if !matches!(err, Error::Response(ResponseError::Cancelled)) {
|
if !matches!(err, Error::Response(ResponseError::Cancelled)) {
|
||||||
self.activate_action(
|
self.window_show_toast(
|
||||||
"win.show-toast",
|
&gettext("Could not set background."),
|
||||||
Some(
|
adw::ToastPriority::High,
|
||||||
&(
|
);
|
||||||
gettext("Could not set background."),
|
|
||||||
adw::ToastPriority::High.into_glib(),
|
|
||||||
)
|
|
||||||
.to_variant(),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -610,7 +610,7 @@ impl LpImageWindow {
|
||||||
if let Err(e) = imp.image_view.copy() {
|
if let Err(e) = imp.image_view.copy() {
|
||||||
log::error!("Failed to copy to clipboard: {}", e);
|
log::error!("Failed to copy to clipboard: {}", e);
|
||||||
} else {
|
} else {
|
||||||
self.window().show_toast(
|
self.window_show_toast(
|
||||||
&gettext("Image copied to clipboard"),
|
&gettext("Image copied to clipboard"),
|
||||||
adw::ToastPriority::High,
|
adw::ToastPriority::High,
|
||||||
);
|
);
|
||||||
|
|
@ -647,7 +647,7 @@ impl LpImageWindow {
|
||||||
let result = crate::util::untrash(&path).await;
|
let result = crate::util::untrash(&path).await;
|
||||||
if let Err(err) = result {
|
if let Err(err) = result {
|
||||||
log::error!("Failed to untrash {path:?}: {err}");
|
log::error!("Failed to untrash {path:?}: {err}");
|
||||||
obj.window().show_toast(
|
obj.window_show_toast(
|
||||||
&gettext("Failed to restore image from trash"),
|
&gettext("Failed to restore image from trash"),
|
||||||
adw::ToastPriority::High,
|
adw::ToastPriority::High,
|
||||||
);
|
);
|
||||||
|
|
@ -655,14 +655,14 @@ impl LpImageWindow {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
));
|
));
|
||||||
self.window().add_toast(toast);
|
self.window_add_toast(toast);
|
||||||
}
|
}
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
if Some(gio::IOErrorEnum::NotSupported) == err.kind::<gio::IOErrorEnum>() {
|
if Some(gio::IOErrorEnum::NotSupported) == err.kind::<gio::IOErrorEnum>() {
|
||||||
self.delete_future(&path).await;
|
self.delete_future(&path).await;
|
||||||
} else {
|
} else {
|
||||||
log::error!("Failed to delete file {path:?}: {err}");
|
log::error!("Failed to delete file {path:?}: {err}");
|
||||||
self.window().show_toast(
|
self.window_show_toast(
|
||||||
&gettext("Failed to move image to trash"),
|
&gettext("Failed to move image to trash"),
|
||||||
adw::ToastPriority::Normal,
|
adw::ToastPriority::Normal,
|
||||||
);
|
);
|
||||||
|
|
@ -708,7 +708,7 @@ impl LpImageWindow {
|
||||||
|
|
||||||
if let Err(err) = result {
|
if let Err(err) = result {
|
||||||
log::error!("Failed to delete file {path:?}: {err}");
|
log::error!("Failed to delete file {path:?}: {err}");
|
||||||
self.window().show_toast(
|
self.window_show_toast(
|
||||||
&gettext("Failed to delete image"),
|
&gettext("Failed to delete image"),
|
||||||
adw::ToastPriority::Normal,
|
adw::ToastPriority::Normal,
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -23,11 +23,11 @@ use std::cell::{OnceCell, RefCell};
|
||||||
use adw::prelude::*;
|
use adw::prelude::*;
|
||||||
use adw::subclass::prelude::*;
|
use adw::subclass::prelude::*;
|
||||||
use glib::Properties;
|
use glib::Properties;
|
||||||
use glib::translate::IntoGlib;
|
|
||||||
use gtk::CompositeTemplate;
|
use gtk::CompositeTemplate;
|
||||||
|
|
||||||
use crate::deps::*;
|
use crate::deps::*;
|
||||||
use crate::util::gettext::*;
|
use crate::util::gettext::*;
|
||||||
|
use crate::util::root::ParentWindow;
|
||||||
use crate::util::{self};
|
use crate::util::{self};
|
||||||
use crate::widgets::image::LpImage;
|
use crate::widgets::image::LpImage;
|
||||||
|
|
||||||
|
|
@ -322,15 +322,9 @@ mod imp {
|
||||||
if let Some(location) = obj.image().and_then(|x| x.metadata().gps_location()) {
|
if let Some(location) = obj.image().and_then(|x| x.metadata().gps_location()) {
|
||||||
let clipboard = obj.display().clipboard();
|
let clipboard = obj.display().clipboard();
|
||||||
clipboard.set_text(&location.iso_6709());
|
clipboard.set_text(&location.iso_6709());
|
||||||
let _ = obj.activate_action(
|
obj.window_show_toast(
|
||||||
"win.show-toast",
|
&gettext("Image Coordinates Copied"),
|
||||||
Some(
|
adw::ToastPriority::Normal,
|
||||||
&(
|
|
||||||
gettext("Image Coordinates Copied"),
|
|
||||||
adw::ToastPriority::Normal.into_glib(),
|
|
||||||
)
|
|
||||||
.to_variant(),
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -91,16 +91,6 @@ mod imp {
|
||||||
"win.show-help-overlay",
|
"win.show-help-overlay",
|
||||||
);
|
);
|
||||||
|
|
||||||
klass.install_action(
|
|
||||||
"win.show-toast",
|
|
||||||
Some(VariantTy::TUPLE),
|
|
||||||
move |win, _, var| {
|
|
||||||
if let Some((ref toast, i)) = var.and_then(|v| v.get::<(String, i32)>()) {
|
|
||||||
win.show_toast(toast, adw::ToastPriority::__Unknown(i));
|
|
||||||
}
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
WindowAction::init_actions_and_bindings(klass);
|
WindowAction::init_actions_and_bindings(klass);
|
||||||
|
|
||||||
ActionPartGlobal::init_actions_and_bindings(klass);
|
ActionPartGlobal::init_actions_and_bindings(klass);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue