commit 9b57990e4339a9735778e3ac873e9334821765d1
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
---
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