SineStriker
2023-12-28 39ba3049f01b30c9a99ad8bb8cd94e117d1c3c65
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#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;
    }
 
}