From 8485e7ae81cd75b31af755e54dd7e61c1dc34574 Mon Sep 17 00:00:00 2001
From: Nicolas Werner <nicolas.werner@hotmail.de>
Date: Mon, 5 Jun 2023 00:18:17 +0200
Subject: [PATCH] Workaround palette not set on new windows

---
 src/MainWindow.cpp | 14 ++++++++++++++
 src/MainWindow.h   | 13 +++++++++++++
 src/main.cpp       |  3 +++
 3 files changed, 30 insertions(+)

diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp
index 63f20752c..51b23e0f4 100644
--- a/src/MainWindow.cpp
+++ b/src/MainWindow.cpp
@@ -376,6 +376,20 @@ MainWindow::showChatPage()
     emit switchToChatPage();
 }
 
+bool
+NhekoFixupPaletteEventFilter::eventFilter(QObject *obj, QEvent *event)
+{
+    // Workaround for the QGuiApplication palette not being applied to toplevel windows for some
+    // reason?!?
+    if (event->type() == QEvent::ChildAdded &&
+        obj->metaObject()->className() == QStringLiteral("QQuickRootItem")) {
+        for (const auto window : QGuiApplication::topLevelWindows()) {
+            QGuiApplication::postEvent(window, new QEvent(QEvent::ApplicationPaletteChange));
+        }
+    }
+    return false;
+}
+
 void
 MainWindow::closeEvent(QCloseEvent *event)
 {
diff --git a/src/MainWindow.h b/src/MainWindow.h
index 543b0f69a..0a5f94335 100644
--- a/src/MainWindow.h
+++ b/src/MainWindow.h
@@ -37,6 +37,19 @@ class MemberList;
 class ReCaptcha;
 }
 
+class NhekoFixupPaletteEventFilter final : public QObject
+{
+    Q_OBJECT
+
+public:
+    NhekoFixupPaletteEventFilter(QObject *parent)
+      : QObject(parent)
+    {
+    }
+
+    bool eventFilter(QObject *obj, QEvent *event) override;
+};
+
 class MainWindow final : public QQuickView
 {
     Q_OBJECT
diff --git a/src/main.cpp b/src/main.cpp
index 951d53f09..da67ca438 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -309,6 +309,9 @@ main(int argc, char *argv[])
         std::exit(1);
     }
 
+    auto filter = new NhekoFixupPaletteEventFilter(&app);
+    app.installEventFilter(filter);
+
     if (parser.isSet(configName))
         UserSettings::initialize(parser.value(configName));
     else
-- 
GitLab