From 702904f6b3d242f6faded552fd1444d7ed942762 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 21 Jun 2026 00:33:48 +0200 Subject: [PATCH] UI/Qt: Restore AppKit focus before focusing location edit After web content has focus on macOS, its native QRhiWidget can remain the AppKit first responder even after Qt focuses the location edit. Make the top-level Qt content view first responder before focusing the location edit so keyboard input returns to chrome. --- UI/Qt/MacWindow.h | 1 + UI/Qt/MacWindow.mm | 17 +++++++++++++++++ UI/Qt/Tab.cpp | 6 ++++++ 3 files changed, 24 insertions(+) diff --git a/UI/Qt/MacWindow.h b/UI/Qt/MacWindow.h index 148e566097..3253923d16 100644 --- a/UI/Qt/MacWindow.h +++ b/UI/Qt/MacWindow.h @@ -17,6 +17,7 @@ namespace Ladybird { void set_rounded_window_corners(QWidget&, bool enabled, double radius, QColor const& background_color); void install_always_active_window_control_hover_tracking(QWidget&, void (*hover_changed)(QWidget*)); void install_appkit_event_capture(); +void make_appkit_window_first_responder(QWidget&); bool start_appkit_window_drag(QWidget&); #endif diff --git a/UI/Qt/MacWindow.mm b/UI/Qt/MacWindow.mm index bf7309aa5c..7b2b5b16d8 100644 --- a/UI/Qt/MacWindow.mm +++ b/UI/Qt/MacWindow.mm @@ -176,6 +176,23 @@ void install_always_active_window_control_hover_tracking(QWidget& widget, void ( #endif } +void make_appkit_window_first_responder(QWidget& widget) +{ + auto* window_widget = widget.window(); + if (!window_widget) + return; + + auto* view = reinterpret_cast(window_widget->winId()); + if (!view) + return; + + auto* window = view.window; + if (!window) + return; + + [window makeFirstResponder:view]; +} + bool start_appkit_window_drag(QWidget& widget) { auto* window_widget = widget.window(); diff --git a/UI/Qt/Tab.cpp b/UI/Qt/Tab.cpp index dac8dbf3b5..d922cde0be 100644 --- a/UI/Qt/Tab.cpp +++ b/UI/Qt/Tab.cpp @@ -16,6 +16,9 @@ #include #include #include +#if defined(AK_OS_MACOS) +# include +#endif #include #include #include @@ -598,6 +601,9 @@ Tab::~Tab() = default; void Tab::focus_location_editor() { +#if defined(AK_OS_MACOS) + make_appkit_window_first_responder(*m_location_edit); +#endif m_location_edit->setFocus(); m_location_edit->selectAll(); m_location_edit->show_autocomplete();