commit d0e4e4b5709cd734495cfa48ac88de6213cb4ffc
parent 601683cdc9f82c1004820c504eec821433782cfa
Author: Martti Malmi <sirius@iki.fi>
Date: Wed, 5 Nov 2025 12:59:00 +0200
fwd function (not working for profile views)
Diffstat:
3 files changed, 39 insertions(+), 12 deletions(-)
diff --git a/crates/notedeck_columns/src/app.rs b/crates/notedeck_columns/src/app.rs
@@ -104,6 +104,18 @@ fn handle_egui_events(input: &egui::InputState, columns: &mut Columns, hovered_c
}
}
+ egui::Event::PointerButton {
+ button: egui::PointerButton::Extra2,
+ pressed: true,
+ ..
+ } => {
+ if let Some(col_idx) = hovered_column {
+ columns.column_mut(col_idx).router_mut().go_forward();
+ } else {
+ columns.get_selected_router().go_forward();
+ }
+ }
+
egui::Event::InsetsChanged => {
tracing::debug!("insets have changed!");
}
diff --git a/crates/notedeck_columns/src/post.rs b/crates/notedeck_columns/src/post.rs
@@ -281,11 +281,6 @@ impl MentionSelectedResponse {
return;
};
- let mut new_cursor = text_edit_output
- .galley
- .from_ccursor(CCursor::new(self.next_cursor_index));
- new_cursor.ccursor.prefer_next_row = true;
-
before_state
.cursor
.set_char_range(Some(CCursorRange::one(CCursor::new(
diff --git a/crates/notedeck_columns/src/route.rs b/crates/notedeck_columns/src/route.rs
@@ -389,6 +389,7 @@ pub struct Router<R: Clone> {
pub returning: bool,
pub navigating: bool,
replacing: bool,
+ forward_stack: Vec<R>,
// An overlay captures a range of routes where only one will persist when going back, the most recent added
overlay_ranges: Vec<Range<usize>>,
@@ -407,12 +408,14 @@ impl<R: Clone> Router<R> {
returning,
navigating,
replacing,
+ forward_stack: Vec::new(),
overlay_ranges: Vec::new(),
}
}
pub fn route_to(&mut self, route: R) {
self.navigating = true;
+ self.forward_stack.clear();
self.routes.push(route);
}
@@ -454,31 +457,48 @@ impl<R: Clone> Router<R> {
self.prev().cloned()
}
+ pub fn go_forward(&mut self) -> bool {
+ if let Some(route) = self.forward_stack.pop() {
+ self.navigating = true;
+ self.routes.push(route);
+ true
+ } else {
+ false
+ }
+ }
+
/// Pop a route, should only be called on a NavRespose::Returned reseponse
pub fn pop(&mut self) -> Option<R> {
if self.routes.len() == 1 {
return None;
}
- 's: {
+ let is_overlay = 's: {
let Some(last_range) = self.overlay_ranges.last_mut() else {
- break 's;
+ break 's false;
};
if last_range.end != self.routes.len() {
- break 's;
+ break 's false;
}
if last_range.end - 1 <= last_range.start {
self.overlay_ranges.pop();
- break 's;
+ } else {
+ last_range.end -= 1;
}
- last_range.end -= 1;
- }
+ true
+ };
self.returning = false;
- self.routes.pop()
+ let popped = self.routes.pop();
+ if !is_overlay {
+ if let Some(ref route) = popped {
+ self.forward_stack.push(route.clone());
+ }
+ }
+ popped
}
pub fn remove_previous_routes(&mut self) {