From 2b075847a8762f28aa613b38dbb44e06480bbfd5 Mon Sep 17 00:00:00 2001 From: duzenko Date: Sat, 11 Sep 2021 21:02:56 +0300 Subject: [PATCH] Simple filter to allow some menu shortcuts when focus is on a text input --- radiant/eventmanager/GlobalKeyEventFilter.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/radiant/eventmanager/GlobalKeyEventFilter.cpp b/radiant/eventmanager/GlobalKeyEventFilter.cpp index e368abc5f4..fb95f10ac0 100644 --- a/radiant/eventmanager/GlobalKeyEventFilter.cpp +++ b/radiant/eventmanager/GlobalKeyEventFilter.cpp @@ -75,6 +75,21 @@ int GlobalKeyEventFilter::FilterEvent(wxEvent& event) return Event_Skip; } +bool FilterInTextControls( wxKeyEvent& keyEvent ) { + if ( keyEvent.ControlDown() ) { + if ( keyEvent.GetKeyCode() > 32 && keyEvent.GetKeyCode() < 127 ) { + switch ( keyEvent.GetKeyCode() ) { + case 'C':case 'V':case 'X':case 'Y':case 'Z': + return false; + default: + return true; + } + } + } + // For tool windows we let the ESC key propagate, since it's used to de-select stuff. + return keyEvent.GetKeyCode() == WXK_ESCAPE; +} + GlobalKeyEventFilter::EventCheckResult GlobalKeyEventFilter::checkEvent(wxKeyEvent& keyEvent) { // Check if the event object can handle the event @@ -103,9 +118,7 @@ GlobalKeyEventFilter::EventCheckResult GlobalKeyEventFilter::checkEvent(wxKeyEve wxDynamicCast(eventObject, wxComboBox) || wxDynamicCast(eventObject, wxSpinCtrl) || wxDynamicCast(eventObject, wxSpinCtrlDouble)) { - // For tool windows we let the ESC key propagate, since it's used to - // de-select stuff. - return keyEvent.GetKeyCode() == WXK_ESCAPE ? EventShouldBeProcessed : EventShouldBeIgnored; + return FilterInTextControls(keyEvent) ? EventShouldBeProcessed : EventShouldBeIgnored; } // Special handling for our treeviews with type ahead search