summaryrefslogtreecommitdiff
path: root/plugin/src/Caelestia/serviceref.cpp
diff options
context:
space:
mode:
author2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-09-06 15:41:19 +1000
committer2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-09-06 15:41:19 +1000
commitc99e05026f918a44dd43ba58ceaa15ecdd9bb7ad (patch)
tree6452562f778c47e69cdd5900c41e1e3b72d88350 /plugin/src/Caelestia/serviceref.cpp
parentplugin: namespace everything (diff)
downloadcaelestia-shell-c99e05026f918a44dd43ba58ceaa15ecdd9bb7ad.tar.gz
caelestia-shell-c99e05026f918a44dd43ba58ceaa15ecdd9bb7ad.tar.bz2
caelestia-shell-c99e05026f918a44dd43ba58ceaa15ecdd9bb7ad.zip
plugin: abstract service + ref
Diffstat (limited to 'plugin/src/Caelestia/serviceref.cpp')
-rw-r--r--plugin/src/Caelestia/serviceref.cpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/plugin/src/Caelestia/serviceref.cpp b/plugin/src/Caelestia/serviceref.cpp
new file mode 100644
index 0000000..ebda663
--- /dev/null
+++ b/plugin/src/Caelestia/serviceref.cpp
@@ -0,0 +1,43 @@
+#include "serviceref.hpp"
+#include "service.hpp"
+
+#include <QObject>
+
+namespace caelestia {
+
+ServiceRef::ServiceRef(Service* service, QObject* parent)
+ : QObject(parent)
+ , m_service(service) {
+ if (m_service) {
+ m_service->ref();
+ }
+}
+
+ServiceRef::~ServiceRef() {
+ if (m_service) {
+ m_service->unref();
+ }
+}
+
+Service* ServiceRef::service() const {
+ return m_service;
+}
+
+void ServiceRef::setService(Service* service) {
+ if (m_service == service) {
+ return;
+ }
+
+ if (m_service) {
+ m_service->unref();
+ }
+
+ m_service = service;
+ emit serviceChanged();
+
+ if (m_service) {
+ m_service->ref();
+ }
+}
+
+} // namespace caelestia