summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/libcamera/event_notifier.h8
-rw-r--r--src/libcamera/event_notifier.cpp17
2 files changed, 23 insertions, 2 deletions
diff --git a/include/libcamera/event_notifier.h b/include/libcamera/event_notifier.h
index 1e9b6da1..f80945c7 100644
--- a/include/libcamera/event_notifier.h
+++ b/include/libcamera/event_notifier.h
@@ -7,11 +7,14 @@
#ifndef __LIBCAMERA_EVENT_NOTIFIER_H__
#define __LIBCAMERA_EVENT_NOTIFIER_H__
+#include <libcamera/object.h>
#include <libcamera/signal.h>
namespace libcamera {
-class EventNotifier
+class Message;
+
+class EventNotifier : public Object
{
public:
enum Type {
@@ -31,6 +34,9 @@ public:
Signal<EventNotifier *> activated;
+protected:
+ void message(Message *msg) override;
+
private:
int fd_;
Type type_;
diff --git a/src/libcamera/event_notifier.cpp b/src/libcamera/event_notifier.cpp
index b32c7ed2..96be2760 100644
--- a/src/libcamera/event_notifier.cpp
+++ b/src/libcamera/event_notifier.cpp
@@ -10,6 +10,9 @@
#include <libcamera/camera_manager.h>
#include <libcamera/event_dispatcher.h>
+#include "message.h"
+#include "thread.h"
+
/**
* \file event_notifier.h
* \brief File descriptor event notifier
@@ -103,7 +106,7 @@ void EventNotifier::setEnabled(bool enable)
enabled_ = enable;
- EventDispatcher *dispatcher = CameraManager::instance()->eventDispatcher();
+ EventDispatcher *dispatcher = thread()->eventDispatcher();
if (enable)
dispatcher->registerEventNotifier(this);
else
@@ -119,4 +122,16 @@ void EventNotifier::setEnabled(bool enable)
* parameter.
*/
+void EventNotifier::message(Message *msg)
+{
+ if (msg->type() == Message::ThreadMoveMessage) {
+ if (enabled_) {
+ setEnabled(false);
+ invokeMethod(&EventNotifier::setEnabled, true);
+ }
+ }
+
+ Object::message(msg);
+}
+
} /* namespace libcamera */