commit dd1bf549fda0ef81ed2b5903a1840dd9ffe3e907
Author: Juergen Spitzmueller <[email protected]>
Date:   Sun Dec 28 10:03:18 2025 +0100

    Check whether dark/light mode switch happened before reloading toolbars
    
    Also factor out dark palette test
    
    (cherry picked from commit 9b57990e4339a9735778e3ac873e9334821765d1)
---
 src/frontends/qt/ColorCache.cpp | 6 ++----
 src/frontends/qt/GuiView.cpp    | 9 +++++++--
 src/frontends/qt/qt_helpers.cpp | 9 +++++++++
 src/frontends/qt/qt_helpers.h   | 4 ++++
 4 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/src/frontends/qt/ColorCache.cpp b/src/frontends/qt/ColorCache.cpp
index 5a1248a90a..3788c3b783 100644
--- a/src/frontends/qt/ColorCache.cpp
+++ b/src/frontends/qt/ColorCache.cpp
@@ -13,6 +13,7 @@
 #include "ColorCache.h"
 
 #include "LyXRC.h"
+#include "qt_helpers.h"
 
 #include "Color.h"
 #include "ColorSet.h"
@@ -150,10 +151,7 @@ bool ColorCache::isSystem(ColorCode const color) const
 
 bool ColorCache::isDarkMode() const
 {
-       QColor text_color = pal_.color(QPalette::Active, QPalette::WindowText);
-       QColor bg_color = pal_.color(QPalette::Active, QPalette::Window);
-
-       return (text_color.black() < bg_color.black());
+       return frontend::isPaletteDark(pal_);
 }
 
 
diff --git a/src/frontends/qt/GuiView.cpp b/src/frontends/qt/GuiView.cpp
index f64c368a59..3a42afefea 100644
--- a/src/frontends/qt/GuiView.cpp
+++ b/src/frontends/qt/GuiView.cpp
@@ -1906,10 +1906,15 @@ bool GuiView::event(QEvent * e)
 #if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
        case QEvent::ThemeChange: {
                if (lyxrc.color_scheme != "dark" && lyxrc.color_scheme != 
"light") {
-                       guiApp->setPalette(guiApp->style()->standardPalette());
+                       QPalette currentPalette = guiApp->palette();
+                       QPalette newPalette = 
guiApp->style()->standardPalette();
+                       guiApp->setPalette(newPalette);
                        // We need to update metrics here to avoid a crash 
(#12786)
                        theBufferList().changed(true);
-                       refillToolbars();
+                       if (isPaletteDark(currentPalette) != 
isPaletteDark(newPalette))
+                               // we need to refill the toolbar only if we 
really
+                               // switched from dark to light or vice versa
+                               refillToolbars();
                        return QMainWindow::event(e);
                }
                return true;
diff --git a/src/frontends/qt/qt_helpers.cpp b/src/frontends/qt/qt_helpers.cpp
index 74fa0af03a..14f70f3f31 100644
--- a/src/frontends/qt/qt_helpers.cpp
+++ b/src/frontends/qt/qt_helpers.cpp
@@ -397,6 +397,15 @@ void showTarget(string const & target_in, Buffer const & 
buf)
                        bformat(_("The target `%1$s' could not be resolved."),
                                from_utf8(target)));
 }
+
+bool isPaletteDark(QPalette const & pal)
+{
+       QColor text_color = pal.color(QPalette::Active, QPalette::WindowText);
+       QColor bg_color = pal.color(QPalette::Active, QPalette::Window);
+
+       return (text_color.black() < bg_color.black());
+}
+
 } // namespace frontend
 
 QString const qt_(char const * str, const char *)
diff --git a/src/frontends/qt/qt_helpers.h b/src/frontends/qt/qt_helpers.h
index 887e435653..3e012a895b 100644
--- a/src/frontends/qt/qt_helpers.h
+++ b/src/frontends/qt/qt_helpers.h
@@ -23,6 +23,7 @@
 
 class QComboBox;
 class QLineEdit;
+class QPalette;
 class QString;
 class QWidget;
 class QAbstractItemView;
@@ -97,6 +98,9 @@ void showDirectory(support::FileName const & directory);
 /// \p docpath holds the document path
 void showTarget(std::string const & target, Buffer const & buf);
 
+/// Check if a palette represents dark mode
+bool isPaletteDark(QPalette const & pal);
+
 } // namespace frontend
 
 
-- 
lyx-cvs mailing list
[email protected]
https://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to