From 14cc009c61714273fce8f6faf5b67b961a261795 Mon Sep 17 00:00:00 2001
From: SeeLook <seelook@gmail.com>
Date: Sat, 8 Feb 2025 17:08:12 +0100
Subject: [PATCH] Migrate to QEvent::ApplicationPaletteChanged

---
 src/charts/qml/ChartTipMelody.qml      |  1 +
 src/charts/tbarchartdelegate.cpp       | 14 +++++++++-----
 src/charts/tbarchartdelegate.h         |  5 +++++
 src/charts/tlinchartdelegate.cpp       | 13 +++++++++----
 src/charts/tlinchartdelegate.h         |  3 +++
 src/libs/core/score/tbeamobject.cpp    | 22 ++++++++++++++--------
 src/libs/core/score/tbeamobject.h      |  3 +++
 src/libs/core/score/tmeasureobject.cpp | 17 +++++++++++------
 src/libs/core/score/tmeasureobject.h   |  3 +++
 src/libs/core/score/tnoteitem.cpp      | 12 +++++++++---
 src/libs/core/score/tnoteitem.h        |  3 +++
 src/libs/core/score/tscoreobject.cpp   |  6 +++---
 src/libs/core/score/tstafflines.cpp    | 13 +++++++++----
 src/libs/core/score/tstafflines.h      |  3 +++
 src/libs/core/tnootkaqml.cpp           | 14 ++++++++++----
 src/libs/core/tnootkaqml.h             |  4 ++++
 src/main/tmainscoreobject.cpp          | 20 ++++++++++++--------
 src/main/tmainscoreobject.h            |  4 +++-
 src/main/tnameitem.cpp                 | 21 +++++++++++++++++----
 src/main/tnameitem.h                   | 12 +++++-------
 20 files changed, 136 insertions(+), 57 deletions(-)

diff --git a/src/charts/qml/ChartTipMelody.qml b/src/charts/qml/ChartTipMelody.qml
index a0d758b4..89006fca 100644
--- a/src/charts/qml/ChartTipMelody.qml
+++ b/src/charts/qml/ChartTipMelody.qml
@@ -4,6 +4,7 @@
 
 import "../"
 import "../score"
+import Nootka
 import Nootka.Charts 1.0
 import QtQuick 2.12
 import Score 1.0
diff --git a/src/charts/tbarchartdelegate.cpp b/src/charts/tbarchartdelegate.cpp
index 95e339d6..d2080fa2 100644
--- a/src/charts/tbarchartdelegate.cpp
+++ b/src/charts/tbarchartdelegate.cpp
@@ -38,12 +38,8 @@ QString trStyle(QColor c)
 TbarChartDelegate::TbarChartDelegate(QQuickItem *parent)
     : QQuickPaintedItem(parent)
 {
-    //   setRenderTarget(QQuickPaintedItem::FramebufferObject);
     setAntialiasing(true);
-
-    connect(qApp, &QGuiApplication::paletteChanged, this, [=] {
-        update();
-    });
+    qApp->installEventFilter(this);
 }
 
 TbarChartDelegate::~TbarChartDelegate()
@@ -176,3 +172,11 @@ void TbarChartDelegate::paint(QPainter *painter)
     painter->setBrush(QBrush(grad));
     painter->drawRoundedRect(rect, width() / 8.0, width() / 8.0);
 }
+
+bool TbarChartDelegate::eventFilter(QObject *obj, QEvent *event)
+{
+    if (obj == qApp && event->type() == QEvent::ApplicationPaletteChange) {
+        update();
+    }
+    return QObject::eventFilter(obj, event);
+}
diff --git a/src/charts/tbarchartdelegate.h b/src/charts/tbarchartdelegate.h
index 256ed601..d25e1e74 100644
--- a/src/charts/tbarchartdelegate.h
+++ b/src/charts/tbarchartdelegate.h
@@ -68,6 +68,11 @@ signals:
     void groupNrChanged();
     void examChanged();
 
