diff --git a/CMakeLists.txt b/CMakeLists.txt index 1226342..4ed8374 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -87,8 +87,9 @@ include(cmake/util.cmake) add_compile_options(-Wall -Wextra -Wno-vla-cxx-extension) -# pipewire defines this, breaking PCH +# pipewire defines these, breaking PCH add_compile_definitions(_REENTRANT) +add_compile_options(-fno-strict-overflow) if (FRAME_POINTERS) add_compile_options(-fno-omit-frame-pointer) diff --git a/src/core/qmlglobal.cpp b/src/core/qmlglobal.cpp index 35504f6..6cac3aa 100644 --- a/src/core/qmlglobal.cpp +++ b/src/core/qmlglobal.cpp @@ -26,6 +26,7 @@ #include "../io/processcore.hpp" #include "generation.hpp" #include "iconimageprovider.hpp" +#include "instanceinfo.hpp" #include "paths.hpp" #include "qmlscreen.hpp" #include "rootwrapper.hpp" @@ -153,6 +154,22 @@ qint32 QuickshellGlobal::processId() const { // NOLINT return getpid(); } +QString QuickshellGlobal::instanceId() const { // NOLINT + return InstanceInfo::CURRENT.instanceId; +} + +QString QuickshellGlobal::shellId() const { // NOLINT + return InstanceInfo::CURRENT.shellId; +} + +QString QuickshellGlobal::appId() const { // NOLINT + return InstanceInfo::CURRENT.appId; +} + +QDateTime QuickshellGlobal::launchTime() const { // NOLINT + return InstanceInfo::CURRENT.launchTime; +} + qsizetype QuickshellGlobal::screensCount(QQmlListProperty* /*unused*/) { return QuickshellTracked::instance()->screens.size(); } diff --git a/src/core/qmlglobal.hpp b/src/core/qmlglobal.hpp index 94b42f6..72055df 100644 --- a/src/core/qmlglobal.hpp +++ b/src/core/qmlglobal.hpp @@ -17,6 +17,7 @@ #include "../io/processcore.hpp" #include "doc.hpp" +#include "instanceinfo.hpp" #include "qmlscreen.hpp" ///! Accessor for some options under the Quickshell type. @@ -83,6 +84,21 @@ class QuickshellGlobal: public QObject { // clang-format off /// Quickshell's process id. Q_PROPERTY(qint32 processId READ processId CONSTANT); + /// A unique identifier for this Quickshell instance + Q_PROPERTY(QString instanceId READ instanceId CONSTANT) + /// The shell ID, used to differentiate between different shell configurations. + /// + /// Defaults to a stable value derived from the config path. + /// Can be overridden with `//@ pragma ShellId ` in the root qml file. + Q_PROPERTY(QString shellId READ shellId CONSTANT) + /// The desktop application ID. + /// + /// Defaults to `org.quickshell`. + /// Can be overridden with `//@ pragma AppId ` in the root qml file + /// or the `QS_APP_ID` environment variable. + Q_PROPERTY(QString appId READ appId CONSTANT) + /// The time at which this Quickshell instance was launched. + Q_PROPERTY(QDateTime launchTime READ launchTime CONSTANT) /// All currently connected screens. /// /// This property updates as connected screens change. @@ -149,6 +165,10 @@ class QuickshellGlobal: public QObject { public: [[nodiscard]] qint32 processId() const; + [[nodiscard]] QString instanceId() const; + [[nodiscard]] QString shellId() const; + [[nodiscard]] QString appId() const; + [[nodiscard]] QDateTime launchTime() const; QQmlListProperty screens();