goblin: fix Settings scroll extent so the page reaches its foot (Android)

Root cause found by diffing against upstream GRIM, which does not have the
bug: GRIM gives every ScrollArea a distinct id_salt (e.g. "wallet_list_scroll",
"wallet_tab_content_scroll"); our goblin surface created fifteen unsalted
ScrollArea::vertical() — Settings Main and every settings sub-page render
theirs at the same position in the same parent Ui, so they all resolved to the
SAME egui scroll-state id. Scroll offset and remembered content extents
collided across pages, clamping the Settings list's maximum scroll to another
(shorter) page's extent: the page stopped scrolling before its real end and the
bottom items — including the wallet-management foot (Switch wallet / Lock /
Advanced), i.e. the way out — were unreachable on the phone. This one root
cause covers both user reports ("Settings bottom cut off" and "can't exit").

Every goblin ScrollArea now carries a unique id_salt, matching GRIM's
convention, so each page keeps its own scroll state and traverses to its true
bottom. Back-press behavior is deliberately untouched.
This commit is contained in:
2ro
2026-07-05 22:05:56 -04:00
parent d80218a13c
commit 0c7a1404fa
+15
View File
@@ -1034,6 +1034,7 @@ impl GoblinWalletView {
) {
let data = wallet.get_data();
ScrollArea::vertical()
.id_salt("goblin_home_scroll")
.auto_shrink([false; 2])
.scroll_bar_visibility(egui::scroll_area::ScrollBarVisibility::AlwaysHidden)
.show(ui, |ui| {
@@ -1517,6 +1518,7 @@ impl GoblinWalletView {
return;
};
ScrollArea::vertical()
.id_salt("goblin_receipt_scroll")
.auto_shrink([false; 2])
.show(ui, |ui| {
ui.add_space(8.0);
@@ -1864,6 +1866,7 @@ impl GoblinWalletView {
close = true;
}
ScrollArea::vertical()
.id_salt("goblin_profile_scroll")
.auto_shrink([false; 2])
.show(ui, |ui| {
ui.add_space(8.0);
@@ -2083,6 +2086,7 @@ impl GoblinWalletView {
}
ScrollArea::vertical()
.id_salt("goblin_activity_scroll")
.auto_shrink([false; 2])
.scroll_bar_visibility(egui::scroll_area::ScrollBarVisibility::AlwaysHidden)
.show(ui, |ui| {
@@ -2331,6 +2335,7 @@ impl GoblinWalletView {
close = true;
}
ScrollArea::vertical()
.id_salt("goblin_approve_scroll")
.auto_shrink([false; 2])
.scroll_bar_visibility(egui::scroll_area::ScrollBarVisibility::AlwaysHidden)
.show(ui, |ui| {
@@ -2761,6 +2766,7 @@ impl GoblinWalletView {
);
ui.add_space(6.0);
ScrollArea::vertical()
.id_salt("goblin_settings_scroll")
.auto_shrink([false; 2])
.scroll_bar_visibility(egui::scroll_area::ScrollBarVisibility::AlwaysHidden)
.show(ui, |ui| {
@@ -3191,6 +3197,7 @@ impl GoblinWalletView {
return;
}
ScrollArea::vertical()
.id_salt("goblin_pairing_scroll")
.auto_shrink([false; 2])
.scroll_bar_visibility(egui::scroll_area::ScrollBarVisibility::AlwaysHidden)
.show(ui, |ui| {
@@ -3247,6 +3254,7 @@ impl GoblinWalletView {
}
let current = crate::AppConfig::locale().unwrap_or_else(|| rust_i18n::locale().to_string());
ScrollArea::vertical()
.id_salt("goblin_language_scroll")
.auto_shrink([false; 2])
.scroll_bar_visibility(egui::scroll_area::ScrollBarVisibility::AlwaysHidden)
.show(ui, |ui| {
@@ -3290,6 +3298,7 @@ impl GoblinWalletView {
return;
}
ScrollArea::vertical()
.id_salt("goblin_privacy_scroll")
.auto_shrink([false; 2])
.scroll_bar_visibility(egui::scroll_area::ScrollBarVisibility::AlwaysHidden)
.show(ui, |ui| {
@@ -3354,6 +3363,7 @@ impl GoblinWalletView {
{
let adv = &mut self.advanced;
ScrollArea::vertical()
.id_salt("goblin_advanced_scroll")
.auto_shrink([false; 2])
.scroll_bar_visibility(egui::scroll_area::ScrollBarVisibility::AlwaysHidden)
.show(ui, |ui| {
@@ -3712,6 +3722,7 @@ impl GoblinWalletView {
return;
}
ScrollArea::vertical()
.id_salt("goblin_node_scroll")
.auto_shrink([false; 2])
.scroll_bar_visibility(egui::scroll_area::ScrollBarVisibility::AlwaysHidden)
.show(ui, |ui| {
@@ -3855,6 +3866,7 @@ impl GoblinWalletView {
return;
}
ScrollArea::vertical()
.id_salt("goblin_relays_scroll")
.auto_shrink([false; 2])
.scroll_bar_visibility(egui::scroll_area::ScrollBarVisibility::AlwaysHidden)
.show(ui, |ui| {
@@ -3937,6 +3949,7 @@ impl GoblinWalletView {
return;
}
ScrollArea::vertical()
.id_salt("goblin_slatepack_scroll")
.auto_shrink([false; 2])
.scroll_bar_visibility(egui::scroll_area::ScrollBarVisibility::AlwaysHidden)
.show(ui, |ui| {
@@ -4109,6 +4122,7 @@ impl GoblinWalletView {
return;
}
ScrollArea::vertical()
.id_salt("goblin_nips_scroll")
.auto_shrink([false; 2])
.scroll_bar_visibility(egui::scroll_area::ScrollBarVisibility::AlwaysHidden)
.show(ui, |ui| {
@@ -4891,6 +4905,7 @@ impl GoblinWalletView {
let identities = wallet.nostr_identities();
ScrollArea::vertical()
.id_salt("goblin_identities_scroll")
.auto_shrink([false; 2])
.scroll_bar_visibility(egui::scroll_area::ScrollBarVisibility::AlwaysHidden)
.show(ui, |ui| {