Browse Source

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.
Andreas Kling 5 years ago
parent
commit
d0578bfa32
1 changed files with 4 additions and 2 deletions
  1. 4 2
      Libraries/LibGUI/WindowServerConnection.cpp

+ 4 - 2
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);