소스 검색

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