From 5de087c9032fc56dfb6f3a97403485af8deb88be Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Thu, 28 Nov 2024 17:52:29 -0500 Subject: [PATCH] Fix some hotkeys stealing input from focused widgets e.g. The symbol list was stealing the W/S key presses when typing into the symbol filter text edit. If the user actually wants to use these shortcuts while a widget is focused, they can simply press the escape key to unfocus all widgets and then press the shortcut. --- objdiff-gui/src/hotkeys.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/objdiff-gui/src/hotkeys.rs b/objdiff-gui/src/hotkeys.rs index 723e4a3..4467ccb 100644 --- a/objdiff-gui/src/hotkeys.rs +++ b/objdiff-gui/src/hotkeys.rs @@ -1,20 +1,34 @@ use egui::{style::ScrollAnimation, vec2, Context, Key, Modifiers, PointerButton}; +fn any_widget_focused(ctx: &Context) -> bool { ctx.memory(|mem| mem.focused().is_some()) } + pub fn enter_pressed(ctx: &Context) -> bool { + if any_widget_focused(ctx) { + return false; + } ctx.input_mut(|i| i.key_pressed(Key::Enter) || i.pointer.button_pressed(PointerButton::Extra2)) } pub fn back_pressed(ctx: &Context) -> bool { + if any_widget_focused(ctx) { + return false; + } ctx.input_mut(|i| { i.key_pressed(Key::Backspace) || i.pointer.button_pressed(PointerButton::Extra1) }) } pub fn up_pressed(ctx: &Context) -> bool { + if any_widget_focused(ctx) { + return false; + } ctx.input_mut(|i| i.key_pressed(Key::ArrowUp) || i.key_pressed(Key::W)) } pub fn down_pressed(ctx: &Context) -> bool { + if any_widget_focused(ctx) { + return false; + } ctx.input_mut(|i| i.key_pressed(Key::ArrowDown) || i.key_pressed(Key::S)) } @@ -44,12 +58,18 @@ pub fn check_scroll_hotkeys(ui: &mut egui::Ui, include_small_increments: bool) { } pub fn consume_up_key(ctx: &Context) -> bool { + if any_widget_focused(ctx) { + return false; + } ctx.input_mut(|i| { i.consume_key(Modifiers::NONE, Key::ArrowUp) || i.consume_key(Modifiers::NONE, Key::W) }) } pub fn consume_down_key(ctx: &Context) -> bool { + if any_widget_focused(ctx) { + return false; + } ctx.input_mut(|i| { i.consume_key(Modifiers::NONE, Key::ArrowDown) || i.consume_key(Modifiers::NONE, Key::S) })