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.
This commit is contained in:
Andreas Kling 2020-04-24 14:14:10 +02:00
parent 896decd4d5
commit d0578bfa32
Notes: sideshowbarker 2024-07-19 07:20:40 +09:00

View file

@ -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);