// Copyright (C) 2023-2024 Stdware Collections // SPDX-License-Identifier: Apache-2.0 #include "sharedeventfilter_p.h" namespace QWK { SharedEventFilter::SharedEventFilter() : m_sharedDispatcher(nullptr) { } SharedEventFilter::~SharedEventFilter() { if (m_sharedDispatcher) m_sharedDispatcher->removeSharedEventFilter(this); } SharedEventDispatcher::SharedEventDispatcher() = default; SharedEventDispatcher::~SharedEventDispatcher() { for (const auto &observer : std::as_const(m_sharedEventFilters)) { observer->m_sharedDispatcher = nullptr; } } bool SharedEventDispatcher::sharedDispatch(QObject *obj, QEvent *event) { for (const auto &ef : std::as_const(m_sharedEventFilters)) { if (ef->sharedEventFilter(obj, event)) return true; } return false; } void SharedEventDispatcher::installSharedEventFilter(SharedEventFilter *filter) { if (!filter || filter->m_sharedDispatcher) return; m_sharedEventFilters.append(filter); filter->m_sharedDispatcher = this; } void SharedEventDispatcher::removeSharedEventFilter(SharedEventFilter *filter) { if (!m_sharedEventFilters.removeOne(filter)) { return; } filter->m_sharedDispatcher = nullptr; } }