From 79ca201e7bb824542f6169c2fc925cea240b389e Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Wed, 31 Dec 2025 15:00:54 -0500 Subject: [PATCH 1/3] Fix the symbol filter not working in the mapping view --- objdiff-gui/src/views/diff.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/objdiff-gui/src/views/diff.rs b/objdiff-gui/src/views/diff.rs index f7c4a67..457b7d1 100644 --- a/objdiff-gui/src/views/diff.rs +++ b/objdiff-gui/src/views/diff.rs @@ -741,7 +741,7 @@ fn diff_col_ui( ui, SymbolDiffContext { obj, diff }, &state.symbol_state, - SymbolFilter::Mapping(other_symbol_idx, None), + SymbolFilter::Mapping(other_symbol_idx, state.search_regex.as_ref()), appearance, column, open_sections, From c7ac7f8403c224d687a8af8f1632cccc2a8fd8a9 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Fri, 2 Jan 2026 14:29:16 -0500 Subject: [PATCH 2/3] Separate the mapping filter from the regular filter --- objdiff-gui/src/views/diff.rs | 6 ++--- objdiff-gui/src/views/symbol_diff.rs | 35 +++++++++++++++++++++++----- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/objdiff-gui/src/views/diff.rs b/objdiff-gui/src/views/diff.rs index 457b7d1..4a12e2f 100644 --- a/objdiff-gui/src/views/diff.rs +++ b/objdiff-gui/src/views/diff.rs @@ -287,7 +287,7 @@ pub fn diff_view_ui( }); } else if left_ctx.status.success && !left_ctx.has_symbol() { ui.horizontal(|ui| { - let mut search = state.search.clone(); + let mut search = state.get_current_search(); let response = TextEdit::singleline(&mut search).hint_text("Filter symbols").ui(ui); if hotkeys::consume_symbol_filter_shortcut(ui.ctx()) { @@ -452,7 +452,7 @@ pub fn diff_view_ui( } } } else if right_ctx.status.success && !right_ctx.has_symbol() { - let mut search = state.search.clone(); + let mut search = state.get_current_search(); let response = TextEdit::singleline(&mut search).hint_text("Filter symbols").ui(ui); if hotkeys::consume_symbol_filter_shortcut(ui.ctx()) { @@ -741,7 +741,7 @@ fn diff_col_ui( ui, SymbolDiffContext { obj, diff }, &state.symbol_state, - SymbolFilter::Mapping(other_symbol_idx, state.search_regex.as_ref()), + SymbolFilter::Mapping(other_symbol_idx, state.mapping_search_regex.as_ref()), appearance, column, open_sections, diff --git a/objdiff-gui/src/views/symbol_diff.rs b/objdiff-gui/src/views/symbol_diff.rs index bb40f21..f6e1cf9 100644 --- a/objdiff-gui/src/views/symbol_diff.rs +++ b/objdiff-gui/src/views/symbol_diff.rs @@ -118,6 +118,8 @@ pub struct DiffViewState { pub function_state: FunctionViewState, pub search: String, pub search_regex: Option, + pub mapping_search: String, + pub mapping_search_regex: Option, pub build_running: bool, pub scratch_available: bool, pub scratch_running: bool, @@ -154,6 +156,9 @@ impl DiffViewState { self.current_view = result.view; self.symbol_state.left_symbol = result.left_symbol; self.symbol_state.right_symbol = result.right_symbol; + // Clear the mapping filter so it's not saved between mapping different symbols. + self.mapping_search = "".to_string(); + self.mapping_search_regex = None; } false @@ -268,12 +273,7 @@ impl DiffViewState { self.symbol_state.autoscroll_to_highlighted_symbols = autoscroll; } DiffViewAction::SetSearch(search) => { - self.search_regex = if search.is_empty() { - None - } else { - RegexBuilder::new(&search).case_insensitive(true).build().ok() - }; - self.search = search; + self.set_search(search); } DiffViewAction::CreateScratch(function_name) => { let Ok(state) = state.read() else { @@ -394,6 +394,29 @@ impl DiffViewState { target_symbol: symbol_diff.target_symbol, }) } + + pub fn get_current_search(&self) -> String { + if self.current_view == View::FunctionDiff { + self.mapping_search.clone() + } else { + self.search.clone() + } + } + + fn set_search(&mut self, search: String) { + let search_regex = if search.is_empty() { + None + } else { + RegexBuilder::new(&search).case_insensitive(true).build().ok() + }; + if self.current_view == View::FunctionDiff { + self.mapping_search = search; + self.mapping_search_regex = search_regex; + } else { + self.search = search; + self.search_regex = search_regex; + } + } } struct ResolvedSymbol<'obj> { From f080ee846e189e59dd4f822fa1f1082df19a1d19 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sat, 3 Jan 2026 18:03:25 -0500 Subject: [PATCH 3/3] Make set/get search function names consistent with each other --- objdiff-gui/src/views/symbol_diff.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/objdiff-gui/src/views/symbol_diff.rs b/objdiff-gui/src/views/symbol_diff.rs index f6e1cf9..ef2a683 100644 --- a/objdiff-gui/src/views/symbol_diff.rs +++ b/objdiff-gui/src/views/symbol_diff.rs @@ -273,7 +273,7 @@ impl DiffViewState { self.symbol_state.autoscroll_to_highlighted_symbols = autoscroll; } DiffViewAction::SetSearch(search) => { - self.set_search(search); + self.set_current_search(search); } DiffViewAction::CreateScratch(function_name) => { let Ok(state) = state.read() else { @@ -403,7 +403,7 @@ impl DiffViewState { } } - fn set_search(&mut self, search: String) { + fn set_current_search(&mut self, search: String) { let search_regex = if search.is_empty() { None } else {