#include "bus.hpp" // NOLINT #include #include #include #include #include #include #include #include #include #include #include namespace qs::dbus { Q_LOGGING_CATEGORY(logDbus, "quickshell.dbus", QtWarningMsg); void tryLaunchService( QObject* parent, QDBusConnection& connection, const QString& serviceName, const std::function& callback ) { qCDebug(logDbus) << "Attempting to launch service" << serviceName; auto message = QDBusMessage::createMethodCall( "org.freedesktop.DBus", "/org/freedesktop/DBus", "org.freedesktop.DBus", "StartServiceByName" ); message << serviceName << 0u; auto pendingCall = connection.asyncCall(message); auto* call = new QDBusPendingCallWatcher(pendingCall, parent); auto responseCallback = [callback, serviceName](QDBusPendingCallWatcher* call) { const QDBusPendingReply reply = *call; if (reply.isError()) { qCWarning(logDbus).noquote().nospace() << "Could not launch service " << serviceName << ": " << reply.error(); callback(false); } else { qCDebug(logDbus) << "Service launch successful for" << serviceName; callback(true); } delete call; }; QObject::connect(call, &QDBusPendingCallWatcher::finished, parent, responseCallback); } } // namespace qs::dbus