From 411cb27eadc3347a82e861f35aee6f3b5ab9a87f Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Tue, 8 Jan 2019 23:25:50 +0100 Subject: [PATCH] Fix gnome d-dus shortcuts backend --- .../globalshortcutbackend-dbus.cpp | 18 +++++++++++------- .../globalshortcutbackend-dbus.h | 2 +- src/globalshortcuts/globalshortcuts.cpp | 2 +- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/globalshortcuts/globalshortcutbackend-dbus.cpp b/src/globalshortcuts/globalshortcutbackend-dbus.cpp index 4c867937e..620fdf35b 100644 --- a/src/globalshortcuts/globalshortcutbackend-dbus.cpp +++ b/src/globalshortcuts/globalshortcutbackend-dbus.cpp @@ -37,9 +37,9 @@ #include "globalshortcutbackend.h" #include "globalshortcutbackend-dbus.h" -const char *GlobalShortcutBackendDBus::kGsdService = "org.gnome.SettingsDaemon"; +const char *GlobalShortcutBackendDBus::kGsdService = "org.gnome.SettingsDaemon.MediaKeys"; +const char *GlobalShortcutBackendDBus::kGsdService2 = "org.gnome.SettingsDaemon"; const char *GlobalShortcutBackendDBus::kGsdPath = "/org/gnome/SettingsDaemon/MediaKeys"; -const char *GlobalShortcutBackendDBus::kGsdInterface = "org.gnome.SettingsDaemon.MediaKeys"; GlobalShortcutBackendDBus::GlobalShortcutBackendDBus(GlobalShortcuts *parent) : GlobalShortcutBackend(parent), @@ -52,14 +52,18 @@ bool GlobalShortcutBackendDBus::DoRegister() { qLog(Debug) << "Registering"; - // Check if the GSD service is available - if (!QDBusConnection::sessionBus().interface()->isServiceRegistered(kGsdService)) { - qLog(Warning) << "Gnome settings daemon not registered"; - return false; + if (!interface_) { + if (QDBusConnection::sessionBus().interface()->isServiceRegistered(kGsdService)) { + interface_ = new OrgGnomeSettingsDaemonMediaKeysInterface(kGsdService, kGsdPath, QDBusConnection::sessionBus(), this); + } + else if (QDBusConnection::sessionBus().interface()->isServiceRegistered(kGsdService2)) { + interface_ = new OrgGnomeSettingsDaemonMediaKeysInterface(kGsdService2, kGsdPath, QDBusConnection::sessionBus(), this); + } } if (!interface_) { - interface_ = new OrgGnomeSettingsDaemonMediaKeysInterface(kGsdService, kGsdPath, QDBusConnection::sessionBus(), this); + qLog(Warning) << "Gnome settings daemon not registered"; + return false; } QDBusPendingReply<> reply = interface_->GrabMediaPlayerKeys(QCoreApplication::applicationName(), QDateTime::currentDateTime().toTime_t()); diff --git a/src/globalshortcuts/globalshortcutbackend-dbus.h b/src/globalshortcuts/globalshortcutbackend-dbus.h index f399a443c..0fd828086 100644 --- a/src/globalshortcuts/globalshortcutbackend-dbus.h +++ b/src/globalshortcuts/globalshortcutbackend-dbus.h @@ -46,8 +46,8 @@ class GlobalShortcutBackendDBus : public GlobalShortcutBackend { ~GlobalShortcutBackendDBus(); static const char *kGsdService; + static const char *kGsdService2; static const char *kGsdPath; - static const char *kGsdInterface; protected: bool RegisterInNewThread() const { return true; } diff --git a/src/globalshortcuts/globalshortcuts.cpp b/src/globalshortcuts/globalshortcuts.cpp index a716491e5..08cc6ef53 100644 --- a/src/globalshortcuts/globalshortcuts.cpp +++ b/src/globalshortcuts/globalshortcuts.cpp @@ -134,7 +134,7 @@ GlobalShortcuts::Shortcut GlobalShortcuts::AddShortcut(const QString &id, const bool GlobalShortcuts::IsGsdAvailable() const { #ifdef HAVE_DBUS - return QDBusConnection::sessionBus().interface()->isServiceRegistered(GlobalShortcutBackendDBus::kGsdService); + return QDBusConnection::sessionBus().interface()->isServiceRegistered(GlobalShortcutBackendDBus::kGsdService) || QDBusConnection::sessionBus().interface()->isServiceRegistered(GlobalShortcutBackendDBus::kGsdService2); #else return false; #endif