commit 8960b3f052428d0989fbd7b814f425ad14987d56
parent 6db6cf7b7a2c256b30ff1781714c4c22525c70c8
Author: kernelkind <kernelkind@gmail.com>
Date: Thu, 24 Jul 2025 09:43:53 -0600
add `scroll_id` for all views with vertical scroll
Signed-off-by: kernelkind <kernelkind@gmail.com>
Diffstat:
8 files changed, 49 insertions(+), 6 deletions(-)
diff --git a/crates/notedeck_columns/src/ui/accounts.rs b/crates/notedeck_columns/src/ui/accounts.rs
@@ -52,6 +52,7 @@ impl<'a> AccountsView<'a> {
ui.add_space(8.0);
scroll_area()
+ .id_salt(AccountsView::scroll_id())
.show(ui, |ui| {
Self::show_accounts(ui, self.accounts, self.ndb, self.img_cache, self.i18n)
})
@@ -59,6 +60,10 @@ impl<'a> AccountsView<'a> {
})
}
+ pub fn scroll_id() -> egui::Id {
+ egui::Id::new("accounts")
+ }
+
fn show_accounts(
ui: &mut Ui,
accounts: &Accounts,
diff --git a/crates/notedeck_columns/src/ui/add_column.rs b/crates/notedeck_columns/src/ui/add_column.rs
@@ -64,14 +64,14 @@ enum AddColumnOption {
Individual(PubkeySource),
}
-#[derive(Clone, Copy, Eq, PartialEq, Debug, Default)]
+#[derive(Clone, Copy, Eq, PartialEq, Debug, Default, Hash)]
pub enum AddAlgoRoute {
#[default]
Base,
LastPerPubkey,
}
-#[derive(Clone, Copy, Eq, PartialEq, Debug)]
+#[derive(Clone, Copy, Eq, PartialEq, Debug, Hash)]
pub enum AddColumnRoute {
Base,
UndecidedNotification,
@@ -187,8 +187,13 @@ impl<'a> AddColumnView<'a> {
}
}
+ pub fn scroll_id(route: &AddColumnRoute) -> egui::Id {
+ egui::Id::new(("add_column", route))
+ }
+
pub fn ui(&mut self, ui: &mut Ui) -> Option<AddColumnResponse> {
ScrollArea::vertical()
+ .id_salt(AddColumnView::scroll_id(&AddColumnRoute::Base))
.show(ui, |ui| {
let mut selected_option: Option<AddColumnResponse> = None;
for column_option_data in self.get_base_options(ui) {
diff --git a/crates/notedeck_columns/src/ui/configure_deck.rs b/crates/notedeck_columns/src/ui/configure_deck.rs
@@ -33,6 +33,10 @@ impl<'a> ConfigureDeckView<'a> {
self
}
+ pub fn scroll_id() -> egui::Id {
+ egui::Id::new("configure-deck")
+ }
+
pub fn ui(&mut self, ui: &mut Ui) -> Option<ConfigureDeckResponse> {
let title_font = egui::FontId::new(
notedeck::fonts::get_font_size(ui.ctx(), &NotedeckTextStyle::Heading4),
@@ -261,6 +265,7 @@ fn glyph_options_ui(
) -> Option<char> {
let mut selected_glyph = None;
egui::ScrollArea::vertical()
+ .id_salt(ConfigureDeckView::scroll_id())
.max_height(max_height)
.show(ui, |ui| {
let max_width = ui.available_width();
diff --git a/crates/notedeck_columns/src/ui/profile/edit.rs b/crates/notedeck_columns/src/ui/profile/edit.rs
@@ -24,9 +24,14 @@ impl<'a> EditProfileView<'a> {
}
}
+ pub fn scroll_id() -> egui::Id {
+ egui::Id::new("edit_profile")
+ }
+
// return true to save
pub fn ui(&mut self, ui: &mut egui::Ui) -> bool {
ScrollArea::vertical()
+ .id_salt(EditProfileView::scroll_id())
.show(ui, |ui| {
banner(ui, self.state.banner(), 188.0);
diff --git a/crates/notedeck_columns/src/ui/profile/mod.rs b/crates/notedeck_columns/src/ui/profile/mod.rs
@@ -59,8 +59,12 @@ impl<'a, 'd> ProfileView<'a, 'd> {
}
}
+ pub fn scroll_id(col_id: usize, profile_pubkey: &Pubkey) -> egui::Id {
+ egui::Id::new(("profile_scroll", col_id, profile_pubkey))
+ }
+
pub fn ui(&mut self, ui: &mut egui::Ui) -> Option<ProfileViewAction> {
- let scroll_id = egui::Id::new(("profile_scroll", self.col_id, self.pubkey));
+ let scroll_id = ProfileView::scroll_id(self.col_id, self.pubkey);
let offset_id = scroll_id.with("scroll_offset");
let mut scroll_area = ScrollArea::vertical().id_salt(scroll_id);
diff --git a/crates/notedeck_columns/src/ui/relay.rs b/crates/notedeck_columns/src/ui/relay.rs
@@ -36,6 +36,7 @@ impl RelayView<'_> {
ui.add_space(8.0);
egui::ScrollArea::vertical()
+ .id_salt(RelayView::scroll_id())
.scroll_bar_visibility(egui::scroll_area::ScrollBarVisibility::AlwaysHidden)
.auto_shrink([false; 2])
.show(ui, |ui| {
@@ -51,6 +52,10 @@ impl RelayView<'_> {
action
}
+
+ pub fn scroll_id() -> egui::Id {
+ egui::Id::new("relay_scroll")
+ }
}
impl<'a> RelayView<'a> {
diff --git a/crates/notedeck_columns/src/ui/search/mod.rs b/crates/notedeck_columns/src/ui/search/mod.rs
@@ -151,6 +151,7 @@ impl<'a, 'd> SearchView<'a, 'd> {
fn show_search_results(&mut self, ui: &mut egui::Ui) -> Option<NoteAction> {
egui::ScrollArea::vertical()
+ .id_salt(SearchView::scroll_id())
.show(ui, |ui| {
let reversed = false;
TimelineTabView::new(
@@ -165,6 +166,10 @@ impl<'a, 'd> SearchView<'a, 'd> {
})
.inner
}
+
+ pub fn scroll_id() -> egui::Id {
+ egui::Id::new("search_results")
+ }
}
fn execute_search(
diff --git a/crates/notedeck_columns/src/ui/timeline.rs b/crates/notedeck_columns/src/ui/timeline.rs
@@ -74,6 +74,15 @@ impl<'a, 'd> TimelineView<'a, 'd> {
self.reverse = true;
self
}
+
+ pub fn scroll_id(
+ timeline_cache: &TimelineCache,
+ timeline_id: &TimelineKind,
+ col: usize,
+ ) -> Option<egui::Id> {
+ let timeline = timeline_cache.get(timeline_id)?;
+ Some(egui::Id::new(("tlscroll", timeline.view_id(col))))
+ }
}
#[allow(clippy::too_many_arguments)]
@@ -95,7 +104,9 @@ fn timeline_ui(
*/
- let scroll_id = {
+ let scroll_id = TimelineView::scroll_id(timeline_cache, timeline_id, col)?;
+
+ {
let timeline = if let Some(timeline) = timeline_cache.get_mut(timeline_id) {
timeline
} else {
@@ -114,8 +125,6 @@ fn timeline_ui(
// need this for some reason??
ui.add_space(3.0);
-
- egui::Id::new(("tlscroll", timeline.view_id(col)))
};
let show_top_button_id = ui.id().with((scroll_id, "at_top"));