application: Shortcuts for non-animated next/prev

Don't animate switching between images for Alt+Arrow.

Closes #45
This commit is contained in:
Sophie Herold 2024-01-31 23:34:25 +01:00
parent fc1a44776a
commit 6958f427bd
4 changed files with 45 additions and 13 deletions

View file

@ -163,6 +163,8 @@ impl LpApplication {
self.set_accels_for_action("win.image-left", &["Left", "Page_Down"]);
self.set_accels_for_action("win.image-right", &["Right", "Page_Up"]);
self.set_accels_for_action("win.image-left-instant", &["<Alt>Left"]);
self.set_accels_for_action("win.image-right-instant", &["<Alt>Right"]);
self.set_accels_for_action("win.first", &["Home"]);
self.set_accels_for_action("win.last", &["End"]);

View file

@ -354,7 +354,7 @@ impl LpImageView {
}
/// Move forward or backwards
pub fn navigate(&self, direction: Direction) {
pub fn navigate(&self, direction: Direction, animated: bool) {
if let Some(current_file) = self.current_file() {
let new_file = match direction {
Direction::Forward => self.model().after(&current_file),
@ -362,7 +362,7 @@ impl LpImageView {
};
if let Some(new_file) = new_file {
self.scroll_sliding_view(&new_file);
self.scroll_sliding_view(&new_file, animated);
}
}
}
@ -452,7 +452,7 @@ impl LpImageView {
self.notify("is-next-available");
}
fn scroll_sliding_view(&self, file: &gio::File) {
fn scroll_sliding_view(&self, file: &gio::File, animated: bool) {
let Some(current_page) = self.sliding_view().pages().swap_remove(&file.uri()) else {
log::error!(
"Current path not available in sliding_view for scrolling: {}",
@ -461,7 +461,11 @@ impl LpImageView {
return;
};
self.sliding_view().animate_to(&current_page);
if animated {
self.sliding_view().animate_to(&current_page);
} else {
self.sliding_view().instant_to(&current_page);
}
}
fn sliding_view(&self) -> LpSlidingView {
@ -531,7 +535,7 @@ impl LpImageView {
if self.model().contains(&trash_restore) {
self.set_trash_restore(gio::File::NONE);
self.update_sliding_view(&trash_restore);
self.scroll_sliding_view(&trash_restore);
self.scroll_sliding_view(&trash_restore, true);
return;
}
}

View file

@ -554,6 +554,16 @@ impl LpSlidingView {
.cloned()
}
/// Move to specified page without animation
pub fn instant_to(&self, page: &LpImagePage) {
if let Some(index) = self.index_of(page) {
self.set_current_page(Some(page));
self.set_position(index as f64 - self.position_shift());
} else {
log::error!("Page not in LpSlidingView {}", page.file().uri());
}
}
/// Move to specified page with animation
pub fn animate_to(&self, page: &LpImagePage) {
if let Some(index) = self.index_of(page) {

View file

@ -146,26 +146,42 @@ mod imp {
});
klass.install_action("win.next", None, move |win, _, _| {
win.imp().image_view.navigate(Direction::Forward);
win.imp().image_view.navigate(Direction::Forward, true);
});
klass.install_action("win.previous", None, move |win, _, _| {
win.imp().image_view.navigate(Direction::Back);
win.imp().image_view.navigate(Direction::Back, true);
});
klass.install_action("win.image-right", None, move |win, _, _| {
if win.direction() == gtk::TextDirection::Rtl {
win.imp().image_view.navigate(Direction::Back);
win.imp().image_view.navigate(Direction::Back, true);
} else {
win.imp().image_view.navigate(Direction::Forward);
win.imp().image_view.navigate(Direction::Forward, true);
}
});
klass.install_action("win.image-right-instant", None, move |win, _, _| {
if win.direction() == gtk::TextDirection::Rtl {
win.imp().image_view.navigate(Direction::Back, false);
} else {
win.imp().image_view.navigate(Direction::Forward, false);
}
});
klass.install_action("win.image-left", None, move |win, _, _| {
if win.direction() == gtk::TextDirection::Rtl {
win.imp().image_view.navigate(Direction::Forward);
win.imp().image_view.navigate(Direction::Forward, true);
} else {
win.imp().image_view.navigate(Direction::Back);
win.imp().image_view.navigate(Direction::Back, true);
}
});
klass.install_action("win.image-left-instant", None, move |win, _, _| {
if win.direction() == gtk::TextDirection::Rtl {
win.imp().image_view.navigate(Direction::Forward, false);
} else {
win.imp().image_view.navigate(Direction::Back, false);
}
});
@ -279,11 +295,11 @@ mod imp {
self.forward_click_gesture
.connect_pressed(clone!(@weak obj => move |_,_,_,_| {
obj.image_view().navigate(Direction::Forward);
obj.image_view().navigate(Direction::Forward, true);
}));
self.backward_click_gesture
.connect_pressed(clone!(@weak obj => move |_,_,_,_| {
obj.image_view().navigate(Direction::Back);
obj.image_view().navigate(Direction::Back, true);
}));
self.properties_button
.connect_toggled(clone!(@weak obj => move |_| {