summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libcamera/meson.build1
-rw-r--r--src/libcamera/object.cpp50
-rw-r--r--src/libcamera/signal.cpp5
3 files changed, 56 insertions, 0 deletions
diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build
index c5354c13..8384cd0a 100644
--- a/src/libcamera/meson.build
+++ b/src/libcamera/meson.build
@@ -10,6 +10,7 @@ libcamera_sources = files([
'log.cpp',
'media_device.cpp',
'media_object.cpp',
+ 'object.cpp',
'pipeline_handler.cpp',
'request.cpp',
'signal.cpp',
diff --git a/src/libcamera/object.cpp b/src/libcamera/object.cpp
new file mode 100644
index 00000000..826eed6f
--- /dev/null
+++ b/src/libcamera/object.cpp
@@ -0,0 +1,50 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2019, Google Inc.
+ *
+ * object.cpp - Base object
+ */
+
+#include <libcamera/object.h>
+#include <libcamera/signal.h>
+
+/**
+ * \file object.h
+ * \brief Base object to support automatic signal disconnection
+ */
+
+namespace libcamera {
+
+/**
+ * \class Object
+ * \brief Base object to support automatic signal disconnection
+ *
+ * The Object class simplifies signal/slot handling for classes implementing
+ * slots. By inheriting from Object, an object is automatically disconnected
+ * from all connected signals when it gets destroyed.
+ *
+ * \sa Signal
+ */
+
+Object::~Object()
+{
+ for (SignalBase *signal : signals_)
+ signal->disconnect(this);
+}
+
+void Object::connect(SignalBase *signal)
+{
+ signals_.push_back(signal);
+}
+
+void Object::disconnect(SignalBase *signal)
+{
+ for (auto iter = signals_.begin(); iter != signals_.end(); ) {
+ if (*iter == signal)
+ iter = signals_.erase(iter);
+ else
+ iter++;
+ }
+}
+
+}; /* namespace libcamera */
diff --git a/src/libcamera/signal.cpp b/src/libcamera/signal.cpp
index 8d62b5be..cb7daa11 100644
--- a/src/libcamera/signal.cpp
+++ b/src/libcamera/signal.cpp
@@ -47,6 +47,11 @@ namespace libcamera {
* \brief Connect the signal to a member function slot
* \param object The slot object pointer
* \param func The slot member function
+ *
+ * If the typename T inherits from Object, the signal will be automatically
+ * disconnected from the \a func slot of \a object when \a object is destroyed.
+ * Otherwise the caller shall disconnect signals manually before destroying \a
+ * object.
*/
/**