#include "eventobserver_p.h" namespace QWK { EventObserver::EventObserver() : m_dispatcher(nullptr) { } EventObserver::~EventObserver() { if (m_dispatcher) m_dispatcher->removeObserver(this); } EventDispatcher::EventDispatcher() = default; EventDispatcher::~EventDispatcher() { for (const auto &observer : qAsConst(m_observers)) { observer->m_dispatcher = nullptr; } } bool EventDispatcher::dispatch(QEvent *event) { for (const auto &observer : qAsConst(m_observers)) { if (observer->observe(event)) return true; } return true; } void EventDispatcher::addObserver(EventObserver *observer) { if (!observer || observer->m_dispatcher) return; m_observers.append(observer); observer->m_dispatcher = this; } void EventDispatcher::removeObserver(EventObserver *observer) { if (!m_observers.removeOne(observer)) { return; } observer->m_dispatcher = nullptr; } }