@@ -25,7 +25,8 @@
25AccountsServiceDBusAdaptor::AccountsServiceDBusAdaptor(QObject* parent)
25AccountsServiceDBusAdaptor::AccountsServiceDBusAdaptor(QObject* parent)
26 : QObject(parent),
26 : QObject(parent),
27 m_accountsManager(nullptr),
27 m_accountsManager(nullptr),
28− m_users()
28+ m_users(),
29+ m_ignoreNextChanged(false)
30 QDBusConnection connection = QDBusConnection::SM_BUSNAME();
31 QDBusConnection connection = QDBusConnection::SM_BUSNAME();
31 QDBusConnectionInterface *interface = connection.interface();
32 QDBusConnectionInterface *interface = connection.interface();
@@ -75,11 +76,19 @@ void AccountsServiceDBusAdaptor::propertiesChangedSlot(const QString &interface,
75 combined.removeDuplicates();
76 combined.removeDuplicates();
77 Q_EMIT propertiesChanged(getUserForPath(message().path()), interface, combined);
78 Q_EMIT propertiesChanged(getUserForPath(message().path()), interface, combined);
80+ // In case a non-builtin property changes, we're getting propertiesChanged *and* changed
81+ // As the generic changed requires asking back over DBus, it's quite slow to process.
82+ // We don't want to trigger that when we know it's not a built-in property change.
83+ m_ignoreNextChanged = true;
80void AccountsServiceDBusAdaptor::maybeChangedSlot()
86void AccountsServiceDBusAdaptor::maybeChangedSlot()
88+ if (!m_ignoreNextChanged) {
82− Q_EMIT maybeChanged(getUserForPath(message().path()));
89+ Q_EMIT maybeChanged(getUserForPath(message().path()));
91+ m_ignoreNextChanged = false;
85QString AccountsServiceDBusAdaptor::getUserForPath(const QString &path)
94QString AccountsServiceDBusAdaptor::getUserForPath(const QString &path)