dfaure requested changes to this revision.
dfaure added inline comments.
This revision now requires changes to proceed.

INLINE COMMENTS

> kconfigtest.cpp:1793
> +#if !KCONFIG_USE_DBUS
> +        QEXPECT_FAIL("", "KConfig notification requires DBus", 
> QTest::Continue)
> +        Q_ASSERT(false);

This is normally done using QSKIP.

Better than this, which will "fail to fail" in release mode (at least on the 
Q_ASSERT(false) line).

> kconfigtest.cpp:1800
> +
> +    //mimcs a config in another process, which is watching for events
> +    auto remoteConfig = KSharedConfig::openConfig(TEST_SUBDIR "kconfigtest");

typo: mimics

The fact that it's not actually another process, means that this test would 
pass with a simple emit as well ;)
A proper test would use QProcess to run a helper executable which would make 
changes to a config file.

> kconfig.cpp:460
> +                    if (e.bNotify) {
> +                        
> notifyGroupsGlobal[QString::fromLatin1(it.key().mGroup)] << it.key().mKey;
> +                    }

Why latin1? Can't groups use utf8?

> kconfig.cpp:465
> +                    if (e.bNotify) {
> +                        
> notifyGroupsLocal[QString::fromLatin1(it.key().mGroup)] << it.key().mKey;
> +                    }

I wonder if we should skip doing this work when DBUS support is disabled, for 
performance reasons.
More #if, but more speed... in the corner-case scenario though.
So I'm not sure ;)

> kconfigbase.h:61
> +        /**<
> +         * Notify remote KConfigWatchers of changes (Linux only)
> +         * @since 5.CONFIGWATCHERVERSION

I see no reason why this wouldn't work on BSD :-)

I would change this to "(requires DBus support)".

> kconfigbase.h:62
> +         * Notify remote KConfigWatchers of changes (Linux only)
> +         * @since 5.CONFIGWATCHERVERSION
> +         */

Let's go for 51 :)

> kconfigdata.cpp:304
> +        case EntryNotify:
> +            it->bNotify = bf;
>          default:

missing break;

> kconfigwatcher.cpp:1
> +#include "kconfigwatcher.h"
> +

License header missing

> kconfigwatcher.cpp:20
> +
> +typedef QHash<KSharedConfig*, QWeakPointer<KConfigWatcher>> ConfigWatcherMap;
> +Q_GLOBAL_STATIC(ConfigWatcherMap, s_globalWatcherList)

(I'm curious, why not a raw pointer? You clean up the hash when the watcher is 
destroyed anyway; probably doesn't matter either way though)

> kconfigwatcher.cpp:21
> +typedef QHash<KSharedConfig*, QWeakPointer<KConfigWatcher>> ConfigWatcherMap;
> +Q_GLOBAL_STATIC(ConfigWatcherMap, s_globalWatcherList)
> +

You could also do this the C++11 way with a static object inside the create() 
method, which is the only place where it's used.

> kconfigwatcher.cpp:28
> +
> +    if (!s_globalWatcherList->contains(c)) {
> +        watcher = KConfigWatcher::Ptr(new KConfigWatcher(config));

There should probably be a mutex around this whole method implementation, in 
case two threads create a watcher for the same KSharedConfig (which is itself 
threadsafe).

Alternatively, the static can be a QThreadStorage, like I did in 
ksharedconfig.cpp.

> kconfigwatcher.h:34
> + * Notifies when another client has updated this config file with the Notify 
> flag set.
> + * @since 5.CONFIGWATCHERVERSION
> + */

51

> kconfigwatcher.h:60
> +private Q_SLOTS:
> +    void onConfigChangeNotification(QHash<QString, QByteArrayList> changes);
> +

const ref

REPOSITORY
  R237 KConfig

REVISION DETAIL
  https://phabricator.kde.org/D13034

To: davidedmundson, broulik, dfaure
Cc: dfaure, broulik, zzag, kde-frameworks-devel, michaelh, ngraham, bruns

Reply via email to