+protected:
+#if !defined(Q_OS_ANDROID)
+    virtual bool eventFilter(QObject *obj, QEvent *event) override;
+#endif
+
 private:
     TchartItem *m_chart = nullptr;
     bool m_hovered = false;
diff --git a/src/charts/tlinchartdelegate.cpp b/src/charts/tlinchartdelegate.cpp
index 3f6aad09..f0697ad3 100644
--- a/src/charts/tlinchartdelegate.cpp
+++ b/src/charts/tlinchartdelegate.cpp
@@ -45,19 +45,16 @@
 TlinChartDelegate::TlinChartDelegate(QQuickItem *parent)
     : QQuickPaintedItem(parent)
 {
-    //   setRenderTarget(QQuickPaintedItem::FramebufferObject);
     setAntialiasing(true);
     setAcceptHoverEvents(true);
 
     m_qInf = new TtipInfo();
 
-    connect(qApp, &QGuiApplication::paletteChanged, this, [=] {
-        update();
-    });
     connect(this, &QQuickItem::heightChanged, this, [=] {
         calcProgressRangeY();
         emit pointYChanged();
     });
+    qApp->installEventFilter(this);
 }
 
 TlinChartDelegate::~TlinChartDelegate()
@@ -398,3 +395,11 @@ void TlinChartDelegate::calcProgressRangeY()
         m_thisAverY = 0.0;
     }
 }
+
+bool TlinChartDelegate::eventFilter(QObject *obj, QEvent *event)
+{
+    if (obj == qApp && event->type() == QEvent::ApplicationPaletteChange) {
+        update();
+    }
+    return QObject::eventFilter(obj, event);
+}
diff --git a/src/charts/tlinchartdelegate.h b/src/charts/tlinchartdelegate.h
index 3cdceeec..860b8539 100644
--- a/src/charts/tlinchartdelegate.h
+++ b/src/charts/tlinchartdelegate.h
@@ -110,6 +110,9 @@ protected:
     void hoverEnterEvent(QHoverEvent *e) override;
     void hoverMoveEvent(QHoverEvent *e) override;
     void hoverLeaveEvent(QHoverEvent *) override;
+#if !defined(Q_OS_ANDROID)
+    virtual bool eventFilter(QObject *obj, QEvent *event) override;
+#endif
 
 private:
     TchartItem *m_chart = nullptr;
diff --git a/src/libs/core/score/tbeamobject.cpp b/src/libs/core/score/tbeamobject.cpp
index 589600ba..afb55ac9 100644
--- a/src/libs/core/score/tbeamobject.cpp
+++ b/src/libs/core/score/tbeamobject.cpp
@@ -62,19 +62,17 @@ TbeamObject::TbeamObject(TnotePair *sn, TmeasureObject *m)
     setAntialiasing(true);
     addNote(sn);
     setParent(m_measure->score());
-    connect(qApp, &QGuiApplication::paletteChanged, this, [=] {
-        update();
-    });
     connect(this, &QQuickPaintedItem::visibleChanged, this, [=] {
         if (isVisible() && count() > 1)
             drawBeam();
     });
