Steve Lhomme pushed to branch master at VideoLAN / VLC


Commits:
fca56390 by Pierre Lamot at 2024-11-21T10:09:13+00:00
qt: fix race condition when SystemPalette is destroyed

As we don't control the destruction order of QML component, when scene is 
unloading
SystemPalette may be destroyed before ColorContext item that uses this palette, 
with
palette change not propagated in time.

- - - - -


1 changed file:

- modules/gui/qt/style/colorcontext.cpp


Changes:

=====================================
modules/gui/qt/style/colorcontext.cpp
=====================================
@@ -189,8 +189,7 @@ bool ColorContext::setInheritedPalette(SystemPalette* 
palette)
         return false;
     if (m_palette)
     {
-        disconnect(m_palette, &SystemPalette::sourceChanged, this, 
&ColorContext::colorsChanged);
-        disconnect(m_palette, &SystemPalette::paletteChanged, this, 
&ColorContext::colorsChanged);
+        disconnect(m_palette, nullptr, this, nullptr);
     }
 
     m_palette = palette;
@@ -199,6 +198,17 @@ bool ColorContext::setInheritedPalette(SystemPalette* 
palette)
     {
         connect(m_palette, &SystemPalette::sourceChanged, this, 
&ColorContext::colorsChanged);
         connect(m_palette, &SystemPalette::paletteChanged, this, 
&ColorContext::colorsChanged);
+        connect(m_palette, &SystemPalette::destroyed, this, [this](){
+            if (m_parentContext)
+            {
+                if (m_hasExplicitPalette)
+                    connect(m_parentContext, &ColorContext::paletteChanged, 
this, &ColorContext::setInheritedPalette);
+                setInheritedPalette(m_parentContext->m_palette);
+            }
+            else
+                setInheritedPalette(nullptr);
+            m_hasExplicitPalette = false;
+        });
     }
     else
         m_initialized = false;



View it on GitLab: 
https://code.videolan.org/videolan/vlc/-/commit/fca563901ccfa05552412a85af7aad380d357775

-- 
View it on GitLab: 
https://code.videolan.org/videolan/vlc/-/commit/fca563901ccfa05552412a85af7aad380d357775
You're receiving this email because of your account on code.videolan.org.


VideoLAN code repository instance
_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to