edit/crop: Allow delayed selection of image
This commit is contained in:
parent
729f5249ed
commit
0943138060
1 changed files with 30 additions and 3 deletions
|
|
@ -121,6 +121,9 @@ mod imp {
|
||||||
|
|
||||||
#[property(get, set)]
|
#[property(get, set)]
|
||||||
zoom_toggle_state: Cell<bool>,
|
zoom_toggle_state: Cell<bool>,
|
||||||
|
|
||||||
|
#[property(get, set, nullable)]
|
||||||
|
pub delayed_current_file: RefCell<Option<gio::File>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[glib::object_subclass]
|
#[glib::object_subclass]
|
||||||
|
|
@ -529,10 +532,11 @@ impl LpImageView {
|
||||||
}
|
}
|
||||||
|
|
||||||
let Some(new_index) = self.model().index_of(new_file) else {
|
let Some(new_index) = self.model().index_of(new_file) else {
|
||||||
log::warn!(
|
log::debug!(
|
||||||
"Could not navigate to file '{}': Not in model",
|
"Could not navigate to file that's not in model '{}': Delaying insertion",
|
||||||
new_file.uri()
|
new_file.uri()
|
||||||
);
|
);
|
||||||
|
self.set_delayed_current_file(Some(new_file));
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -558,6 +562,8 @@ impl LpImageView {
|
||||||
log::debug!("Scrolling to page for {}", new_file.uri());
|
log::debug!("Scrolling to page for {}", new_file.uri());
|
||||||
self.imp().preserve_content.set(true);
|
self.imp().preserve_content.set(true);
|
||||||
sliding_view.animate_to(&page);
|
sliding_view.animate_to(&page);
|
||||||
|
|
||||||
|
self.set_delayed_current_file(gio::File::NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Ensures the sliding view contains the correct images
|
/// Ensures the sliding view contains the correct images
|
||||||
|
|
@ -607,6 +613,8 @@ impl LpImageView {
|
||||||
} else {
|
} else {
|
||||||
self.sliding_view().instant_to(¤t_page);
|
self.sliding_view().instant_to(¤t_page);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.set_delayed_current_file(gio::File::NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn sliding_view(&self) -> LpSlidingView {
|
fn sliding_view(&self) -> LpSlidingView {
|
||||||
|
|
@ -684,6 +692,8 @@ impl LpImageView {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dbg!(file_event);
|
||||||
|
|
||||||
let Some(current_file) = self.current_file() else {
|
let Some(current_file) = self.current_file() else {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
@ -694,8 +704,25 @@ impl LpImageView {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
FileEvent::Moved(src, target) => {
|
FileEvent::Moved(src, target) => {
|
||||||
|
let target_file = gio::File::for_uri(target);
|
||||||
|
// Set new filename for image
|
||||||
if let Some(page) = self.sliding_view().get(&gio::File::for_uri(src)) {
|
if let Some(page) = self.sliding_view().get(&gio::File::for_uri(src)) {
|
||||||
page.image().init(&gio::File::for_uri(target));
|
page.image().init(&target_file);
|
||||||
|
}
|
||||||
|
// File that delayed move is set for is now available
|
||||||
|
if let Some(delayed_current_file) = self.delayed_current_file() {
|
||||||
|
if target_file.equal(&delayed_current_file) {
|
||||||
|
self.navigate_to_file(&delayed_current_file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FileEvent::New(new) => {
|
||||||
|
// File that delayed move is set for is now available
|
||||||
|
if let Some(delayed_current_file) = self.delayed_current_file() {
|
||||||
|
let new_file = gio::File::for_uri(new);
|
||||||
|
if new_file.equal(&delayed_current_file) {
|
||||||
|
self.navigate_to_file(&delayed_current_file);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue