OSDN Git Service

kcontrol: partial fix for KGlobalSettings race
authorIvailo Monev <xakepa10@gmail.com>
Tue, 22 Nov 2022 03:18:50 +0000 (05:18 +0200)
committerIvailo Monev <xakepa10@gmail.com>
Tue, 22 Nov 2022 03:18:50 +0000 (05:18 +0200)
the style KCM for example emits changes via
KGlobalSettings::self()->emitChange() however it does not wait for the
KGlobalSettings::settingsChanged() signal (which means settings are
reloaded) before running krdb, font and palette settings are likely subject
to this race-condition but for now that will do

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
kcontrol/krdb/krdb.cpp

index a3484cc..721e762 100644 (file)
@@ -125,16 +125,21 @@ static void applyQtColors( QSettings& settings, QPalette& newPal )
 
 // -----------------------------------------------------------------------------
 
-static void applyQtSettings( QSettings& settings )
+static void applyQtSettings( KSharedConfigPtr kglobalcfg, QSettings& settings )
 {
+#warning FIXME: KGlobalSettings race, settings may not be reloaded yet
   /* export font settings */
   settings.setValue("Qt/font", KGlobalSettings::generalFont().toString());
 
   /* export effects settings */
-  bool effectsEnabled = (KGlobalSettings::graphicEffectsLevel() != KGlobalSettings::NoEffects);
-  bool fadeMenus = (KGlobalSettings::graphicEffectsLevel() & KGlobalSettings::ComplexAnimationEffects);
-  bool fadeTooltips = (KGlobalSettings::graphicEffectsLevel() & KGlobalSettings::ComplexAnimationEffects);
-  bool animateCombobox = (KGlobalSettings::graphicEffectsLevel() & KGlobalSettings::SimpleAnimationEffects);
+  KConfigGroup kglobalgrp( kglobalcfg, "KDE-Global GUI Settings" );
+  int graphicEffects = kglobalgrp.readEntry("GraphicEffectsLevel", int(KGlobalSettings::graphicEffectsLevelDefault()));
+  KGlobalSettings::GraphicEffects graphicEffectsFlags = KGlobalSettings::GraphicEffects(graphicEffects);
+  bool effectsEnabled = (graphicEffectsFlags != KGlobalSettings::NoEffects);
+  bool fadeMenus = (graphicEffectsFlags & KGlobalSettings::ComplexAnimationEffects);
+  bool fadeTooltips = (graphicEffectsFlags & KGlobalSettings::ComplexAnimationEffects);
+  bool animateCombobox = (graphicEffectsFlags & KGlobalSettings::SimpleAnimationEffects);
+  // qDebug() << Q_FUNC_INFO << effectsEnabled << fadeMenus << fadeTooltips << animateCombobox;
 
   QStringList guieffects;
   if (effectsEnabled) {
@@ -449,7 +454,7 @@ void runRdb( uint flags )
         applyQtColors( settings, newPal );    // For kcmcolors
 
       if ( exportQtSettings )
-        applyQtSettings( settings );          // For kcmstyle
+        applyQtSettings( kglobalcfg, settings );          // For kcmstyle
     }
 
     QApplication::flush();