diff --git a/kcms/users/src/kcm.cpp b/kcms/users/src/kcm.cpp index 872c61bc7..0f62a098d 100644 --- a/kcms/users/src/kcm.cpp +++ b/kcms/users/src/kcm.cpp @@ -28,6 +28,15 @@ Q_LOGGING_CATEGORY(kcm_users, "kcm_users") K_PLUGIN_CLASS_WITH_JSON(KCMUser, "kcm_users.json") +// Work around QTBUG-100458 +inline auto asyncCall(OrgFreedesktopAccountsInterface *ptr, const QString &method, const QVariantList &arguments) +{ + auto mc = QDBusMessage::createMethodCall(ptr->service(), ptr->path(), ptr->interface(), method); + mc.setArguments(arguments); + mc.setInteractiveAuthorizationAllowed(true); + return QDBusConnection::systemBus().asyncCall(mc); +} + KCMUser::KCMUser(QObject *parent, const KPluginMetaData &data, const QVariantList &args) : KQuickAddons::ConfigModule(parent, data, args) , m_dbusInterface(new OrgFreedesktopAccountsInterface(QStringLiteral("org.freedesktop.Accounts"), @@ -56,7 +65,7 @@ KCMUser::KCMUser(QObject *parent, const KPluginMetaData &data, const QVariantLis bool KCMUser::createUser(const QString &name, const QString &realName, const QString &password, bool isAdmin) { - QDBusPendingReply reply = m_dbusInterface->CreateUser(name, realName, isAdmin); + QDBusPendingReply reply = asyncCall(m_dbusInterface, "CreateUser", {name, realName, static_cast(isAdmin)}); reply.waitForFinished(); if (reply.isValid()) { User *createdUser = new User(this); @@ -68,9 +77,9 @@ bool KCMUser::createUser(const QString &name, const QString &realName, const QSt return false; } -bool KCMUser::deleteUser(int id, bool deleteHome) +bool KCMUser::deleteUser(qint64 id, bool deleteHome) { - QDBusPendingReply<> reply = m_dbusInterface->DeleteUser(id, deleteHome); + QDBusPendingReply<> reply = asyncCall(m_dbusInterface, "DeleteUser", {id, deleteHome}); reply.waitForFinished(); if (reply.isError()) { return false; diff --git a/kcms/users/src/kcm.h b/kcms/users/src/kcm.h index 90df68c47..808ad9284 100644 --- a/kcms/users/src/kcm.h +++ b/kcms/users/src/kcm.h @@ -32,7 +32,7 @@ public: ~KCMUser() override; Q_SCRIPTABLE bool createUser(const QString &name, const QString &realName, const QString &password, bool admin); - Q_SCRIPTABLE bool deleteUser(int index, bool deleteHome); + Q_SCRIPTABLE bool deleteUser(qint64 index, bool deleteHome); // Grab the initials of a string Q_SCRIPTABLE QString initializeString(const QString &stringToGrabInitialsOf); Q_SCRIPTABLE QString plonkImageInTempfile(const QImage &image);