+    qApp->installEventFilter(this);
 }
 
 TbeamObject::~TbeamObject()
 {
     //   qDebug() << "     [BEAM] deleted of id" << (m_notes.isEmpty() ? -1 : first()->index());
-    for (TnotePair *np : qAsConst(m_notes)) {
+    for (TnotePair *np : std::as_const(m_notes)) {
         np->addChange(TnotePair::e_beamChanged);
         np->setBeam(nullptr);
         //     resetBeam(np);
@@ -127,7 +125,7 @@ void TbeamObject::prepareBeam()
     int stemDirStrength = 0;
     bool stemsUpPossible = true;
     qreal hiNote = 99.0, loNote = 0.0;
-    for (TnotePair *np : qAsConst(m_notes)) {
+    for (TnotePair *np : std::as_const(m_notes)) {
         stemDirStrength += np->item()->notePosY()
             - (m_measure->staff()->upperLine()
                + (m_measure->score()->isPianoStaff() && np->item()->notePosY() > m_measure->staff()->upperLine() + 13.0 ? 26.0 : 4.0));
@@ -150,7 +148,7 @@ void TbeamObject::prepareBeam()
         if ((allStemsDown && stemTop < upperMidLine) || (!allStemsDown && stemTop > upperMidLine))
             stemTop = upperMidLine; // keep beam on staff middle line
     }
-    for (TnotePair *np : qAsConst(m_notes)) {
+    for (TnotePair *np : std::as_const(m_notes)) {
         np->note()->rtm.setStemDown(allStemsDown);
         np->addChange(TnotePair::e_stemDirChanged);
         np->item()->setStemHeight(qAbs(np->item()->notePosY() - stemTop));
@@ -223,7 +221,7 @@ bool TbeamObject::removeNote(TnotePair *np)
 {
     bool deleteBeam = false;
     int noteId = m_notes.indexOf(np);
-    if (noteId == -1) { // TODO remove this if does not occur
+    if (noteId == -1) {
         qDebug() << "     [BEAM] of note id" << first()->index() << "has no note to remove";
         return false;
     }
@@ -293,7 +291,7 @@ void TbeamObject::setMeasure(TmeasureObject *m)
 void TbeamObject::deleteBeam()
 {
     m_measure->score()->storeBeam(this);
-    for (TnotePair *np : qAsConst(m_notes)) {
+    for (TnotePair *np : std::as_const(m_notes)) {
         resetBeam(np);
     }
     m_16beams.clear();
@@ -302,6 +300,14 @@ void TbeamObject::deleteBeam()
     m_measure = nullptr;
 }
 
+bool TbeamObject::eventFilter(QObject *obj, QEvent *event)
+{
+    if (obj == qApp && event->type() == QEvent::ApplicationPaletteChange) {
+        update();
+    }
+    return QObject::eventFilter(obj, event);
+}
+
 void TbeamObject::resetBeam(TnotePair *noteToRemove)
 {
     noteToRemove->note()->rtm.setBeam(Trhythm::e_noBeam); // restore beams
diff --git a/src/libs/core/score/tbeamobject.h b/src/libs/core/score/tbeamobject.h
index 1536c250..5706ffcd 100644
--- a/src/libs/core/score/tbeamobject.h
+++ b/src/libs/core/score/tbeamobject.h
@@ -95,6 +95,9 @@ protected:
     void setMeasure(TmeasureObject *m);
 
     void deleteBeam();
+#if !defined(Q_OS_ANDROID)
+    virtual bool eventFilter(QObject *obj, QEvent *event) override;
+#endif
 
 private:
     void resetBeam(TnotePair *noteToRemove);
diff --git a/src/libs/core/score/tmeasureobject.cpp b/src/libs/core/score/tmeasureobject.cpp
index 708b7cf6..c906a9d5 100644
--- a/src/libs/core/score/tmeasureobject.cpp
+++ b/src/libs/core/score/tmeasureobject.cpp
@@ -51,10 +51,7 @@ TmeasureObject::TmeasureObject(int nr, TscoreObject *parent)
     m_duration = m_score->meter()->duration();
     m_free = m_duration;
 
-    connect(qApp, &QGuiApplication::paletteChanged, this, [=] {
-        if (m_barLine)
-            m_barLine->setProperty("color", qApp->palette().text().color());
-    });
+    qApp->installEventFilter(this);
 }
 
 TmeasureObject::~TmeasureObject()
@@ -74,7 +71,7 @@ void TmeasureObject::setStaff(TstaffItem *st)
 {
     if (m_staff != st) {
         m_staff = st;
-        for (TnotePair *np : qAsConst(m_notes))
+        for (TnotePair *np : std::as_const(m_notes))
             np->item()->setStaff(m_staff);
     }
 }
@@ -178,7 +175,7 @@ void TmeasureObject::insertNote(TnoteItem *afterItem)
         // cut note duration if it is longer than possible measure duration starting from the item
         auto newRtmList = Trhythm::resolve(workDur > possibleDur ? possibleDur : workDur);
         Tpairs nl;
-        for (Trhythm rtm : qAsConst(newRtmList)) {
+        for (Trhythm rtm : std::as_const(newRtmList)) {
             Tnote newNote(0, 0, 0, Trhythm(rtm.rhythm(), true));
             auto np = m_score->insertSilently(afterItem->index(), newNote, this);
             m_notes.removeAt(afterIdInBar);
@@ -620,6 +617,14 @@ void TmeasureObject::insertSilently(int id, TnotePair *np)
         np->item()->setNoteNameVisible(true);
 }
 
+bool TmeasureObject::eventFilter(QObject *obj, QEvent *event)
+{
+    if (obj == qApp && event->type() == QEvent::ApplicationPaletteChange) {
+        if (m_barLine)
+            m_barLine->setProperty("color", qApp->palette().text().color());
+    }
+    return QObject::eventFilter(obj, event);
+}
 // #################################################################################################
 // ###################              PRIVATE             ############################################
 // #################################################################################################
diff --git a/src/libs/core/score/tmeasureobject.h b/src/libs/core/score/tmeasureobject.h
index 80c35ff9..8cd3e187 100644
--- a/src/libs/core/score/tmeasureobject.h
+++ b/src/libs/core/score/tmeasureobject.h
@@ -196,6 +196,9 @@ protected:
      * squeezes extra note @p np silently, without invoking visual changes
      */
     void insertSilently(int id, TnotePair *np);
+#if !defined(Q_OS_ANDROID)
+    virtual bool eventFilter(QObject *obj, QEvent *event) override;
+#endif
 
 private:
     void clearAccidState();
diff --git a/src/libs/core/score/tnoteitem.cpp b/src/libs/core/score/tnoteitem.cpp
index 0c579397..e54ff3b3 100644
--- a/src/libs/core/score/tnoteitem.cpp
+++ b/src/libs/core/score/tnoteitem.cpp
@@ -102,9 +102,7 @@ TnoteItem::TnoteItem(TstaffItem *staffObj, TnotePair *wrapper)
     setAcceptedMouseButtons(Qt::LeftButton | Qt::RightButton);
 
     updateNoteHead();
-    connect(qApp, &QGuiApplication::paletteChanged, this, [=] {
-        setColor(qApp->palette().text().color());
-    });
+    qApp->installEventFilter(this);
 }
 
 TnoteItem::~TnoteItem()
@@ -944,3 +942,11 @@ void TnoteItem::checkAddLinesVisibility()
         m_underLoLines[1]->setVisible(v && m_notePosY >= staff()->upperLine() + 34.0);
     }
 }
+
+bool TnoteItem::eventFilter(QObject *obj, QEvent *event)
+{
+    if (obj == qApp && event->type() == QEvent::ApplicationPaletteChange) {
+        setColor(qApp->palette().text().color());
+    }
+    return QObject::eventFilter(obj, event);
+}
diff --git a/src/libs/core/score/tnoteitem.h b/src/libs/core/score/tnoteitem.h
index 08b8a4d3..400f2b83 100644
--- a/src/libs/core/score/tnoteitem.h
+++ b/src/libs/core/score/tnoteitem.h
@@ -213,6 +213,9 @@ protected:
     void mousePressEvent(QMouseEvent *event) override;
     void mouseReleaseEvent(QMouseEvent *event) override;
     void mouseMoveEvent(QMouseEvent *event) override;
+#if !defined(Q_OS_ANDROID)
+    virtual bool eventFilter(QObject *obj, QEvent *event) override;
+#endif
 
 private:
     TstaffItem *m_staff;
diff --git a/src/libs/core/score/tscoreobject.cpp b/src/libs/core/score/tscoreobject.cpp
index 17b5352a..bc007946 100644
--- a/src/libs/core/score/tscoreobject.cpp
+++ b/src/libs/core/score/tscoreobject.cpp
@@ -210,7 +210,7 @@ void TscoreObject::setKeySignature(int k)
                     m_accidInKeyArray[(startVal + sign * (i * 4)) % 7] = 0;
             }
             m_keyChanged = true;
-            for (TmeasureObject *m : qAsConst(m_measures))
+            for (TmeasureObject *m : std::as_const(m_measures))
                 m->keySignatureChanged();
             if (notesCount() > 0)
                 adjustScoreWidth();
@@ -1605,11 +1605,11 @@ void TscoreObject::clearScorePrivate()
         setSelectedItem(nullptr);
         m_activeBarNr = -1;
         changeActiveNote(nullptr);
-        for (TnotePair *s : qAsConst(m_segments)) {
+        for (TnotePair *s : std::as_const(m_segments)) {
             s->flush();
             m_spareSegments << s;
         }
-        for (TmeasureObject *m : qAsConst(m_measures)) {
+        for (TmeasureObject *m : std::as_const(m_measures)) {
             m->flush();
             m_spareMeasures << m;
         }
diff --git a/src/libs/core/score/tstafflines.cpp b/src/libs/core/score/tstafflines.cpp
index a3675dfb..7a0f3dd5 100644
--- a/src/libs/core/score/tstafflines.cpp
+++ b/src/libs/core/score/tstafflines.cpp
@@ -35,9 +35,7 @@ TstaffLines::TstaffLines(QQuickItem *parent)
     setRenderTarget(QQuickPaintedItem::FramebufferObject);
     setAntialiasing(true);
     setHeight(9.0);
-    connect(qApp, &QGuiApplication::paletteChanged, this, [=] {
-        update();
-    });
+    qApp->installEventFilter(this);
 }
 
 void TstaffLines::setStaffScale(qreal stScale)
@@ -64,9 +62,16 @@ void TstaffLines::paint(QPainter *painter)
 
 void TstaffLines::geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry)
 {
-    // QQuickPaintedItem::geometryChange(newGeometry, oldGeometry);
     if (newGeometry.width() != oldGeometry.width() || newGeometry.height() != oldGeometry.height()) {
         setTextureSize(QSize(qRound(m_staffScale * newGeometry.width()), qRound(newGeometry.height() * m_staffScale)));
         update();
     }
 }
+
+bool TstaffLines::eventFilter(QObject *obj, QEvent *event)
+{
+    if (obj == qApp && event->type() == QEvent::ApplicationPaletteChange) {
+        update();
+    }
+    return QObject::eventFilter(obj, event);
+}
diff --git a/src/libs/core/score/tstafflines.h b/src/libs/core/score/tstafflines.h
index 0b6d0305..76948a02 100644
--- a/src/libs/core/score/tstafflines.h
+++ b/src/libs/core/score/tstafflines.h
@@ -41,6 +41,9 @@ public:
 
 protected:
     void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override;
+#if !defined(Q_OS_ANDROID)
+    virtual bool eventFilter(QObject *obj, QEvent *event) override;
+#endif
 
 private:
     qreal m_staffScale = 1.0;
diff --git a/src/libs/core/tnootkaqml.cpp b/src/libs/core/tnootkaqml.cpp
index 35b06b5f..f11f8d48 100644
--- a/src/libs/core/tnootkaqml.cpp
+++ b/src/libs/core/tnootkaqml.cpp
@@ -572,10 +572,7 @@ void TnootkaQML::setQmlEngine(QQmlEngine *e)
     connect(m_aboutAct, &Taction::triggered, this, &TnootkaQML::aboutActTriggered);
     m_messageColor = qApp->palette().highlight().color();
 
-    connect(qApp, &QGuiApplication::paletteChanged, this, [=] {
-        setMessageColor(qApp->palette().highlight().color());
-        m_scoreAct->setBgColor(qApp->palette().highlight().color());
-    });
+    qApp->installEventFilter(this);
 }
 
 /**
@@ -920,3 +917,12 @@ QList<Tnote> &TnootkaQML::scoreNoteList() const
 {
     return m_scoreObject->noteList();
 }
+
+bool TnootkaQML::eventFilter(QObject *obj, QEvent *event)
+{
+    if (obj == qApp && event->type() == QEvent::ApplicationPaletteChange) {
+        setMessageColor(qApp->palette().highlight().color());
+        m_scoreAct->setBgColor(qApp->palette().highlight().color());
+    }
+    return QObject::eventFilter(obj, event);
+}
diff --git a/src/libs/core/tnootkaqml.h b/src/libs/core/tnootkaqml.h
index e8ba162e..b23a0c82 100644
--- a/src/libs/core/tnootkaqml.h
+++ b/src/libs/core/tnootkaqml.h
@@ -313,6 +313,10 @@ protected:
 
     void warnNewerVersionSlot(const QString &fileName);
 
+#if !defined(Q_OS_ANDROID)
+    virtual bool eventFilter(QObject *obj, QEvent *event) override;
+#endif
+
 private:
     static TnootkaQML *m_instance;
 
diff --git a/src/main/tmainscoreobject.cpp b/src/main/tmainscoreobject.cpp
index 47a1f9ad..2b6bd001 100644
--- a/src/main/tmainscoreobject.cpp
+++ b/src/main/tmainscoreobject.cpp
@@ -113,7 +113,6 @@ TmainScoreObject::TmainScoreObject(QObject *parent)
     m_nextNoteAct->createQmlShortcut(&actionsComp, "StandardKey.MoveToNextChar");
     m_prevNoteAct->createQmlShortcut(&actionsComp, "StandardKey.MoveToPreviousChar");
 
-    connect(qApp, &QGuiApplication::paletteChanged, this, &TmainScoreObject::paletteSlot);
     connect(SOUND, &Tsound::playingChanged, this, [=] {
         m_playAct->setIconTag(SOUND->playing() ? QLatin1String("stopMelody") : QLatin1String("playMelody"));
         m_playAct->setText(SOUND->playing() ? qTR("QShortcut", "Stop") : qTR("TtoolBar", "Play"));
@@ -122,6 +121,7 @@ TmainScoreObject::TmainScoreObject(QObject *parent)
     isExamChangedSlot();
 
     connect(NOO, &TnootkaQML::wantOpenXml, this, &TmainScoreObject::openXmlFileSlot);
+    qApp->installEventFilter(this);
 }
 
 TmainScoreObject::~TmainScoreObject()
@@ -601,7 +601,8 @@ void TmainScoreObject::isExamChangedSlot()
             if (m_questionMark) {
                 m_questionMark->setParentItem(qvariant_cast<QQuickItem *>(qobject_cast<QQuickItem *>(m_scoreObj->parent())->property("bgRect")));
                 m_questionMark->setVisible(false);
-                paletteSlot();
+                if (m_questionMark)
+                    m_questionMark->setProperty("color", scoreBackgroundColor(GLOB->EquestionColor, 40));
             }
         }
         singleModeSlot();
@@ -657,12 +658,6 @@ void TmainScoreObject::singleModeSlot()
     }
 }
 
-void TmainScoreObject::paletteSlot()
-{
-    if (m_questionMark)
-        m_questionMark->setProperty("color", scoreBackgroundColor(GLOB->EquestionColor, 40));
-}
-
 void TmainScoreObject::applyCorrectSlot()
 {
     markNoteHead(GLOB->correctColor(), m_correctNoteId);
@@ -789,3 +784,12 @@ void TmainScoreObject::checkExtraStaves()
         }
     }
 }
+
+bool TmainScoreObject::eventFilter(QObject *obj, QEvent *event)
+{
+    if (obj == qApp && event->type() == QEvent::ApplicationPaletteChange) {
+        if (m_questionMark)
+            m_questionMark->setProperty("color", scoreBackgroundColor(GLOB->EquestionColor, 40));
+    }
+    return QObject::eventFilter(obj, event);
+}
diff --git a/src/main/tmainscoreobject.h b/src/main/tmainscoreobject.h
index 17597db6..56d217d2 100644
--- a/src/main/tmainscoreobject.h
+++ b/src/main/tmainscoreobject.h
@@ -182,7 +182,6 @@ protected:
     void randMelodySlot();
     void isExamChangedSlot();
     void singleModeSlot();
-    void paletteSlot();
     void getMelodyNameSlot();
     void playScoreSlot();
     void gotItNoteSelectedSlot();
@@ -193,6 +192,9 @@ protected:
     void checkSingleNoteVisibility();
 
     void checkExtraStaves();
+#if !defined(Q_OS_ANDROID)
+    virtual bool eventFilter(QObject *obj, QEvent *event) override;
+#endif
 
 protected slots:
     void applyCorrectSlot();
diff --git a/src/main/tnameitem.cpp b/src/main/tnameitem.cpp
index cbb37dd9..f5dad0b1 100644
--- a/src/main/tnameitem.cpp
+++ b/src/main/tnameitem.cpp
@@ -43,13 +43,10 @@ TnameItem::TnameItem(QQuickItem *parent)
     m_note.setOctave(-4);
     m_bgColor = qApp->palette().base().color();
     m_bgColor.setAlpha(175);
-    connect(qApp, &QGuiApplication::paletteChanged, this, [=] {
-        if (!m_questionAsked) // update color only when question is not asked
-            changeNameBgColor(qApp->palette().base().color());
-    });
     connect(GLOB, &Tglobals::showEnharmNotesChanged, this, &TnameItem::nameTextChanged);
     connect(GLOB, &Tglobals::noteNameStyleChanged, this, &TnameItem::nameTextChanged);
     connect(GLOB, &Tglobals::seventhIsBChanged, this, &TnameItem::nameTextChanged);
+    qApp->installEventFilter(this);
 }
 
 TnameItem::~TnameItem()
@@ -273,3 +270,19 @@ void TnameItem::finishCorrectAnim()
 {
     emit correctionFinished();
 }
+
+bool TnameItem::eventFilter(QObject *obj, QEvent *event)
+{
+    if (obj == qApp && event->type() == QEvent::ApplicationPaletteChange) {
+        if (!m_questionAsked) // update color only when question is not asked
+            changeNameBgColor(qApp->palette().base().color());
+    }
+    return QObject::eventFilter(obj, event);
+}
+
+void TnameItem::changeNameBgColor(const QColor &c)
+{
+    m_bgColor = c;
+    m_bgColor.setAlpha(175);
+    emit bgColorChanged();
+}
diff --git a/src/main/tnameitem.h b/src/main/tnameitem.h
index 03353ebd..811ac253 100644
--- a/src/main/tnameitem.h
+++ b/src/main/tnameitem.h
@@ -118,13 +118,11 @@ signals:
     void correctName();
     void correctionFinished();
 
-private:
-    void changeNameBgColor(const QColor &c)
-    {
-        m_bgColor = c;
-        m_bgColor.setAlpha(175);
-        emit bgColorChanged();
-    }
+protected:
+#if !defined(Q_OS_ANDROID)
+    virtual bool eventFilter(QObject *obj, QEvent *event) override;
+#endif
+    void changeNameBgColor(const QColor &c);
 
 private:
     Tnote m_note, m_okNote;
-- 
GitLab