From d0578bfa32b188bb33f6e600bf62a984aed9d51e Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 24 Apr 2020 14:14:10 +0200 Subject: [PATCH] LibGUI: Search the entire focus chain for shortcut actions Instead of only looking in the focused widget, we now also look in the ancestor chain of that widget for any ancestor with a registered action for the given shortcut. This makes it possible for parent widgets to capture action activations while one of their children is focused. --- Libraries/LibGUI/WindowServerConnection.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Libraries/LibGUI/WindowServerConnection.cpp b/Libraries/LibGUI/WindowServerConnection.cpp index 90623e18dd..e48158ec90 100644 --- a/Libraries/LibGUI/WindowServerConnection.cpp +++ b/Libraries/LibGUI/WindowServerConnection.cpp @@ -148,8 +148,10 @@ void WindowServerConnection::handle(const Messages::WindowClient::KeyDown& messa Action* action = nullptr; - if (auto* focused_widget = window->focused_widget()) - action = focused_widget->action_for_key_event(*key_event); + if (auto* focused_widget = window->focused_widget()) { + for (auto* widget = focused_widget; widget && !action; widget = widget->parent_widget()) + action = focused_widget->action_for_key_event(*key_event); + } if (!action) action = window->action_for_key_event(*key_event);