diff --git a/multiscreen-compositor/config.cpp b/multiscreen-compositor/config.cpp index 5ddc26cdb4509d2f3f80729968bd1b8442ecf2f7..58fca3f6ce148edf7ca3b72356af1a9f3437a706 100644 --- a/multiscreen-compositor/config.cpp +++ b/multiscreen-compositor/config.cpp @@ -3,6 +3,7 @@ #include <QDebug> #include <QRegularExpression> #include <QFile> +#include <systemd/sd-daemon.h> void Config::setRotation(const QString &str) { @@ -76,3 +77,9 @@ inline bool Config::rotationIsValid(const QString * rotation ) QStringList validRotations = {"0", "90", "180", "270"}; return validRotations.contains(*rotation); } + +void Config::notifyCompositorReady() +{ + qDebug() << "Notify systemd that the compositor is ready"; + sd_notify(false, "READY=1"); +} diff --git a/multiscreen-compositor/config.h b/multiscreen-compositor/config.h index 610c8c62b017dc5a5f5ff70f9996f97a34a88fdc..d73cdf8601d6a8c88a5b659c8cfc8e832699ce07 100644 --- a/multiscreen-compositor/config.h +++ b/multiscreen-compositor/config.h @@ -12,6 +12,7 @@ public: void setRotation(const QString &str); QString rotation() const; + Q_INVOKABLE void notifyCompositorReady(); private: QString m_rotation; static const QRegularExpression findRotation; diff --git a/multiscreen-compositor/multiscreen-compositor.pro b/multiscreen-compositor/multiscreen-compositor.pro index bf35ffda2e383f6d382f76d7b6d65f1e39c773df..ef4d3be70feb231a6a9c473de602fc14a9cfc4ba 100644 --- a/multiscreen-compositor/multiscreen-compositor.pro +++ b/multiscreen-compositor/multiscreen-compositor.pro @@ -13,6 +13,9 @@ HEADERS += \ message-server.h \ message-serverconnection.h +LIBS += \ + -lsystemd + OTHER_FILES = \ qml/main.qml \ diff --git a/multiscreen-compositor/qml/main.qml b/multiscreen-compositor/qml/main.qml index e7be840ace06ace89d11b57b456e98149b10b41c..b3cd503da0c1894872d237f94877dac68fa3c0b8 100644 --- a/multiscreen-compositor/qml/main.qml +++ b/multiscreen-compositor/qml/main.qml @@ -110,6 +110,15 @@ WaylandCompositor { onIviSurfaceCreated: handleIviSurfaceCreated(iviSurface) } + // ============================================= + // We need to notify systemd when the compositor + // is ready to create surfaces + // ============================================= + onCreatedChanged: { + if (created === true) { + config.notifyCompositorReady(); + } + } onSurfaceRequested: { console.log("Surface requested", client, id, version);