diff options
Diffstat (limited to 'src/core/ksharedconfig.cpp')
| -rw-r--r-- | src/core/ksharedconfig.cpp | 32 | 
1 files changed, 18 insertions, 14 deletions
| diff --git a/src/core/ksharedconfig.cpp b/src/core/ksharedconfig.cpp index b7d155d5..e059b87a 100644 --- a/src/core/ksharedconfig.cpp +++ b/src/core/ksharedconfig.cpp @@ -33,6 +33,7 @@ class GlobalSharedConfigList : public QList<KSharedConfig *>  {  public:      GlobalSharedConfigList() +        : wasTestModeEnabled(false)      {          if (!qApp || QThread::currentThread() == qApp->thread()) {              // We want to force the sync() before the QCoreApplication @@ -41,11 +42,14 @@ public:              // existent app...              qAddPostRoutine(&_k_globalMainConfigSync);          } +        // In other threads, QThreadStorage takes care of deleting the GlobalSharedConfigList when +        // the thread exits.      }      // in addition to the list, we need to hold the main config,      // so that it's not created and destroyed all the time.      KSharedConfigPtr mainConfig; +    bool wasTestModeEnabled;  };  static QThreadStorage<GlobalSharedConfigList *> s_storage; @@ -80,30 +84,30 @@ KSharedConfigPtr KSharedConfig::openConfig(const QString &_fileName,          fileName = KConfig::mainConfigName();      } -    static QBasicAtomicInt wasTestModeEnabled = Q_BASIC_ATOMIC_INITIALIZER(false); -    if (!wasTestModeEnabled && QStandardPaths::isTestModeEnabled()) { -        wasTestModeEnabled = true; +    if (!list->wasTestModeEnabled && QStandardPaths::isTestModeEnabled()) { +        list->wasTestModeEnabled = true;          list->clear();          list->mainConfig = Q_NULLPTR;      } -    if (list) { -        foreach (auto cfg, *static_cast<const GlobalSharedConfigList*>(list)) { -            if (cfg->name() == fileName && -                    cfg->d_ptr->openFlags == flags && -                    cfg->locationType() == resType -//                    cfg->backend()->type() == backend -               ) { -                return KSharedConfigPtr(cfg); -            } +    foreach (auto cfg, *static_cast<const GlobalSharedConfigList*>(list)) { +        if (cfg->name() == fileName && +                cfg->d_ptr->openFlags == flags && +                cfg->locationType() == resType +//                cfg->backend()->type() == backend +           ) { +            return KSharedConfigPtr(cfg);          }      } +      KSharedConfigPtr ptr(new KSharedConfig(fileName, flags, resType)); +      if (_fileName.isEmpty() && flags == FullConfig && resType == QStandardPaths::GenericConfigLocation) {          list->mainConfig = ptr; -        static QBasicAtomicInt userWarned = Q_BASIC_ATOMIC_INITIALIZER(false); -        if (!userWarned) { +        const bool isMainThread = !qApp || QThread::currentThread() == qApp->thread(); +        static bool userWarned = false; +        if (isMainThread && !userWarned) {              userWarned = true;              QByteArray readOnly = qgetenv("KDE_HOME_READONLY");              if (readOnly.isEmpty() && QCoreApplication::applicationName() != QLatin1String("kdialog")) { | 
