notedeck

One damus client to rule them all
git clone git://jb55.com/notedeck
Log | Files | Refs | README | LICENSE

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:
Mcrates/notedeck_columns/src/app.rs | 12++++++++++++
Mcrates/notedeck_columns/src/post.rs | 5-----
Mcrates/notedeck_columns/src/route.rs | 34+++++++++++++++++++++++++++-------
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) {