Explorar el Código

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 hace 5 años
padre
commit
d0578bfa32
Se han modificado 1 ficheros con 4 adiciones y 2 borrados
  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);