commit c1d0ea1901c17ffd04d0ba655b56c8938b38ccd9
parent 8f63546524bfc6661f35bf30c174eb693aa2851e
Author: William Casarin <jb55@jb55.com>
Date: Thu, 24 Jul 2025 12:28:06 -0700
Merge remote-tracking branch 'github/jb55-deck-733-profile-sidebar-action-should-route-in-the-active-column'
Diffstat:
6 files changed, 25 insertions(+), 23 deletions(-)
diff --git a/crates/notedeck_chrome/src/chrome.rs b/crates/notedeck_chrome/src/chrome.rs
@@ -699,7 +699,7 @@ fn chrome_handle_app_action(
);
if let Some(action) = m_action {
- let col = cols.column_mut(0);
+ let col = cols.selected_mut();
action.process(&mut col.router, &mut col.sheet_router);
}
@@ -723,7 +723,7 @@ fn columns_route_to_profile(
.active_columns_mut(ctx.i18n, ctx.accounts)
.unwrap();
- let router = cols.get_first_router();
+ let router = cols.get_selected_router();
if router.routes().iter().any(|r| {
matches!(
r,
@@ -754,7 +754,7 @@ fn columns_route_to_profile(
);
if let Some(action) = m_action {
- let col = cols.column_mut(0);
+ let col = cols.selected_mut();
action.process(&mut col.router, &mut col.sheet_router);
}
diff --git a/crates/notedeck_columns/src/app.rs b/crates/notedeck_columns/src/app.rs
@@ -78,9 +78,7 @@ fn handle_key_events(input: &egui::InputState, columns: &mut Columns) {
columns.select_left();
}
egui::Key::BrowserBack | egui::Key::Escape => {
- if let Some(column) = columns.selected_mut() {
- column.router_mut().go_back();
- }
+ columns.get_selected_router().go_back();
}
_ => {}
}
diff --git a/crates/notedeck_columns/src/column.rs b/crates/notedeck_columns/src/column.rs
@@ -156,11 +156,9 @@ impl Columns {
// Get the first router in the columns if there are columns present.
// Otherwise, create a new column picker and return the router
- pub fn get_first_router(&mut self) -> &mut Router<Route> {
- if self.columns.is_empty() {
- self.new_column_picker();
- }
- self.columns[0].router_mut()
+ pub fn get_selected_router(&mut self) -> &mut Router<Route> {
+ self.ensure_column();
+ self.selected_mut().router_mut()
}
#[inline]
@@ -181,19 +179,25 @@ impl Columns {
Some(&self.columns[self.selected as usize])
}
- #[inline]
- pub fn selected_mut(&mut self) -> Option<&mut Column> {
+ // TODO(jb55): switch to non-empty container for columns?
+ fn ensure_column(&mut self) {
if self.columns.is_empty() {
- return None;
+ self.new_column_picker();
}
- Some(&mut self.columns[self.selected as usize])
+ }
+
+ /// Get the selected column. If you're looking to route something
+ /// and you're not sure which one to choose, use this one
+ #[inline]
+ pub fn selected_mut(&mut self) -> &mut Column {
+ self.ensure_column();
+ assert!(self.selected < self.columns.len() as i32);
+ &mut self.columns[self.selected as usize]
}
#[inline]
pub fn column_mut(&mut self, ind: usize) -> &mut Column {
- if self.columns.is_empty() {
- self.new_column_picker();
- }
+ self.ensure_column();
&mut self.columns[ind]
}
diff --git a/crates/notedeck_columns/src/decks.rs b/crates/notedeck_columns/src/decks.rs
@@ -35,7 +35,7 @@ impl DecksCache {
accounts: ¬edeck::Accounts,
) -> Option<&mut Column> {
self.active_columns_mut(i18n, accounts)
- .and_then(|ad| ad.selected_mut())
+ .map(|ad| ad.selected_mut())
}
pub fn selected_column(&self, accounts: ¬edeck::Accounts) -> Option<&Column> {
diff --git a/crates/notedeck_columns/src/nav.rs b/crates/notedeck_columns/src/nav.rs
@@ -771,7 +771,7 @@ fn render_nav_body(
new_deck_state.clear();
get_active_columns_mut(ctx.i18n, ctx.accounts, &mut app.decks_cache)
- .get_first_router()
+ .get_selected_router()
.go_back();
}
resp
@@ -802,7 +802,7 @@ fn render_nav_body(
}
}
get_active_columns_mut(ctx.i18n, ctx.accounts, &mut app.decks_cache)
- .get_first_router()
+ .get_selected_router()
.go_back();
}
diff --git a/crates/notedeck_columns/src/ui/side_panel.rs b/crates/notedeck_columns/src/ui/side_panel.rs
@@ -187,7 +187,7 @@ impl<'a> DesktopSidePanel<'a> {
action: SidePanelAction,
i18n: &mut Localization,
) -> Option<SwitchingAction> {
- let router = get_active_columns_mut(i18n, accounts, decks_cache).get_first_router();
+ let router = get_active_columns_mut(i18n, accounts, decks_cache).get_selected_router();
let mut switching_response = None;
match action {
/*
@@ -280,7 +280,7 @@ impl<'a> DesktopSidePanel<'a> {
{
edit_deck
.columns_mut()
- .get_first_router()
+ .get_selected_router()
.route_to(Route::EditDeck(index));
} else {
error!("Cannot push EditDeck route to index {}", index);