diff --git a/plugins/datetime/datetimeplugin.cpp b/plugins/datetime/datetimeplugin.cpp index 4153a0bf6..39e3f5026 100644 --- a/plugins/datetime/datetimeplugin.cpp +++ b/plugins/datetime/datetimeplugin.cpp @@ -24,6 +24,9 @@ #include #include #include +#include + +#include #define PLUGIN_STATE_KEY "enable" #define TIME_FORMAT_KEY "Use24HourFormat" @@ -31,9 +34,8 @@ DatetimePlugin::DatetimePlugin(QObject *parent) : QObject(parent) , m_pluginLoaded(false) + , m_interface(nullptr) { - m_interface = new QDBusInterface("com.deepin.daemon.Timedate", "/com/deepin/daemon/Timedate", "com.deepin.daemon.Timedate"); - QDBusConnection sessionBus = QDBusConnection::sessionBus(); sessionBus.connect("com.deepin.daemon.Timedate", "/com/deepin/daemon/Timedate", "org.freedesktop.DBus.Properties", "PropertiesChanged", this, SLOT(propertiesChanged())); } @@ -198,15 +200,18 @@ void DatetimePlugin::invokedMenuItem(const QString &itemKey, const QString &menu .arg(QString("datetime")) .call(); } else { - const bool value = m_interface->property(TIME_FORMAT_KEY).toBool(); - m_interface->setProperty(TIME_FORMAT_KEY, !value); + const bool value = timedateInterface()->property(TIME_FORMAT_KEY).toBool(); + timedateInterface()->setProperty(TIME_FORMAT_KEY, !value); m_centralWidget->set24HourFormat(!value); } } void DatetimePlugin::pluginSettingsChanged() { - const bool value = m_interface->property(TIME_FORMAT_KEY).toBool(); + if (!m_pluginLoaded) + return; + + const bool value = timedateInterface()->property(TIME_FORMAT_KEY).toBool(); m_proxyInter->saveValue(this, TIME_FORMAT_KEY, value); m_centralWidget->set24HourFormat(value); @@ -250,3 +255,19 @@ void DatetimePlugin::propertiesChanged() { pluginSettingsChanged(); } + +QDBusInterface* DatetimePlugin::timedateInterface() +{ + if (!m_interface) { + if (QDBusConnection::sessionBus().interface()->isServiceRegistered("com.deepin.daemon.Timedate")) { + m_interface = new QDBusInterface("com.deepin.daemon.Timedate", "/com/deepin/daemon/Timedate", "com.deepin.daemon.Timedate"); + } else { + const QString path = QString("/com/deepin/daemon/Accounts/User%1").arg(QString::number(getuid())); + QDBusInterface * systemInterface = new QDBusInterface("com.deepin.daemon.Accounts", path, "com.deepin.daemon.Accounts.User", + QDBusConnection::systemBus(), this); + return systemInterface; + } + } + + return m_interface; +} diff --git a/plugins/datetime/datetimeplugin.h b/plugins/datetime/datetimeplugin.h index 7d925397f..26d274f14 100644 --- a/plugins/datetime/datetimeplugin.h +++ b/plugins/datetime/datetimeplugin.h @@ -68,6 +68,7 @@ private slots: private: void loadPlugin(); + QDBusInterface *timedateInterface(); private: QPointer m_centralWidget;