summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorq234rty <q23456yuiop@gmail.com>2023-12-16 18:04:15 +0800
committerq234rty <q23456yuiop@gmail.com>2023-12-17 01:33:08 +0800
commitd372158dde5161d1fa2ad1e8d8026f7906d369f3 (patch)
tree1d7a6d06829e7ec9986a15c094e5e5be70037ca4 /src
parentAdd windows code signing (diff)
downloadnheko-d372158dde5161d1fa2ad1e8d8026f7906d369f3.tar.xz
Trigger less QEvent::ApplicationPaletteChange
The event seems to be very expensive on certain platform theme plugins.

Fixes #1639
Diffstat (limited to 'src')
-rw-r--r--src/MainWindow.cpp5
-rw-r--r--src/MainWindow.h3
2 files changed, 8 insertions, 0 deletions
diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp
index b7834cba..a4a0eff0 100644
--- a/src/MainWindow.cpp
+++ b/src/MainWindow.cpp
@@ -201,9 +201,14 @@ NhekoFixupPaletteEventFilter::eventFilter(QObject *obj, QEvent *event)
     // reason?!?
     if (event->type() == QEvent::ChildAdded &&
         obj->metaObject()->className() == QStringLiteral("QQuickRootItem")) {
+        QSet<QWindow *> newWindows;
         for (const auto window : QGuiApplication::topLevelWindows()) {
+            newWindows.insert(window);
+            if (m_postedWindows.contains(window))
+                continue;
             QGuiApplication::postEvent(window, new QEvent(QEvent::ApplicationPaletteChange));
         }
+        m_postedWindows.swap(newWindows);
     }
     return false;
 }
diff --git a/src/MainWindow.h b/src/MainWindow.h
index c493b5b2..928446aa 100644
--- a/src/MainWindow.h
+++ b/src/MainWindow.h
@@ -45,6 +45,9 @@ public:
     }
 
     bool eventFilter(QObject *obj, QEvent *event) override;
+
+private:
+    QSet<QWindow *> m_postedWindows;
 };
 
 class MainWindow : public QQuickView