summaryrefslogtreecommitdiff
path: root/Ladybird/WebContent
diff options
context:
space:
mode:
authorTimothy Flynn <trflynn89@pm.me>2023-04-26 16:46:55 -0400
committerAndreas Kling <kling@serenityos.org>2023-04-27 07:26:05 +0200
commit4dcdc3bd25def54d5411e34aa1da7ead3ef6c3eb (patch)
tree09b6d6044e8188b229481423c0ac9df5b5c3bb25 /Ladybird/WebContent
parentcc86c07f58a941520c545b02edf7e996ee0fba6e (diff)
downloadserenity-4dcdc3bd25def54d5411e34aa1da7ead3ef6c3eb.zip
Ladybird: Prohibit GUI interaction of the WebContent process on macOS
The WebContent process behaves a bit awkwardly on macOS. When we launch the process, we have to create a QGuiApplication to access system fonts. But on macOS, doing so creates an entry in the Dock, and also causes the WebContent to be focused. So if you enter cmd+Q without first focusing the Ladybird GUI, WebContent is closed, while the Ladybird process keeps running.
Diffstat (limited to 'Ladybird/WebContent')
-rw-r--r--Ladybird/WebContent/CMakeLists.txt4
-rw-r--r--Ladybird/WebContent/MacOSSetup.h9
-rw-r--r--Ladybird/WebContent/MacOSSetup.mm15
-rw-r--r--Ladybird/WebContent/main.cpp9
4 files changed, 37 insertions, 0 deletions
diff --git a/Ladybird/WebContent/CMakeLists.txt b/Ladybird/WebContent/CMakeLists.txt
index d8c9c1b780..71c28a143e 100644
--- a/Ladybird/WebContent/CMakeLists.txt
+++ b/Ladybird/WebContent/CMakeLists.txt
@@ -17,6 +17,10 @@ set(WEBCONTENT_SOURCES
main.cpp
)
+if (APPLE)
+ list(APPEND WEBCONTENT_SOURCES MacOSSetup.mm)
+endif()
+
qt_add_executable(WebContent ${WEBCONTENT_SOURCES})
target_include_directories(WebContent PRIVATE ${SERENITY_SOURCE_DIR}/Userland/Services/)
diff --git a/Ladybird/WebContent/MacOSSetup.h b/Ladybird/WebContent/MacOSSetup.h
new file mode 100644
index 0000000000..6125379158
--- /dev/null
+++ b/Ladybird/WebContent/MacOSSetup.h
@@ -0,0 +1,9 @@
+/*
+ * Copyright (c) 2023, Tim Flynn <trflynn89@serenityos.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#pragma once
+
+void prohibit_interaction();
diff --git a/Ladybird/WebContent/MacOSSetup.mm b/Ladybird/WebContent/MacOSSetup.mm
new file mode 100644
index 0000000000..e323c58adf
--- /dev/null
+++ b/Ladybird/WebContent/MacOSSetup.mm
@@ -0,0 +1,15 @@
+/*
+ * Copyright (c) 2023, Tim Flynn <trflynn89@serenityos.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include "MacOSSetup.h"
+#import <AppKit/NSApplication.h>
+
+void prohibit_interaction()
+{
+ // This prevents WebContent from being displayed in the macOS Dock and becoming the focused,
+ // interactable application upon launch.
+ [NSApp setActivationPolicy:NSApplicationActivationPolicyProhibited];
+}
diff --git a/Ladybird/WebContent/main.cpp b/Ladybird/WebContent/main.cpp
index 9b805652cc..b715203079 100644
--- a/Ladybird/WebContent/main.cpp
+++ b/Ladybird/WebContent/main.cpp
@@ -11,6 +11,7 @@
#include "../Utilities.h"
#include "../WebSocketClientManagerLadybird.h"
#include <AK/LexicalPath.h>
+#include <AK/Platform.h>
#include <LibCore/ArgsParser.h>
#include <LibCore/EventLoop.h>
#include <LibCore/LocalServer.h>
@@ -31,6 +32,10 @@
#include <WebContent/PageHost.h>
#include <WebContent/WebDriverConnection.h>
+#if defined(AK_OS_MACOS)
+# include "MacOSSetup.h"
+#endif
+
static ErrorOr<void> load_content_filters();
static ErrorOr<void> load_autoplay_allowlist();
@@ -40,6 +45,10 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
{
QGuiApplication app(arguments.argc, arguments.argv);
+#if defined(AK_OS_MACOS)
+ prohibit_interaction();
+#endif
+
Core::EventLoopManager::install(*new Ladybird::EventLoopManagerQt);
Core::EventLoop event_loop;