From 7d6616669c154b6792be1b8e0727673d09e08106 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Fri, 5 Dec 2025 10:20:44 -0500 Subject: [PATCH] LibWebView+UI: Move the UI event loops to the UI folder Once upon a time, we needed the UI-specific event loops outside of the UI process. This is no longer the case. Let's move the event loops back to the UI folder to remove the awkward interface library we were left with. --- Libraries/LibWebView/CMakeLists.txt | 24 ------------------- UI/AppKit/Application/Application.mm | 4 ++-- .../EventLoopImplementationMacOS.h | 9 ++++--- .../EventLoopImplementationMacOS.mm | 6 ++--- UI/AppKit/CMakeLists.txt | 1 + UI/CMakeLists.txt | 2 +- UI/Qt/Application.cpp | 6 ++--- UI/Qt/CMakeLists.txt | 2 ++ .../Qt}/EventLoopImplementationQt.cpp | 6 ++--- .../Qt}/EventLoopImplementationQt.h | 2 +- .../EventLoopImplementationQtEventTarget.cpp | 6 ++--- .../EventLoopImplementationQtEventTarget.h | 2 +- 12 files changed, 24 insertions(+), 46 deletions(-) rename {Libraries/LibWebView/EventLoop => UI/AppKit/Application}/EventLoopImplementationMacOS.h (83%) rename {Libraries/LibWebView/EventLoop => UI/AppKit/Application}/EventLoopImplementationMacOS.mm (99%) rename {Libraries/LibWebView/EventLoop => UI/Qt}/EventLoopImplementationQt.cpp (98%) rename {Libraries/LibWebView/EventLoop => UI/Qt}/EventLoopImplementationQt.h (99%) rename {Libraries/LibWebView/EventLoop => UI/Qt}/EventLoopImplementationQtEventTarget.cpp (63%) rename {Libraries/LibWebView/EventLoop => UI/Qt}/EventLoopImplementationQtEventTarget.h (93%) diff --git a/Libraries/LibWebView/CMakeLists.txt b/Libraries/LibWebView/CMakeLists.txt index b4f469c7a0d..659952be070 100644 --- a/Libraries/LibWebView/CMakeLists.txt +++ b/Libraries/LibWebView/CMakeLists.txt @@ -80,30 +80,6 @@ if (HAS_FONTCONFIG) target_link_libraries(LibWebView PRIVATE Fontconfig::Fontconfig) endif() -add_library(LibWebViewPlatform INTERFACE) -if (ENABLE_QT) - add_library(LibWebViewQt STATIC - EventLoop/EventLoopImplementationQt.cpp - EventLoop/EventLoopImplementationQtEventTarget.cpp - ) - - set_target_properties(LibWebViewQt PROPERTIES AUTOMOC ON AUTORCC OFF AUTOUIC OFF) - find_package(Qt6 REQUIRED COMPONENTS Core) - target_link_libraries(LibWebViewQt PRIVATE LibCore) - target_link_libraries(LibWebViewQt PUBLIC Qt::Core) - if (WIN32) - find_package(pthread REQUIRED) - target_include_directories(LibWebViewQt PRIVATE $) - endif() - target_link_libraries(LibWebViewPlatform INTERFACE LibWebViewQt) -elseif (APPLE) - add_library(LibWebViewCocoa STATIC - EventLoop/EventLoopImplementationMacOS.mm - ) - target_link_libraries(LibWebViewCocoa PUBLIC "-framework Cocoa") - target_link_libraries(LibWebViewPlatform INTERFACE LibWebViewCocoa) -endif() - if (ENABLE_INSTALL_HEADERS) foreach(header ${GENERATED_SOURCES}) get_filename_component(extension ${header} EXT) diff --git a/UI/AppKit/Application/Application.mm b/UI/AppKit/Application/Application.mm index 760dd12c3ad..7d6155a625b 100644 --- a/UI/AppKit/Application/Application.mm +++ b/UI/AppKit/Application/Application.mm @@ -4,9 +4,9 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include #include #include -#include #include #import @@ -26,7 +26,7 @@ Application::Application() = default; NonnullOwnPtr Application::create_platform_event_loop() { if (!browser_options().headless_mode.has_value()) { - Core::EventLoopManager::install(*new WebView::EventLoopManagerMacOS); + Core::EventLoopManager::install(*new EventLoopManagerMacOS); [::Application sharedApplication]; } diff --git a/Libraries/LibWebView/EventLoop/EventLoopImplementationMacOS.h b/UI/AppKit/Application/EventLoopImplementationMacOS.h similarity index 83% rename from Libraries/LibWebView/EventLoop/EventLoopImplementationMacOS.h rename to UI/AppKit/Application/EventLoopImplementationMacOS.h index 71e00145f99..d501ce90f5f 100644 --- a/Libraries/LibWebView/EventLoop/EventLoopImplementationMacOS.h +++ b/UI/AppKit/Application/EventLoopImplementationMacOS.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023-2024, Tim Flynn + * Copyright (c) 2023-2025, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ @@ -9,11 +9,10 @@ #include #include #include -#include -namespace WebView { +namespace Ladybird { -class WEBVIEW_API EventLoopManagerMacOS final : public Core::EventLoopManager { +class EventLoopManagerMacOS final : public Core::EventLoopManager { public: virtual NonnullOwnPtr make_implementation() override; @@ -29,7 +28,7 @@ public: virtual void unregister_signal(int) override; }; -class WEBVIEW_API EventLoopImplementationMacOS final : public Core::EventLoopImplementation { +class EventLoopImplementationMacOS final : public Core::EventLoopImplementation { public: // FIXME: This currently only manages the main NSApp event loop, as that is all we currently // interact with. When we need multiple event loops, or an event loop that isn't the diff --git a/Libraries/LibWebView/EventLoop/EventLoopImplementationMacOS.mm b/UI/AppKit/Application/EventLoopImplementationMacOS.mm similarity index 99% rename from Libraries/LibWebView/EventLoop/EventLoopImplementationMacOS.mm rename to UI/AppKit/Application/EventLoopImplementationMacOS.mm index 3ef870c8ccb..7564dc6135c 100644 --- a/Libraries/LibWebView/EventLoop/EventLoopImplementationMacOS.mm +++ b/UI/AppKit/Application/EventLoopImplementationMacOS.mm @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023-2024, Tim Flynn + * Copyright (c) 2023-2025, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ @@ -9,11 +9,11 @@ #include #include #include +#include #include #include #include #include -#include #import #import @@ -22,7 +22,7 @@ #include #include -namespace WebView { +namespace Ladybird { struct ThreadData; static thread_local OwnPtr s_this_thread_data; diff --git a/UI/AppKit/CMakeLists.txt b/UI/AppKit/CMakeLists.txt index 9e9349db53d..08e2a95840e 100644 --- a/UI/AppKit/CMakeLists.txt +++ b/UI/AppKit/CMakeLists.txt @@ -1,6 +1,7 @@ add_library(ladybird_impl STATIC Application/Application.mm Application/ApplicationDelegate.mm + Application/EventLoopImplementationMacOS.mm Interface/Autocomplete.mm Interface/Event.mm Interface/InfoBar.mm diff --git a/UI/CMakeLists.txt b/UI/CMakeLists.txt index d02cec2d0c5..ad7a0b3a6e9 100644 --- a/UI/CMakeLists.txt +++ b/UI/CMakeLists.txt @@ -68,7 +68,7 @@ else() set(LADYBIRD_TARGET ladybird PRIVATE) endif() -set(LADYBIRD_LIBS AK LibCore LibFileSystem LibGfx LibImageDecoderClient LibIPC LibJS LibMain LibWeb LibWebView LibWebViewPlatform LibRequests LibURL) +set(LADYBIRD_LIBS AK LibCore LibFileSystem LibGfx LibImageDecoderClient LibIPC LibJS LibMain LibWeb LibWebView LibRequests LibURL) target_link_libraries(${LADYBIRD_TARGET} PRIVATE ${LADYBIRD_LIBS}) target_link_libraries(${LADYBIRD_TARGET} PRIVATE OpenSSL::Crypto OpenSSL::SSL) diff --git a/UI/Qt/Application.cpp b/UI/Qt/Application.cpp index f213276a651..7eec98f0c2f 100644 --- a/UI/Qt/Application.cpp +++ b/UI/Qt/Application.cpp @@ -5,9 +5,9 @@ */ #include -#include #include #include +#include #include #include @@ -102,14 +102,14 @@ void Application::create_platform_options(WebView::BrowserOptions&, WebView::Req NonnullOwnPtr Application::create_platform_event_loop() { if (!browser_options().headless_mode.has_value()) { - Core::EventLoopManager::install(*new WebView::EventLoopManagerQt); + Core::EventLoopManager::install(*new EventLoopManagerQt); m_application = make(arguments()); } auto event_loop = WebView::Application::create_platform_event_loop(); if (!browser_options().headless_mode.has_value()) - static_cast(event_loop->impl()).set_main_loop(); + static_cast(event_loop->impl()).set_main_loop(); return event_loop; } diff --git a/UI/Qt/CMakeLists.txt b/UI/Qt/CMakeLists.txt index 927bfe3d995..7449acb7aff 100644 --- a/UI/Qt/CMakeLists.txt +++ b/UI/Qt/CMakeLists.txt @@ -3,6 +3,8 @@ target_sources(ladybird PRIVATE Application.cpp Autocomplete.cpp BrowserWindow.cpp + EventLoopImplementationQt.cpp + EventLoopImplementationQtEventTarget.cpp FindInPageWidget.cpp Icon.cpp LocationEdit.cpp diff --git a/Libraries/LibWebView/EventLoop/EventLoopImplementationQt.cpp b/UI/Qt/EventLoopImplementationQt.cpp similarity index 98% rename from Libraries/LibWebView/EventLoop/EventLoopImplementationQt.cpp rename to UI/Qt/EventLoopImplementationQt.cpp index 08e81789bc4..6bab1c37570 100644 --- a/Libraries/LibWebView/EventLoop/EventLoopImplementationQt.cpp +++ b/UI/Qt/EventLoopImplementationQt.cpp @@ -16,8 +16,8 @@ #include #include #include -#include -#include +#include +#include #include #include @@ -26,7 +26,7 @@ #include #include -namespace WebView { +namespace Ladybird { struct ThreadData; static thread_local OwnPtr s_this_thread_data; diff --git a/Libraries/LibWebView/EventLoop/EventLoopImplementationQt.h b/UI/Qt/EventLoopImplementationQt.h similarity index 99% rename from Libraries/LibWebView/EventLoop/EventLoopImplementationQt.h rename to UI/Qt/EventLoopImplementationQt.h index 59a7298a8b8..1b25b16ed51 100644 --- a/Libraries/LibWebView/EventLoop/EventLoopImplementationQt.h +++ b/UI/Qt/EventLoopImplementationQt.h @@ -14,7 +14,7 @@ class QEvent; class QEventLoop; class QSocketNotifier; -namespace WebView { +namespace Ladybird { class EventLoopImplementationQt; class EventLoopImplementationQtEventTarget; diff --git a/Libraries/LibWebView/EventLoop/EventLoopImplementationQtEventTarget.cpp b/UI/Qt/EventLoopImplementationQtEventTarget.cpp similarity index 63% rename from Libraries/LibWebView/EventLoop/EventLoopImplementationQtEventTarget.cpp rename to UI/Qt/EventLoopImplementationQtEventTarget.cpp index 2bdca22f9b5..39d291f519b 100644 --- a/Libraries/LibWebView/EventLoop/EventLoopImplementationQtEventTarget.cpp +++ b/UI/Qt/EventLoopImplementationQtEventTarget.cpp @@ -4,10 +4,10 @@ * SPDX-License-Identifier: BSD-2-Clause */ -#include -#include +#include +#include -namespace WebView { +namespace Ladybird { bool EventLoopImplementationQtEventTarget::event(QEvent* event) { diff --git a/Libraries/LibWebView/EventLoop/EventLoopImplementationQtEventTarget.h b/UI/Qt/EventLoopImplementationQtEventTarget.h similarity index 93% rename from Libraries/LibWebView/EventLoop/EventLoopImplementationQtEventTarget.h rename to UI/Qt/EventLoopImplementationQtEventTarget.h index 4bc251e1915..b38344eb89a 100644 --- a/Libraries/LibWebView/EventLoop/EventLoopImplementationQtEventTarget.h +++ b/UI/Qt/EventLoopImplementationQtEventTarget.h @@ -9,7 +9,7 @@ #include #include -namespace WebView { +namespace Ladybird { class EventLoopImplementationQtEventTarget final : public QObject { Q_OBJECT