diff --git a/src/mumble/DBus.cpp b/src/mumble/DBus.cpp index 40c5e39beab..8e68d789ebc 100644 --- a/src/mumble/DBus.cpp +++ b/src/mumble/DBus.cpp @@ -24,7 +24,7 @@ void MumbleDBus::openUrl(const QString &url, const QDBusMessage &msg) { valid = valid && (u.scheme() == QLatin1String("mumble")); if (!valid) { QDBusConnection::sessionBus().send( - msg.createErrorReply(QLatin1String("net.sourceforge.mumble.Error.url"), QLatin1String("Invalid URL"))); + msg.createErrorReply(dbusErrorPrefix() + QLatin1String(".url"), QLatin1String("Invalid URL"))); } else { Global::get().mw->openUrl(u); } @@ -32,8 +32,8 @@ void MumbleDBus::openUrl(const QString &url, const QDBusMessage &msg) { void MumbleDBus::getCurrentUrl(const QDBusMessage &msg) { if (!Global::get().sh || !Global::get().sh->isRunning() || !Global::get().uiSession) { - QDBusConnection::sessionBus().send(msg.createErrorReply( - QLatin1String("net.sourceforge.mumble.Error.connection"), QLatin1String("Not connected"))); + QDBusConnection::sessionBus().send( + msg.createErrorReply(dbusErrorPrefix() + QLatin1String(".connection"), QLatin1String("Not connected"))); return; } QString host, user, pw; @@ -68,8 +68,8 @@ void MumbleDBus::getCurrentUrl(const QDBusMessage &msg) { void MumbleDBus::getTalkingUsers(const QDBusMessage &msg) { if (!Global::get().sh || !Global::get().sh->isRunning() || !Global::get().uiSession) { - QDBusConnection::sessionBus().send(msg.createErrorReply( - QLatin1String("net.sourceforge.mumble.Error.connection"), QLatin1String("Not connected"))); + QDBusConnection::sessionBus().send( + msg.createErrorReply(dbusErrorPrefix() + QLatin1String(".connection"), QLatin1String("Not connected"))); return; } QStringList names; @@ -97,8 +97,8 @@ void MumbleDBus::setTransmitMode(unsigned int mode, const QDBusMessage &msg) { Global::get().s.atTransmit = Settings::PushToTalk; break; default: - QDBusConnection::sessionBus().send(msg.createErrorReply( - QLatin1String("net.sourceforge.mumble.Error.transmitMode"), QLatin1String("Invalid transmit mode"))); + QDBusConnection::sessionBus().send(msg.createErrorReply(dbusErrorPrefix() + QLatin1String(".transmitMode"), + QLatin1String("Invalid transmit mode"))); return; } QMetaObject::invokeMethod(Global::get().mw, "updateTransmitModeComboBox", Qt::QueuedConnection); diff --git a/src/mumble/DBus.h b/src/mumble/DBus.h index 616aa145bff..c42bb7fd0e8 100644 --- a/src/mumble/DBus.h +++ b/src/mumble/DBus.h @@ -11,9 +11,12 @@ class QDBusMessage; class MumbleDBus : public QDBusAbstractAdaptor { +protected: + virtual QString dbusErrorPrefix() const { return QLatin1String("info.mumble.Error"); } + private: Q_OBJECT - Q_CLASSINFO("D-Bus Interface", "net.sourceforge.mumble.Mumble") + Q_CLASSINFO("D-Bus Interface", "info.mumble.Mumble") Q_DISABLE_COPY(MumbleDBus) Q_PROPERTY(bool mute READ isSelfMuted WRITE setSelfMuted) Q_PROPERTY(bool deaf READ isSelfDeaf WRITE setSelfDeaf) @@ -45,4 +48,21 @@ public slots: void stopTalking(); }; +/** + * Legacy DBus adaptor for backwards compatibility. + * Exposes the same interface as MumbleDBus but under the old + * net.sourceforge.mumble.Mumble name. + */ +class MumbleDBusLegacy : public MumbleDBus { +protected: + QString dbusErrorPrefix() const override { return QLatin1String("net.sourceforge.mumble.Error"); } + +private: + Q_OBJECT + Q_CLASSINFO("D-Bus Interface", "net.sourceforge.mumble.Mumble") + Q_DISABLE_COPY(MumbleDBusLegacy) +public: + MumbleDBusLegacy(QObject *parent) : MumbleDBus(parent) {} +}; + #endif diff --git a/src/mumble/main.cpp b/src/mumble/main.cpp index 3ab90d08262..9c0b0b5c7e5 100644 --- a/src/mumble/main.cpp +++ b/src/mumble/main.cpp @@ -588,11 +588,19 @@ int main(int argc, char **argv) { #endif bool sent = false; #ifdef USE_DBUS - QDBusInterface qdbi(QLatin1String("net.sourceforge.mumble.mumble"), QLatin1String("/"), - QLatin1String("net.sourceforge.mumble.Mumble")); + QDBusInterface qdbi(QLatin1String("info.mumble.mumble"), QLatin1String("/"), + QLatin1String("info.mumble.Mumble")); QDBusMessage reply = qdbi.call(QLatin1String("openUrl"), QLatin1String(url.toEncoded())); sent = (reply.type() == QDBusMessage::ReplyMessage); + + if (!sent) { + QDBusInterface qdbiLegacy(QLatin1String("net.sourceforge.mumble.mumble"), QLatin1String("/"), + QLatin1String("net.sourceforge.mumble.Mumble")); + + reply = qdbiLegacy.call(QLatin1String("openUrl"), QLatin1String(url.toEncoded())); + sent = (reply.type() == QDBusMessage::ReplyMessage); + } #else sent = SocketRPC::send(QLatin1String("Mumble"), QLatin1String("url"), param); #endif @@ -601,11 +609,19 @@ int main(int argc, char **argv) { } else { bool sent = false; #ifdef USE_DBUS - QDBusInterface qdbi(QLatin1String("net.sourceforge.mumble.mumble"), QLatin1String("/"), - QLatin1String("net.sourceforge.mumble.Mumble")); + QDBusInterface qdbi(QLatin1String("info.mumble.mumble"), QLatin1String("/"), + QLatin1String("info.mumble.Mumble")); QDBusMessage reply = qdbi.call(QLatin1String("focus")); sent = (reply.type() == QDBusMessage::ReplyMessage); + + if (!sent) { + QDBusInterface qdbiLegacy(QLatin1String("net.sourceforge.mumble.mumble"), QLatin1String("/"), + QLatin1String("net.sourceforge.mumble.Mumble")); + + reply = qdbiLegacy.call(QLatin1String("focus")); + sent = (reply.type() == QDBusMessage::ReplyMessage); + } #else sent = SocketRPC::send(QLatin1String("Mumble"), QLatin1String("focus")); #endif @@ -801,7 +817,9 @@ int main(int argc, char **argv) { #ifdef USE_DBUS new MumbleDBus(Global::get().mw); + new MumbleDBusLegacy(Global::get().mw); QDBusConnection::sessionBus().registerObject(QLatin1String("/"), Global::get().mw); + QDBusConnection::sessionBus().registerService(QLatin1String("info.mumble.mumble")); QDBusConnection::sessionBus().registerService(QLatin1String("net.sourceforge.mumble.mumble")); #endif