浏览代码

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 年之前
父节点
当前提交
d0578bfa32
共有 1 个文件被更改,包括 4 次插入2 次删除
  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);