Re: lyx 2.4.4 has a memory leak?
"Jürgen Spitzmüller" <[email protected]> Fri, 26 Dec 2025 14:55:46 +0100
| Newsgroups | gmane.editors.lyx.devel,gmane.editors.lyx.general |
|---|---|
| Message-ID | <[email protected]> |
Am Freitag, dem 26.12.2025 um 14:34 +0100 schrieb Jürgen Spitzmüller: > > Note: The difference between 2.5.0 RC2 and 2.4.4 is that the on > > 2.5.0 > > RC2, the leak stops after some time (10-20 secs) after dumping > > around > > 1GB memory. In 2.4.4, however, memory dump never stops. I had to > > kill > > the process as the memory dump went upto 6GB in the tests... > > There have been many changed to dark/light mode handling for 2.5, nut > I > don't see now which could cause that difference. > > refillToolbars() was not changed. However, refillToolbars() can be expensive as well. And if I understand correctly that the theme change here does not (necessarily) involve a change from dark to light, we could also use the attached patch to refill toolbars only if the latter happened. -- Jürgen -- lyx-devel mailing list [email protected] https://lists.lyx.org/mailman/listinfo/lyx-devel
x2.diff
(text/x-patch, 1.7 KB)
diff --git a/src/frontends/qt/GuiView.cpp b/src/frontends/qt/GuiView.cpp
index f64c368a59..afae7c6a50 100644
--- a/src/frontends/qt/GuiView.cpp
+++ b/src/frontends/qt/GuiView.cpp
@@ -1781,6 +1781,15 @@ bool GuiView::statsEnabled() const
}
+bool GuiView::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());
+}
+
+
bool GuiView::event(QEvent * e)
{
switch (e->type())
@@ -1906,10 +1915,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/GuiView.h b/src/frontends/qt/GuiView.h
index 73a6f46c68..bea80c8cf7 100644
--- a/src/frontends/qt/GuiView.h
+++ b/src/frontends/qt/GuiView.h
@@ -432,6 +432,8 @@ private:
void initToolbar(std::string const & name);
/// Update lock (all) toolbars position
void updateLockToolbars();
+ ///
+ bool isPaletteDark(QPalette const & pal);
/// refill the toolbars (dark/light mode switch)
void refillToolbars();
///