diff --git a/src/core/treeland.cpp b/src/core/treeland.cpp index a6742f696..b6ea02d88 100644 --- a/src/core/treeland.cpp +++ b/src/core/treeland.cpp @@ -34,6 +34,7 @@ using namespace DDM; #include #include +#include #include #include #include @@ -265,6 +266,50 @@ class TreelandPrivate : public QObject std::map pluginTs; }; + +class Compositor1Adaptor: public QDBusAbstractAdaptor +{ + Q_OBJECT + Q_CLASSINFO("D-Bus Interface", "org.deepin.Compositor1") + Q_CLASSINFO("D-Bus Introspection", + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "") +public: + Compositor1Adaptor(Treeland *parent) + : QDBusAbstractAdaptor(parent) + { + setAutoRelaySignals(true); + } + + inline Treeland *parent() const + { return static_cast(QObject::parent()); } + +public Q_SLOTS: // METHODS + + bool ActivateWayland(const QDBusUnixFileDescriptor &fd) + { + return parent()->ActivateWayland(fd); + } + + void XWaylandName() + { + parent()->XWaylandName(); + } + +Q_SIGNALS: // SIGNALS + void SessionChanged(); +}; + Treeland::Treeland() : QObject() , d_ptr(std::make_unique(this)) @@ -310,16 +355,14 @@ Treeland::Treeland() } } + new Compositor1Adaptor(this); + // init dbus after QML engine loaded. QDBusConnection::systemBus().registerService("org.deepin.Compositor1"); - QDBusConnection::systemBus().registerObject("/org/deepin/Compositor1", - this, - QDBusConnection::ExportAllSlots); + QDBusConnection::systemBus().registerObject("/org/deepin/Compositor1", this); QDBusConnection::sessionBus().registerService("org.deepin.Compositor1"); - QDBusConnection::sessionBus().registerObject("/org/deepin/Compositor1", - this, - QDBusConnection::ExportAllSlots); + QDBusConnection::sessionBus().registerObject("/org/deepin/Compositor1", this); #ifdef QT_DEBUG QDir dir(QStringLiteral(TREELAND_PLUGINS_OUTPUT_PATH)); diff --git a/src/core/treeland.h b/src/core/treeland.h index 8e8c98edd..3ba2bbf9c 100644 --- a/src/core/treeland.h +++ b/src/core/treeland.h @@ -30,20 +30,6 @@ class Treeland { Q_OBJECT Q_DECLARE_PRIVATE(Treeland) - Q_CLASSINFO("D-Bus Interface", "org.deepin.Compositor1") - Q_CLASSINFO("D-Bus Introspection", - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - "") public: explicit Treeland(); diff --git a/src/greeter/greeterproxy.cpp b/src/greeter/greeterproxy.cpp index f172ce050..aa6b61b93 100644 --- a/src/greeter/greeterproxy.cpp +++ b/src/greeter/greeterproxy.cpp @@ -434,13 +434,15 @@ void GreeterProxy::readyRead() } break; case DaemonMessages::UserLoggedIn: { QString user; - input >> user; + int sessionId; + input >> user >> sessionId; // This will happen after a crash recovery of treeland qCInfo(treelandGreeter) << "User " << user << " is already logged in"; auto userPtr = d->userModel->getUser(user); if (userPtr) { userPtr.get()->setLogined(true); + Q_EMIT d->userModel->userLoggedIn(user, sessionId); } else { qCWarning(treelandGreeter) << "User " << user << " logged in but not found"; } diff --git a/src/systemd-socket.cpp b/src/systemd-socket.cpp index 2281fc204..89d3a3d6a 100644 --- a/src/systemd-socket.cpp +++ b/src/systemd-socket.cpp @@ -144,24 +144,12 @@ int main(int argc, char *argv[]) } }; - QDBusServiceWatcher *compositorWatcher = - new QDBusServiceWatcher("org.deepin.Compositor1", - connection, - QDBusServiceWatcher::WatchForRegistration); - - QObject::connect(compositorWatcher, - &QDBusServiceWatcher::serviceRegistered, - compositorWatcher, - activateFd); - - // Listen to SessionChanged signal and activate fd when session changed connection.connect("org.deepin.Compositor1", "/org/deepin/Compositor1", "org.deepin.Compositor1", "SessionChanged", new SignalReceiver(activateFd), SLOT(onSessionChanged())); - activateFd(); };