Absolute File Name: | /home/qt/qt5_coco/qt5/qtbase/src/widgets/kernel/qgesturemanager.cpp |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | - | |||||||||||||
2 | - | |||||||||||||
3 | - | |||||||||||||
4 | - | |||||||||||||
5 | - | |||||||||||||
6 | const QLoggingCategory &lcGestureManager() { static const QLoggingCategory category("qt.widgets.gestures"); return never executed: category;return category; never executed: }return category; | 0 | ||||||||||||
7 | - | |||||||||||||
8 | - | |||||||||||||
9 | static inline int panTouchPoints() | - | ||||||||||||
10 | { | - | ||||||||||||
11 | - | |||||||||||||
12 | static const char panTouchPointVariable[] = "QT_PAN_TOUCHPOINTS"; | - | ||||||||||||
13 | if (qEnvironmentVariableIsSet(panTouchPointVariable)
| 0 | ||||||||||||
14 | bool ok; | - | ||||||||||||
15 | const int result = qEnvironmentVariableIntValue(panTouchPointVariable, &ok); | - | ||||||||||||
16 | if (ok
| 0 | ||||||||||||
17 | return never executed: result;return result; never executed: return result; | 0 | ||||||||||||
18 | QMessageLogger(__FILE__, 78, __PRETTY_FUNCTION__).warning() << "Ignoring invalid value of " << panTouchPointVariable; | - | ||||||||||||
19 | } never executed: end of block | 0 | ||||||||||||
20 | - | |||||||||||||
21 | - | |||||||||||||
22 | - | |||||||||||||
23 | - | |||||||||||||
24 | return never executed: 2;return 2; never executed: return 2; | 0 | ||||||||||||
25 | } | - | ||||||||||||
26 | - | |||||||||||||
27 | - | |||||||||||||
28 | QGestureManager::QGestureManager(QObject *parent) | - | ||||||||||||
29 | : QObject(parent), state(NotGesture), m_lastCustomGestureId(Qt::CustomGesture) | - | ||||||||||||
30 | { | - | ||||||||||||
31 | qRegisterMetaType<Qt::GestureState>(); | - | ||||||||||||
32 | - | |||||||||||||
33 | - | |||||||||||||
34 | - | |||||||||||||
35 | - | |||||||||||||
36 | - | |||||||||||||
37 | - | |||||||||||||
38 | registerGestureRecognizer(new QPanGestureRecognizer(panTouchPoints())); | - | ||||||||||||
39 | registerGestureRecognizer(new QPinchGestureRecognizer); | - | ||||||||||||
40 | registerGestureRecognizer(new QSwipeGestureRecognizer); | - | ||||||||||||
41 | registerGestureRecognizer(new QTapGestureRecognizer); | - | ||||||||||||
42 | - | |||||||||||||
43 | - | |||||||||||||
44 | - | |||||||||||||
45 | - | |||||||||||||
46 | - | |||||||||||||
47 | - | |||||||||||||
48 | - | |||||||||||||
49 | registerGestureRecognizer(new QTapAndHoldGestureRecognizer); | - | ||||||||||||
50 | - | |||||||||||||
51 | } never executed: end of block | 0 | ||||||||||||
52 | - | |||||||||||||
53 | QGestureManager::~QGestureManager() | - | ||||||||||||
54 | { | - | ||||||||||||
55 | qDeleteAll(m_recognizers); | - | ||||||||||||
56 | for (QForeachContainer<typename QtPrivate::remove_reference<decltype(m_obsoleteGestures.keys())>::type> _container_((m_obsoleteGestures.keys())); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (QGestureRecognizer *recognizer = *_container_.i; _container_.control; _container_.control = 0) { | - | ||||||||||||
57 | qDeleteAll(m_obsoleteGestures.value(recognizer)); | - | ||||||||||||
58 | delete recognizer; | - | ||||||||||||
59 | } never executed: end of block | 0 | ||||||||||||
60 | m_obsoleteGestures.clear(); | - | ||||||||||||
61 | } never executed: end of block | 0 | ||||||||||||
62 | - | |||||||||||||
63 | Qt::GestureType QGestureManager::registerGestureRecognizer(QGestureRecognizer *recognizer) | - | ||||||||||||
64 | { | - | ||||||||||||
65 | QGesture *dummy = recognizer->create(0); | - | ||||||||||||
66 | if (__builtin_expect(!!(!dummy), false)
| 0 | ||||||||||||
67 | QMessageLogger(__FILE__, 127, __PRETTY_FUNCTION__).warning("QGestureManager::registerGestureRecognizer: " | - | ||||||||||||
68 | "the recognizer fails to create a gesture object, skipping registration."); | - | ||||||||||||
69 | return never executed: Qt::GestureType(0);return Qt::GestureType(0); never executed: return Qt::GestureType(0); | 0 | ||||||||||||
70 | } | - | ||||||||||||
71 | Qt::GestureType type = dummy->gestureType(); | - | ||||||||||||
72 | if (type == Qt::CustomGesture
| 0 | ||||||||||||
73 | - | |||||||||||||
74 | ++m_lastCustomGestureId; | - | ||||||||||||
75 | type = Qt::GestureType(m_lastCustomGestureId); | - | ||||||||||||
76 | } never executed: end of block | 0 | ||||||||||||
77 | m_recognizers.insertMulti(type, recognizer); | - | ||||||||||||
78 | delete dummy; | - | ||||||||||||
79 | return never executed: type;return type; never executed: return type; | 0 | ||||||||||||
80 | } | - | ||||||||||||
81 | - | |||||||||||||
82 | void QGestureManager::unregisterGestureRecognizer(Qt::GestureType type) | - | ||||||||||||
83 | { | - | ||||||||||||
84 | QList<QGestureRecognizer *> list = m_recognizers.values(type); | - | ||||||||||||
85 | while (QGestureRecognizer *recognizer = m_recognizers.take(type)
| 0 | ||||||||||||
86 | if (!m_obsoleteGestures.contains(recognizer)
| 0 | ||||||||||||
87 | - | |||||||||||||
88 | m_obsoleteGestures.insert(recognizer, QSet<QGesture *>()); | - | ||||||||||||
89 | } never executed: end of block | 0 | ||||||||||||
90 | } never executed: end of block | 0 | ||||||||||||
91 | for (QForeachContainer<typename QtPrivate::remove_reference<decltype(m_gestureToRecognizer.keys())>::type> _container_((m_gestureToRecognizer.keys())); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (QGesture *g = *_container_.i; _container_.control; _container_.control = 0) { | - | ||||||||||||
92 | QGestureRecognizer *recognizer = m_gestureToRecognizer.value(g); | - | ||||||||||||
93 | if (list.contains(recognizer)
| 0 | ||||||||||||
94 | m_deletedRecognizers.insert(g, recognizer); | - | ||||||||||||
95 | } never executed: end of block | 0 | ||||||||||||
96 | } never executed: end of block | 0 | ||||||||||||
97 | - | |||||||||||||
98 | QMap<ObjectGesture, QList<QGesture *> >::const_iterator iter = m_objectGestures.constBegin(); | - | ||||||||||||
99 | while (iter != m_objectGestures.constEnd()
| 0 | ||||||||||||
100 | ObjectGesture objectGesture = iter.key(); | - | ||||||||||||
101 | if (objectGesture.gesture == type
| 0 | ||||||||||||
102 | for (QForeachContainer<typename QtPrivate::remove_reference<decltype(iter.value())>::type> _container_((iter.value())); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (QGesture *g = *_container_.i; _container_.control; _container_.control = 0) { | - | ||||||||||||
103 | if (QGestureRecognizer *recognizer = m_gestureToRecognizer.value(g)
| 0 | ||||||||||||
104 | m_gestureToRecognizer.remove(g); | - | ||||||||||||
105 | m_obsoleteGestures[recognizer].insert(g); | - | ||||||||||||
106 | } never executed: end of block | 0 | ||||||||||||
107 | } never executed: end of block | 0 | ||||||||||||
108 | } never executed: end of block | 0 | ||||||||||||
109 | ++iter; | - | ||||||||||||
110 | } never executed: end of block | 0 | ||||||||||||
111 | } never executed: end of block | 0 | ||||||||||||
112 | - | |||||||||||||
113 | void QGestureManager::cleanupCachedGestures(QObject *target, Qt::GestureType type) | - | ||||||||||||
114 | { | - | ||||||||||||
115 | QMap<ObjectGesture, QList<QGesture *> >::Iterator iter = m_objectGestures.begin(); | - | ||||||||||||
116 | while (iter != m_objectGestures.end()
| 0 | ||||||||||||
117 | ObjectGesture objectGesture = iter.key(); | - | ||||||||||||
118 | if (objectGesture.gesture == type
| 0 | ||||||||||||
119 | QSet<QGesture *> gestures = iter.value().toSet(); | - | ||||||||||||
120 | for (QHash<QGestureRecognizer *, QSet<QGesture *> >::iterator | - | ||||||||||||
121 | it = m_obsoleteGestures.begin(), e = m_obsoleteGestures.end(); it != e
| 0 | ||||||||||||
122 | it.value() -= gestures; | - | ||||||||||||
123 | } never executed: end of block | 0 | ||||||||||||
124 | for (QForeachContainer<typename QtPrivate::remove_reference<decltype(gestures)>::type> _container_((gestures)); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (QGesture *g = *_container_.i; _container_.control; _container_.control = 0) { | - | ||||||||||||
125 | m_deletedRecognizers.remove(g); | - | ||||||||||||
126 | m_gestureToRecognizer.remove(g); | - | ||||||||||||
127 | m_maybeGestures.remove(g); | - | ||||||||||||
128 | m_activeGestures.remove(g); | - | ||||||||||||
129 | m_gestureOwners.remove(g); | - | ||||||||||||
130 | m_gestureTargets.remove(g); | - | ||||||||||||
131 | m_gesturesToDelete.insert(g); | - | ||||||||||||
132 | } never executed: end of block | 0 | ||||||||||||
133 | - | |||||||||||||
134 | iter = m_objectGestures.erase(iter); | - | ||||||||||||
135 | } never executed: else {end of block | 0 | ||||||||||||
136 | ++iter; | - | ||||||||||||
137 | } never executed: end of block | 0 | ||||||||||||
138 | } | - | ||||||||||||
139 | } never executed: end of block | 0 | ||||||||||||
140 | - | |||||||||||||
141 | - | |||||||||||||
142 | QGesture *QGestureManager::getState(QObject *object, QGestureRecognizer *recognizer, Qt::GestureType type) | - | ||||||||||||
143 | { | - | ||||||||||||
144 | - | |||||||||||||
145 | - | |||||||||||||
146 | - | |||||||||||||
147 | if (object->isWidgetType()
| 0 | ||||||||||||
148 | if (static_cast<
| 0 | ||||||||||||
149 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
150 | } never executed: else if (QGesture *g = qobject_cast<QGesture *>(object)end of block
| 0 | ||||||||||||
151 | return never executed: g;return g; never executed: return g; | 0 | ||||||||||||
152 | - | |||||||||||||
153 | } else { | - | ||||||||||||
154 | ((!(qobject_cast<QGraphicsObject *>(object))) ? qt_assert("qobject_cast<QGraphicsObject *>(object)",__FILE__,214) : qt_noop()); | - | ||||||||||||
155 | QGraphicsObject *graphicsObject = static_cast<QGraphicsObject *>(object); | - | ||||||||||||
156 | if (graphicsObject->QGraphicsItem::d_func()->inDestructor
| 0 | ||||||||||||
157 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
158 | - | |||||||||||||
159 | } never executed: end of block | 0 | ||||||||||||
160 | - | |||||||||||||
161 | - | |||||||||||||
162 | const auto states = m_objectGestures.value(QGestureManager::ObjectGesture(object, type)); | - | ||||||||||||
163 | for (QGesture *state : states) { | - | ||||||||||||
164 | if (m_gestureToRecognizer.value(state) == recognizer
| 0 | ||||||||||||
165 | return never executed: state;return state; never executed: return state; | 0 | ||||||||||||
166 | } never executed: end of block | 0 | ||||||||||||
167 | - | |||||||||||||
168 | ((!(recognizer)) ? qt_assert("recognizer",__FILE__,228) : qt_noop()); | - | ||||||||||||
169 | QGesture *state = recognizer->create(object); | - | ||||||||||||
170 | if (!state
| 0 | ||||||||||||
171 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||
172 | state->setParent(this); | - | ||||||||||||
173 | if (state->gestureType() == Qt::CustomGesture
| 0 | ||||||||||||
174 | - | |||||||||||||
175 | - | |||||||||||||
176 | state->d_func()->gestureType = type; | - | ||||||||||||
177 | if (lcGestureManager().isDebugEnabled()
| 0 | ||||||||||||
178 | state->setObjectName(QString::number((int)type)); never executed: state->setObjectName(QString::number((int)type)); | 0 | ||||||||||||
179 | } never executed: end of block | 0 | ||||||||||||
180 | m_objectGestures[QGestureManager::ObjectGesture(object, type)].append(state); | - | ||||||||||||
181 | m_gestureToRecognizer[state] = recognizer; | - | ||||||||||||
182 | m_gestureOwners[state] = object; | - | ||||||||||||
183 | - | |||||||||||||
184 | return never executed: state;return state; never executed: return state; | 0 | ||||||||||||
185 | } | - | ||||||||||||
186 | - | |||||||||||||
187 | bool QGestureManager::filterEventThroughContexts(const QMultiMap<QObject *, | - | ||||||||||||
188 | Qt::GestureType> &contexts, | - | ||||||||||||
189 | QEvent *event) | - | ||||||||||||
190 | { | - | ||||||||||||
191 | QSet<QGesture *> triggeredGestures; | - | ||||||||||||
192 | QSet<QGesture *> finishedGestures; | - | ||||||||||||
193 | QSet<QGesture *> newMaybeGestures; | - | ||||||||||||
194 | QSet<QGesture *> notGestures; | - | ||||||||||||
195 | - | |||||||||||||
196 | - | |||||||||||||
197 | - | |||||||||||||
198 | - | |||||||||||||
199 | bool consumeEventHint = false; | - | ||||||||||||
200 | - | |||||||||||||
201 | - | |||||||||||||
202 | typedef QMultiMap<QObject *, Qt::GestureType>::const_iterator ContextIterator; | - | ||||||||||||
203 | ContextIterator contextEnd = contexts.end(); | - | ||||||||||||
204 | for (ContextIterator context = contexts.begin(); context != contextEnd
| 0 | ||||||||||||
205 | Qt::GestureType gestureType = context.value(); | - | ||||||||||||
206 | const QMap<Qt::GestureType, QGestureRecognizer *> &const_recognizers = m_recognizers; | - | ||||||||||||
207 | QMap<Qt::GestureType, QGestureRecognizer *>::const_iterator | - | ||||||||||||
208 | typeToRecognizerIterator = const_recognizers.lowerBound(gestureType), | - | ||||||||||||
209 | typeToRecognizerEnd = const_recognizers.upperBound(gestureType); | - | ||||||||||||
210 | for (; typeToRecognizerIterator != typeToRecognizerEnd
| 0 | ||||||||||||
211 | QGestureRecognizer *recognizer = typeToRecognizerIterator.value(); | - | ||||||||||||
212 | QObject *target = context.key(); | - | ||||||||||||
213 | QGesture *state = getState(target, recognizer, gestureType); | - | ||||||||||||
214 | if (!state
| 0 | ||||||||||||
215 | continue; never executed: continue; | 0 | ||||||||||||
216 | QGestureRecognizer::Result recognizerResult = recognizer->recognize(state, target, event); | - | ||||||||||||
217 | QGestureRecognizer::Result recognizerState = recognizerResult & QGestureRecognizer::ResultState_Mask; | - | ||||||||||||
218 | QGestureRecognizer::Result resultHint = recognizerResult & QGestureRecognizer::ResultHint_Mask; | - | ||||||||||||
219 | if (recognizerState == QGestureRecognizer::TriggerGesture
| 0 | ||||||||||||
220 | for (bool qt_category_enabled = lcGestureManager().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 280, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager:Recognizer: gesture triggered: " << state << event; | 0 | ||||||||||||
221 | triggeredGestures << state; | - | ||||||||||||
222 | } never executed: else if (recognizerState == QGestureRecognizer::FinishGestureend of block
| 0 | ||||||||||||
223 | for (bool qt_category_enabled = lcGestureManager().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 283, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager:Recognizer: gesture finished: " << state << event; | 0 | ||||||||||||
224 | finishedGestures << state; | - | ||||||||||||
225 | } never executed: else if (recognizerState == QGestureRecognizer::MayBeGestureend of block
| 0 | ||||||||||||
226 | for (bool qt_category_enabled = lcGestureManager().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 286, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager:Recognizer: maybe gesture: " << state << event; | 0 | ||||||||||||
227 | newMaybeGestures << state; | - | ||||||||||||
228 | } never executed: else if (recognizerState == QGestureRecognizer::CancelGestureend of block
| 0 | ||||||||||||
229 | for (bool qt_category_enabled = lcGestureManager().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 289, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager:Recognizer: not gesture: " << state << event; | 0 | ||||||||||||
230 | notGestures << state; | - | ||||||||||||
231 | } never executed: else if (recognizerState == QGestureRecognizer::Ignoreend of block
| 0 | ||||||||||||
232 | for (bool qt_category_enabled = lcGestureManager().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 292, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager:Recognizer: ignored the event: " << state << event; | 0 | ||||||||||||
233 | } never executed: else {end of block | 0 | ||||||||||||
234 | for (bool qt_category_enabled = lcGestureManager().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 294, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager:Recognizer: hm, lets assume the recognizer" << "ignored the event: " << state << event; | 0 | ||||||||||||
235 | << "ignored the event: " << state << event; never executed: QMessageLogger(__FILE__, 294, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager:Recognizer: hm, lets assume the recognizer" << "ignored the event: " << state << event; | 0 | ||||||||||||
236 | } never executed: end of block | 0 | ||||||||||||
237 | if (resultHint & QGestureRecognizer::ConsumeEventHint
| 0 | ||||||||||||
238 | for (bool qt_category_enabled = lcGestureManager().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 298, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager: we were asked to consume the event: " << state << event; | 0 | ||||||||||||
239 | << state << event; never executed: QMessageLogger(__FILE__, 298, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager: we were asked to consume the event: " << state << event; | 0 | ||||||||||||
240 | consumeEventHint = true; | - | ||||||||||||
241 | } never executed: end of block | 0 | ||||||||||||
242 | } never executed: end of block | 0 | ||||||||||||
243 | } never executed: end of block | 0 | ||||||||||||
244 | if (!triggeredGestures.isEmpty()
| 0 | ||||||||||||
245 | || !newMaybeGestures.isEmpty()
| 0 | ||||||||||||
246 | QSet<QGesture *> startedGestures = triggeredGestures - m_activeGestures; | - | ||||||||||||
247 | triggeredGestures &= m_activeGestures; | - | ||||||||||||
248 | - | |||||||||||||
249 | - | |||||||||||||
250 | QSet<QGesture *> activeToMaybeGestures = m_activeGestures & newMaybeGestures; | - | ||||||||||||
251 | - | |||||||||||||
252 | - | |||||||||||||
253 | QSet<QGesture *> maybeToCanceledGestures = m_maybeGestures & notGestures; | - | ||||||||||||
254 | - | |||||||||||||
255 | - | |||||||||||||
256 | - | |||||||||||||
257 | QSet<QGesture *> canceledGestures = m_activeGestures & notGestures; | - | ||||||||||||
258 | - | |||||||||||||
259 | - | |||||||||||||
260 | m_maybeGestures += newMaybeGestures; | - | ||||||||||||
261 | - | |||||||||||||
262 | - | |||||||||||||
263 | QSet<QGesture *> notMaybeGestures = (startedGestures | triggeredGestures | - | ||||||||||||
264 | | finishedGestures | canceledGestures | - | ||||||||||||
265 | | notGestures); | - | ||||||||||||
266 | m_maybeGestures -= notMaybeGestures; | - | ||||||||||||
267 | - | |||||||||||||
268 | ((!((startedGestures & finishedGestures).isEmpty())) ? qt_assert("(startedGestures & finishedGestures).isEmpty()",__FILE__,328) : qt_noop()); | - | ||||||||||||
269 | ((!((startedGestures & newMaybeGestures).isEmpty())) ? qt_assert("(startedGestures & newMaybeGestures).isEmpty()",__FILE__,329) : qt_noop()); | - | ||||||||||||
270 | ((!((startedGestures & canceledGestures).isEmpty())) ? qt_assert("(startedGestures & canceledGestures).isEmpty()",__FILE__,330) : qt_noop()); | - | ||||||||||||
271 | ((!((finishedGestures & newMaybeGestures).isEmpty())) ? qt_assert("(finishedGestures & newMaybeGestures).isEmpty()",__FILE__,331) : qt_noop()); | - | ||||||||||||
272 | ((!((finishedGestures & canceledGestures).isEmpty())) ? qt_assert("(finishedGestures & canceledGestures).isEmpty()",__FILE__,332) : qt_noop()); | - | ||||||||||||
273 | ((!((canceledGestures & newMaybeGestures).isEmpty())) ? qt_assert("(canceledGestures & newMaybeGestures).isEmpty()",__FILE__,333) : qt_noop()); | - | ||||||||||||
274 | - | |||||||||||||
275 | QSet<QGesture *> notStarted = finishedGestures - m_activeGestures; | - | ||||||||||||
276 | if (!notStarted.isEmpty()
| 0 | ||||||||||||
277 | - | |||||||||||||
278 | - | |||||||||||||
279 | for (QForeachContainer<typename QtPrivate::remove_reference<decltype(notStarted)>::type> _container_((notStarted)); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (QGesture *gesture = *_container_.i; _container_.control; _container_.control = 0) | - | ||||||||||||
280 | gesture->d_func()->state = Qt::GestureStarted; never executed: gesture->d_func()->state = Qt::GestureStarted; | 0 | ||||||||||||
281 | QSet<QGesture *> undeliveredGestures; | - | ||||||||||||
282 | deliverEvents(notStarted, &undeliveredGestures); | - | ||||||||||||
283 | finishedGestures -= undeliveredGestures; | - | ||||||||||||
284 | } never executed: end of block | 0 | ||||||||||||
285 | - | |||||||||||||
286 | m_activeGestures += startedGestures; | - | ||||||||||||
287 | - | |||||||||||||
288 | ((!((m_activeGestures & triggeredGestures).size() == triggeredGestures.size())) ? qt_assert("(m_activeGestures & triggeredGestures).size() == triggeredGestures.size()",__FILE__,348) : qt_noop()); | - | ||||||||||||
289 | m_activeGestures -= finishedGestures; | - | ||||||||||||
290 | m_activeGestures -= activeToMaybeGestures; | - | ||||||||||||
291 | m_activeGestures -= canceledGestures; | - | ||||||||||||
292 | - | |||||||||||||
293 | - | |||||||||||||
294 | for (QForeachContainer<typename QtPrivate::remove_reference<decltype(startedGestures)>::type> _container_((startedGestures)); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (QGesture *gesture = *_container_.i; _container_.control; _container_.control = 0) | - | ||||||||||||
295 | gesture->d_func()->state = Qt::GestureStarted; never executed: gesture->d_func()->state = Qt::GestureStarted; | 0 | ||||||||||||
296 | for (QForeachContainer<typename QtPrivate::remove_reference<decltype(triggeredGestures)>::type> _container_((triggeredGestures)); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (QGesture *gesture = *_container_.i; _container_.control; _container_.control = 0) | - | ||||||||||||
297 | gesture->d_func()->state = Qt::GestureUpdated; never executed: gesture->d_func()->state = Qt::GestureUpdated; | 0 | ||||||||||||
298 | for (QForeachContainer<typename QtPrivate::remove_reference<decltype(finishedGestures)>::type> _container_((finishedGestures)); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (QGesture *gesture = *_container_.i; _container_.control; _container_.control = 0) | - | ||||||||||||
299 | gesture->d_func()->state = Qt::GestureFinished; never executed: gesture->d_func()->state = Qt::GestureFinished; | 0 | ||||||||||||
300 | for (QForeachContainer<typename QtPrivate::remove_reference<decltype(canceledGestures)>::type> _container_((canceledGestures)); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (QGesture *gesture = *_container_.i; _container_.control; _container_.control = 0) | - | ||||||||||||
301 | gesture->d_func()->state = Qt::GestureCanceled; never executed: gesture->d_func()->state = Qt::GestureCanceled; | 0 | ||||||||||||
302 | for (QForeachContainer<typename QtPrivate::remove_reference<decltype(activeToMaybeGestures)>::type> _container_((activeToMaybeGestures)); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (QGesture *gesture = *_container_.i; _container_.control; _container_.control = 0) | - | ||||||||||||
303 | gesture->d_func()->state = Qt::GestureFinished; never executed: gesture->d_func()->state = Qt::GestureFinished; | 0 | ||||||||||||
304 | - | |||||||||||||
305 | if (!m_activeGestures.isEmpty()
| 0 | ||||||||||||
306 | !startedGestures.isEmpty()
| 0 | ||||||||||||
307 | !finishedGestures.isEmpty()
| 0 | ||||||||||||
308 | for (bool qt_category_enabled = lcGestureManager().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 368, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager::filterEventThroughContexts:" << "\n\tactiveGestures:" << m_activeGestures << "\n\tmaybeGestures:" << m_maybeGestures << "\n\tstarted:" << startedGestures << "\n\ttriggered:" << triggeredGestures << "\n\tfinished:" << finishedGestures << "\n\tcanceled:" << canceledGestures << "\n\tmaybe-canceled:" << maybeToCanceledGestures; | 0 | ||||||||||||
309 | << "\n\tactiveGestures:" << m_activeGestures never executed: QMessageLogger(__FILE__, 368, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager::filterEventThroughContexts:" << "\n\tactiveGestures:" << m_activeGestures << "\n\tmaybeGestures:" << m_maybeGestures << "\n\tstarted:" << startedGestures << "\n\ttriggered:" << triggeredGestures << "\n\tfinished:" << finishedGestures << "\n\tcanceled:" << canceledGestures << "\n\tmaybe-canceled:" << maybeToCanceledGestures; | 0 | ||||||||||||
310 | << "\n\tmaybeGestures:" << m_maybeGestures never executed: QMessageLogger(__FILE__, 368, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager::filterEventThroughContexts:" << "\n\tactiveGestures:" << m_activeGestures << "\n\tmaybeGestures:" << m_maybeGestures << "\n\tstarted:" << startedGestures << "\n\ttriggered:" << triggeredGestures << "\n\tfinished:" << finishedGestures << "\n\tcanceled:" << canceledGestures << "\n\tmaybe-canceled:" << maybeToCanceledGestures; | 0 | ||||||||||||
311 | << "\n\tstarted:" << startedGestures never executed: QMessageLogger(__FILE__, 368, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager::filterEventThroughContexts:" << "\n\tactiveGestures:" << m_activeGestures << "\n\tmaybeGestures:" << m_maybeGestures << "\n\tstarted:" << startedGestures << "\n\ttriggered:" << triggeredGestures << "\n\tfinished:" << finishedGestures << "\n\tcanceled:" << canceledGestures << "\n\tmaybe-canceled:" << maybeToCanceledGestures; | 0 | ||||||||||||
312 | << "\n\ttriggered:" << triggeredGestures never executed: QMessageLogger(__FILE__, 368, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager::filterEventThroughContexts:" << "\n\tactiveGestures:" << m_activeGestures << "\n\tmaybeGestures:" << m_maybeGestures << "\n\tstarted:" << startedGestures << "\n\ttriggered:" << triggeredGestures << "\n\tfinished:" << finishedGestures << "\n\tcanceled:" << canceledGestures << "\n\tmaybe-canceled:" << maybeToCanceledGestures; | 0 | ||||||||||||
313 | << "\n\tfinished:" << finishedGestures never executed: QMessageLogger(__FILE__, 368, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager::filterEventThroughContexts:" << "\n\tactiveGestures:" << m_activeGestures << "\n\tmaybeGestures:" << m_maybeGestures << "\n\tstarted:" << startedGestures << "\n\ttriggered:" << triggeredGestures << "\n\tfinished:" << finishedGestures << "\n\tcanceled:" << canceledGestures << "\n\tmaybe-canceled:" << maybeToCanceledGestures; | 0 | ||||||||||||
314 | << "\n\tcanceled:" << canceledGestures never executed: QMessageLogger(__FILE__, 368, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager::filterEventThroughContexts:" << "\n\tactiveGestures:" << m_activeGestures << "\n\tmaybeGestures:" << m_maybeGestures << "\n\tstarted:" << startedGestures << "\n\ttriggered:" << triggeredGestures << "\n\tfinished:" << finishedGestures << "\n\tcanceled:" << canceledGestures << "\n\tmaybe-canceled:" << maybeToCanceledGestures; | 0 | ||||||||||||
315 | << "\n\tmaybe-canceled:" << maybeToCanceledGestures; never executed: QMessageLogger(__FILE__, 368, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager::filterEventThroughContexts:" << "\n\tactiveGestures:" << m_activeGestures << "\n\tmaybeGestures:" << m_maybeGestures << "\n\tstarted:" << startedGestures << "\n\ttriggered:" << triggeredGestures << "\n\tfinished:" << finishedGestures << "\n\tcanceled:" << canceledGestures << "\n\tmaybe-canceled:" << maybeToCanceledGestures; | 0 | ||||||||||||
316 | } never executed: end of block | 0 | ||||||||||||
317 | - | |||||||||||||
318 | QSet<QGesture *> undeliveredGestures; | - | ||||||||||||
319 | deliverEvents(startedGestures+triggeredGestures+finishedGestures+canceledGestures, | - | ||||||||||||
320 | &undeliveredGestures); | - | ||||||||||||
321 | - | |||||||||||||
322 | for (QForeachContainer<typename QtPrivate::remove_reference<decltype(startedGestures)>::type> _container_((startedGestures)); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (QGesture *g = *_container_.i; _container_.control; _container_.control = 0) { | - | ||||||||||||
323 | if (undeliveredGestures.contains(g)
| 0 | ||||||||||||
324 | continue; never executed: continue; | 0 | ||||||||||||
325 | if (g->gestureCancelPolicy() == QGesture::CancelAllInContext
| 0 | ||||||||||||
326 | for (bool qt_category_enabled = lcGestureManager().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 386, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "lets try to cancel some"; | 0 | ||||||||||||
327 | - | |||||||||||||
328 | cancelGesturesForChildren(g); | - | ||||||||||||
329 | } never executed: end of block | 0 | ||||||||||||
330 | } never executed: end of block | 0 | ||||||||||||
331 | - | |||||||||||||
332 | m_activeGestures -= undeliveredGestures; | - | ||||||||||||
333 | - | |||||||||||||
334 | - | |||||||||||||
335 | QSet<QGesture *> endedGestures = | - | ||||||||||||
336 | finishedGestures + canceledGestures + undeliveredGestures + maybeToCanceledGestures; | - | ||||||||||||
337 | for (QForeachContainer<typename QtPrivate::remove_reference<decltype(endedGestures)>::type> _container_((endedGestures)); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (QGesture *gesture = *_container_.i; _container_.control; _container_.control = 0) { | - | ||||||||||||
338 | recycle(gesture); | - | ||||||||||||
339 | m_gestureTargets.remove(gesture); | - | ||||||||||||
340 | } never executed: end of block | 0 | ||||||||||||
341 | } never executed: end of block | 0 | ||||||||||||
342 | - | |||||||||||||
343 | qDeleteAll(m_gesturesToDelete); | - | ||||||||||||
344 | m_gesturesToDelete.clear(); | - | ||||||||||||
345 | - | |||||||||||||
346 | return never executed: consumeEventHint;return consumeEventHint; never executed: return consumeEventHint; | 0 | ||||||||||||
347 | } | - | ||||||||||||
348 | - | |||||||||||||
349 | - | |||||||||||||
350 | void QGestureManager::cancelGesturesForChildren(QGesture *original) | - | ||||||||||||
351 | { | - | ||||||||||||
352 | ((!(original)) ? qt_assert("original",__FILE__,412) : qt_noop()); | - | ||||||||||||
353 | QWidget *originatingWidget = m_gestureTargets.value(original); | - | ||||||||||||
354 | ((!(originatingWidget)) ? qt_assert("originatingWidget",__FILE__,414) : qt_noop()); | - | ||||||||||||
355 | if (!originatingWidget
| 0 | ||||||||||||
356 | return; never executed: return; | 0 | ||||||||||||
357 | - | |||||||||||||
358 | - | |||||||||||||
359 | - | |||||||||||||
360 | - | |||||||||||||
361 | - | |||||||||||||
362 | QSet<QGesture*> cancelledGestures; | - | ||||||||||||
363 | QSet<QGesture*>::Iterator iter = m_activeGestures.begin(); | - | ||||||||||||
364 | while (iter != m_activeGestures.end()
| 0 | ||||||||||||
365 | QWidget *widget = m_gestureTargets.value(*iter); | - | ||||||||||||
366 | - | |||||||||||||
367 | if (widget != originatingWidget
| 0 | ||||||||||||
368 | for (bool qt_category_enabled = lcGestureManager().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 428, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << " found a gesture to cancel" << (*iter); | 0 | ||||||||||||
369 | (*iter)->d_func()->state = Qt::GestureCanceled; | - | ||||||||||||
370 | cancelledGestures << *iter; | - | ||||||||||||
371 | iter = m_activeGestures.erase(iter); | - | ||||||||||||
372 | } never executed: else {end of block | 0 | ||||||||||||
373 | ++iter; | - | ||||||||||||
374 | } never executed: end of block | 0 | ||||||||||||
375 | } | - | ||||||||||||
376 | - | |||||||||||||
377 | - | |||||||||||||
378 | - | |||||||||||||
379 | - | |||||||||||||
380 | QSet<QGesture *> almostCanceledGestures = cancelledGestures; | - | ||||||||||||
381 | while (!almostCanceledGestures.isEmpty()
| 0 | ||||||||||||
382 | QWidget *target = 0; | - | ||||||||||||
383 | QSet<QGesture*> gestures; | - | ||||||||||||
384 | iter = almostCanceledGestures.begin(); | - | ||||||||||||
385 | - | |||||||||||||
386 | while (iter != almostCanceledGestures.end()
| 0 | ||||||||||||
387 | QWidget *widget = m_gestureTargets.value(*iter); | - | ||||||||||||
388 | if (target == 0
| 0 | ||||||||||||
389 | target = widget; never executed: target = widget; | 0 | ||||||||||||
390 | if (target == widget
| 0 | ||||||||||||
391 | gestures << *iter; | - | ||||||||||||
392 | iter = almostCanceledGestures.erase(iter); | - | ||||||||||||
393 | } never executed: else {end of block | 0 | ||||||||||||
394 | ++iter; | - | ||||||||||||
395 | } never executed: end of block | 0 | ||||||||||||
396 | } | - | ||||||||||||
397 | ((!(target)) ? qt_assert("target",__FILE__,457) : qt_noop()); | - | ||||||||||||
398 | - | |||||||||||||
399 | QSet<QGesture*> undeliveredGestures; | - | ||||||||||||
400 | deliverEvents(gestures, &undeliveredGestures); | - | ||||||||||||
401 | } never executed: end of block | 0 | ||||||||||||
402 | - | |||||||||||||
403 | for (iter = cancelledGestures.begin(); iter != cancelledGestures.end()
| 0 | ||||||||||||
404 | recycle(*iter); never executed: recycle(*iter); | 0 | ||||||||||||
405 | } never executed: end of block | 0 | ||||||||||||
406 | - | |||||||||||||
407 | void QGestureManager::cleanupGesturesForRemovedRecognizer(QGesture *gesture) | - | ||||||||||||
408 | { | - | ||||||||||||
409 | QGestureRecognizer *recognizer = m_deletedRecognizers.value(gesture); | - | ||||||||||||
410 | if(!recognizer
| 0 | ||||||||||||
411 | return; never executed: return; | 0 | ||||||||||||
412 | m_deletedRecognizers.remove(gesture); | - | ||||||||||||
413 | if (m_deletedRecognizers.keys(recognizer).isEmpty()
| 0 | ||||||||||||
414 | - | |||||||||||||
415 | qDeleteAll(m_obsoleteGestures.value(recognizer)); | - | ||||||||||||
416 | m_obsoleteGestures.remove(recognizer); | - | ||||||||||||
417 | delete recognizer; | - | ||||||||||||
418 | } never executed: end of block | 0 | ||||||||||||
419 | } never executed: end of block | 0 | ||||||||||||
420 | - | |||||||||||||
421 | - | |||||||||||||
422 | bool QGestureManager::filterEvent(QWidget *receiver, QEvent *event) | - | ||||||||||||
423 | { | - | ||||||||||||
424 | QMap<Qt::GestureType, int> types; | - | ||||||||||||
425 | QMultiMap<QObject *, Qt::GestureType> contexts; | - | ||||||||||||
426 | QWidget *w = receiver; | - | ||||||||||||
427 | typedef QMap<Qt::GestureType, Qt::GestureFlags>::const_iterator ContextIterator; | - | ||||||||||||
428 | if (!w->d_func()->gestureContext.isEmpty()
| 0 | ||||||||||||
429 | for(ContextIterator it = w->d_func()->gestureContext.constBegin(), | - | ||||||||||||
430 | e = w->d_func()->gestureContext.constEnd(); it != e
| 0 | ||||||||||||
431 | types.insert(it.key(), 0); | - | ||||||||||||
432 | contexts.insertMulti(w, it.key()); | - | ||||||||||||
433 | } never executed: end of block | 0 | ||||||||||||
434 | } never executed: end of block | 0 | ||||||||||||
435 | - | |||||||||||||
436 | w = w->isWindow()
| 0 | ||||||||||||
437 | while (w
| 0 | ||||||||||||
438 | { | - | ||||||||||||
439 | for (ContextIterator it = w->d_func()->gestureContext.constBegin(), | - | ||||||||||||
440 | e = w->d_func()->gestureContext.constEnd(); it != e
| 0 | ||||||||||||
441 | if (!(it.value() & Qt::DontStartGestureOnChildren)
| 0 | ||||||||||||
442 | if (!types.contains(it.key())
| 0 | ||||||||||||
443 | types.insert(it.key(), 0); | - | ||||||||||||
444 | contexts.insertMulti(w, it.key()); | - | ||||||||||||
445 | } never executed: end of block | 0 | ||||||||||||
446 | } never executed: end of block | 0 | ||||||||||||
447 | } never executed: end of block | 0 | ||||||||||||
448 | if (w->isWindow()
| 0 | ||||||||||||
449 | break; never executed: break; | 0 | ||||||||||||
450 | w = w->parentWidget(); | - | ||||||||||||
451 | } never executed: end of block | 0 | ||||||||||||
452 | return never executed: contexts.isEmpty() ? false : filterEventThroughContexts(contexts, event);return contexts.isEmpty() ? false : filterEventThroughContexts(contexts, event); never executed: return contexts.isEmpty() ? false : filterEventThroughContexts(contexts, event); | 0 | ||||||||||||
453 | } | - | ||||||||||||
454 | - | |||||||||||||
455 | - | |||||||||||||
456 | bool QGestureManager::filterEvent(QGraphicsObject *receiver, QEvent *event) | - | ||||||||||||
457 | { | - | ||||||||||||
458 | QMap<Qt::GestureType, int> types; | - | ||||||||||||
459 | QMultiMap<QObject *, Qt::GestureType> contexts; | - | ||||||||||||
460 | QGraphicsObject *item = receiver; | - | ||||||||||||
461 | if (!item->QGraphicsItem::d_func()->gestureContext.isEmpty()
| 0 | ||||||||||||
462 | typedef QMap<Qt::GestureType, Qt::GestureFlags>::const_iterator ContextIterator; | - | ||||||||||||
463 | for(ContextIterator it = item->QGraphicsItem::d_func()->gestureContext.constBegin(), | - | ||||||||||||
464 | e = item->QGraphicsItem::d_func()->gestureContext.constEnd(); it != e
| 0 | ||||||||||||
465 | types.insert(it.key(), 0); | - | ||||||||||||
466 | contexts.insertMulti(item, it.key()); | - | ||||||||||||
467 | } never executed: end of block | 0 | ||||||||||||
468 | } never executed: end of block | 0 | ||||||||||||
469 | - | |||||||||||||
470 | item = item->parentObject(); | - | ||||||||||||
471 | while (item
| 0 | ||||||||||||
472 | { | - | ||||||||||||
473 | typedef QMap<Qt::GestureType, Qt::GestureFlags>::const_iterator ContextIterator; | - | ||||||||||||
474 | for (ContextIterator it = item->QGraphicsItem::d_func()->gestureContext.constBegin(), | - | ||||||||||||
475 | e = item->QGraphicsItem::d_func()->gestureContext.constEnd(); it != e
| 0 | ||||||||||||
476 | if (!(it.value() & Qt::DontStartGestureOnChildren)
| 0 | ||||||||||||
477 | if (!types.contains(it.key())
| 0 | ||||||||||||
478 | types.insert(it.key(), 0); | - | ||||||||||||
479 | contexts.insertMulti(item, it.key()); | - | ||||||||||||
480 | } never executed: end of block | 0 | ||||||||||||
481 | } never executed: end of block | 0 | ||||||||||||
482 | } never executed: end of block | 0 | ||||||||||||
483 | item = item->parentObject(); | - | ||||||||||||
484 | } never executed: end of block | 0 | ||||||||||||
485 | return never executed: contexts.isEmpty() ? false : filterEventThroughContexts(contexts, event);return contexts.isEmpty() ? false : filterEventThroughContexts(contexts, event); never executed: return contexts.isEmpty() ? false : filterEventThroughContexts(contexts, event); | 0 | ||||||||||||
486 | } | - | ||||||||||||
487 | - | |||||||||||||
488 | - | |||||||||||||
489 | bool QGestureManager::filterEvent(QObject *receiver, QEvent *event) | - | ||||||||||||
490 | { | - | ||||||||||||
491 | - | |||||||||||||
492 | - | |||||||||||||
493 | QWidgetWindow *widgetWindow = qobject_cast<QWidgetWindow *>(receiver); | - | ||||||||||||
494 | - | |||||||||||||
495 | if (widgetWindow
| 0 | ||||||||||||
496 | return never executed: filterEvent(widgetWindow->widget(), event);return filterEvent(widgetWindow->widget(), event); never executed: return filterEvent(widgetWindow->widget(), event); | 0 | ||||||||||||
497 | - | |||||||||||||
498 | QGesture *state = qobject_cast<QGesture *>(receiver); | - | ||||||||||||
499 | if (!state
| 0 | ||||||||||||
500 | return never executed: false;return false; never executed: return false; | 0 | ||||||||||||
501 | QMultiMap<QObject *, Qt::GestureType> contexts; | - | ||||||||||||
502 | contexts.insert(state, state->gestureType()); | - | ||||||||||||
503 | return never executed: filterEventThroughContexts(contexts, event);return filterEventThroughContexts(contexts, event); never executed: return filterEventThroughContexts(contexts, event); | 0 | ||||||||||||
504 | } | - | ||||||||||||
505 | - | |||||||||||||
506 | void QGestureManager::getGestureTargets(const QSet<QGesture*> &gestures, | - | ||||||||||||
507 | QHash<QWidget *, QList<QGesture *> > *conflicts, | - | ||||||||||||
508 | QHash<QWidget *, QList<QGesture *> > *normal) | - | ||||||||||||
509 | { | - | ||||||||||||
510 | typedef QHash<Qt::GestureType, QHash<QWidget *, QGesture *> > GestureByTypes; | - | ||||||||||||
511 | GestureByTypes gestureByTypes; | - | ||||||||||||
512 | - | |||||||||||||
513 | - | |||||||||||||
514 | for (QForeachContainer<typename QtPrivate::remove_reference<decltype(gestures)>::type> _container_((gestures)); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (QGesture *gesture = *_container_.i; _container_.control; _container_.control = 0) { | - | ||||||||||||
515 | QWidget *receiver = m_gestureTargets.value(gesture, 0); | - | ||||||||||||
516 | ((!(receiver)) ? qt_assert("receiver",__FILE__,576) : qt_noop()); | - | ||||||||||||
517 | if (receiver
| 0 | ||||||||||||
518 | gestureByTypes[gesture->gestureType()].insert(receiver, gesture); never executed: gestureByTypes[gesture->gestureType()].insert(receiver, gesture); | 0 | ||||||||||||
519 | } never executed: end of block | 0 | ||||||||||||
520 | - | |||||||||||||
521 | - | |||||||||||||
522 | for (GestureByTypes::const_iterator git = gestureByTypes.cbegin(), gend = gestureByTypes.cend(); git != gend
| 0 | ||||||||||||
523 | const QHash<QWidget *, QGesture *> &gestures = git.value(); | - | ||||||||||||
524 | for (QHash<QWidget *, QGesture *>::const_iterator wit = gestures.cbegin(), wend = gestures.cend(); wit != wend
| 0 | ||||||||||||
525 | QWidget *widget = wit.key(); | - | ||||||||||||
526 | QWidget *w = widget->parentWidget(); | - | ||||||||||||
527 | while (w
| 0 | ||||||||||||
528 | QMap<Qt::GestureType, Qt::GestureFlags>::const_iterator it | - | ||||||||||||
529 | = w->d_func()->gestureContext.constFind(git.key()); | - | ||||||||||||
530 | if (it != w->d_func()->gestureContext.constEnd()
| 0 | ||||||||||||
531 | - | |||||||||||||
532 | if (!(it.value() & Qt::DontStartGestureOnChildren)
| 0 | ||||||||||||
533 | - | |||||||||||||
534 | (*conflicts)[widget].append(wit.value()); | - | ||||||||||||
535 | break; never executed: break; | 0 | ||||||||||||
536 | } | - | ||||||||||||
537 | } never executed: end of block | 0 | ||||||||||||
538 | if (w->isWindow()
| 0 | ||||||||||||
539 | w = 0; | - | ||||||||||||
540 | break; never executed: break; | 0 | ||||||||||||
541 | } | - | ||||||||||||
542 | w = w->parentWidget(); | - | ||||||||||||
543 | } never executed: end of block | 0 | ||||||||||||
544 | if (!w
| 0 | ||||||||||||
545 | (* never executed: normal)[widget].append(wit.value());(*normal)[widget].append(wit.value()); never executed: (*normal)[widget].append(wit.value()); | 0 | ||||||||||||
546 | } never executed: end of block | 0 | ||||||||||||
547 | } never executed: end of block | 0 | ||||||||||||
548 | } never executed: end of block | 0 | ||||||||||||
549 | - | |||||||||||||
550 | void QGestureManager::deliverEvents(const QSet<QGesture *> &gestures, | - | ||||||||||||
551 | QSet<QGesture *> *undeliveredGestures) | - | ||||||||||||
552 | { | - | ||||||||||||
553 | if (gestures.isEmpty()
| 0 | ||||||||||||
554 | return; never executed: return; | 0 | ||||||||||||
555 | - | |||||||||||||
556 | typedef QHash<QWidget *, QList<QGesture *> > GesturesPerWidget; | - | ||||||||||||
557 | GesturesPerWidget conflictedGestures; | - | ||||||||||||
558 | GesturesPerWidget normalStartedGestures; | - | ||||||||||||
559 | - | |||||||||||||
560 | QSet<QGesture *> startedGestures; | - | ||||||||||||
561 | - | |||||||||||||
562 | for (QSet<QGesture *>::const_iterator it = gestures.begin(), | - | ||||||||||||
563 | e = gestures.end(); it != e
| 0 | ||||||||||||
564 | QGesture *gesture = *it; | - | ||||||||||||
565 | QWidget *target = m_gestureTargets.value(gesture, 0); | - | ||||||||||||
566 | if (!target
| 0 | ||||||||||||
567 | - | |||||||||||||
568 | ((!(gesture->state() == Qt::GestureStarted)) ? qt_assert("gesture->state() == Qt::GestureStarted",__FILE__,628) : qt_noop()); | - | ||||||||||||
569 | if (gesture->hasHotSpot()
| 0 | ||||||||||||
570 | - | |||||||||||||
571 | QPoint pt = gesture->hotSpot().toPoint(); | - | ||||||||||||
572 | if (QWidget *topLevel = QApplication::topLevelAt(pt)
| 0 | ||||||||||||
573 | QWidget *child = topLevel->childAt(topLevel->mapFromGlobal(pt)); | - | ||||||||||||
574 | target = child
| 0 | ||||||||||||
575 | } never executed: end of block | 0 | ||||||||||||
576 | } never executed: else {end of block | 0 | ||||||||||||
577 | - | |||||||||||||
578 | QObject *context = m_gestureOwners.value(gesture, 0); | - | ||||||||||||
579 | if (context->isWidgetType()
| 0 | ||||||||||||
580 | target = static_cast<QWidget *>(context); never executed: target = static_cast<QWidget *>(context); | 0 | ||||||||||||
581 | } never executed: end of block | 0 | ||||||||||||
582 | if (target
| 0 | ||||||||||||
583 | m_gestureTargets.insert(gesture, target); never executed: m_gestureTargets.insert(gesture, target); | 0 | ||||||||||||
584 | } never executed: end of block | 0 | ||||||||||||
585 | - | |||||||||||||
586 | Qt::GestureType gestureType = gesture->gestureType(); | - | ||||||||||||
587 | ((!(gestureType != Qt::CustomGesture)) ? qt_assert("gestureType != Qt::CustomGesture",__FILE__,647) : qt_noop()); | - | ||||||||||||
588 | (void)gestureType;; | - | ||||||||||||
589 | - | |||||||||||||
590 | if (__builtin_expect(!!(!target), false)
| 0 | ||||||||||||
591 | for (bool qt_category_enabled = lcGestureManager().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 651, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager::deliverEvent: could not find the target for gesture" << gesture->gestureType(); | 0 | ||||||||||||
592 | << gesture->gestureType(); never executed: QMessageLogger(__FILE__, 651, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager::deliverEvent: could not find the target for gesture" << gesture->gestureType(); | 0 | ||||||||||||
593 | QMessageLogger(__FILE__, 653, __PRETTY_FUNCTION__).warning("QGestureManager::deliverEvent: could not find the target for gesture"); | - | ||||||||||||
594 | undeliveredGestures->insert(gesture); | - | ||||||||||||
595 | } never executed: else {end of block | 0 | ||||||||||||
596 | if (gesture->state() == Qt::GestureStarted
| 0 | ||||||||||||
597 | startedGestures.insert(gesture); | - | ||||||||||||
598 | } never executed: else {end of block | 0 | ||||||||||||
599 | normalStartedGestures[target].append(gesture); | - | ||||||||||||
600 | } never executed: end of block | 0 | ||||||||||||
601 | } | - | ||||||||||||
602 | } | - | ||||||||||||
603 | - | |||||||||||||
604 | getGestureTargets(startedGestures, &conflictedGestures, &normalStartedGestures); | - | ||||||||||||
605 | for (bool qt_category_enabled = lcGestureManager().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 665, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager::deliverEvents:" << "\nstarted: " << startedGestures << "\nconflicted: " << conflictedGestures << "\nnormal: " << normalStartedGestures << "\n"; | 0 | ||||||||||||
606 | << "\nstarted: " << startedGestures never executed: QMessageLogger(__FILE__, 665, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager::deliverEvents:" << "\nstarted: " << startedGestures << "\nconflicted: " << conflictedGestures << "\nnormal: " << normalStartedGestures << "\n"; | 0 | ||||||||||||
607 | << "\nconflicted: " << conflictedGestures never executed: QMessageLogger(__FILE__, 665, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager::deliverEvents:" << "\nstarted: " << startedGestures << "\nconflicted: " << conflictedGestures << "\nnormal: " << normalStartedGestures << "\n"; | 0 | ||||||||||||
608 | << "\nnormal: " << normalStartedGestures never executed: QMessageLogger(__FILE__, 665, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager::deliverEvents:" << "\nstarted: " << startedGestures << "\nconflicted: " << conflictedGestures << "\nnormal: " << normalStartedGestures << "\n"; | 0 | ||||||||||||
609 | << "\n"; never executed: QMessageLogger(__FILE__, 665, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager::deliverEvents:" << "\nstarted: " << startedGestures << "\nconflicted: " << conflictedGestures << "\nnormal: " << normalStartedGestures << "\n"; | 0 | ||||||||||||
610 | - | |||||||||||||
611 | - | |||||||||||||
612 | for (GesturesPerWidget::const_iterator it = conflictedGestures.constBegin(), | - | ||||||||||||
613 | e = conflictedGestures.constEnd(); it != e
| 0 | ||||||||||||
614 | QWidget *receiver = it.key(); | - | ||||||||||||
615 | QList<QGesture *> gestures = it.value(); | - | ||||||||||||
616 | for (bool qt_category_enabled = lcGestureManager().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 676, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager::deliverEvents: sending GestureOverride to" << receiver << "gestures:" << gestures; | 0 | ||||||||||||
617 | << receiver never executed: QMessageLogger(__FILE__, 676, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager::deliverEvents: sending GestureOverride to" << receiver << "gestures:" << gestures; | 0 | ||||||||||||
618 | << "gestures:" << gestures; never executed: QMessageLogger(__FILE__, 676, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager::deliverEvents: sending GestureOverride to" << receiver << "gestures:" << gestures; | 0 | ||||||||||||
619 | QGestureEvent event(gestures); | - | ||||||||||||
620 | event.t = QEvent::GestureOverride; | - | ||||||||||||
621 | - | |||||||||||||
622 | event.ignore(); | - | ||||||||||||
623 | for (QForeachContainer<typename QtPrivate::remove_reference<decltype(gestures)>::type> _container_((gestures)); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (QGesture *g = *_container_.i; _container_.control; _container_.control = 0) | - | ||||||||||||
624 | event.setAccepted(g, false); never executed: event.setAccepted(g, false); | 0 | ||||||||||||
625 | - | |||||||||||||
626 | QApplication::sendEvent(receiver, &event); | - | ||||||||||||
627 | bool eventAccepted = event.isAccepted(); | - | ||||||||||||
628 | const auto eventGestures = event.gestures(); | - | ||||||||||||
629 | for (QGesture *gesture : eventGestures) { | - | ||||||||||||
630 | if (eventAccepted
| 0 | ||||||||||||
631 | QWidget *w = event.m_targetWidgets.value(gesture->gestureType(), 0); | - | ||||||||||||
632 | ((!(w)) ? qt_assert("w",__FILE__,692) : qt_noop()); | - | ||||||||||||
633 | for (bool qt_category_enabled = lcGestureManager().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 693, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "override event: gesture was accepted:" << gesture << w; | 0 | ||||||||||||
634 | QList<QGesture *> &gestures = normalStartedGestures[w]; | - | ||||||||||||
635 | gestures.append(gesture); | - | ||||||||||||
636 | - | |||||||||||||
637 | m_gestureTargets[gesture] = w; | - | ||||||||||||
638 | } never executed: else {end of block | 0 | ||||||||||||
639 | for (bool qt_category_enabled = lcGestureManager().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 699, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "override event: gesture wasn't accepted. putting back:" << gesture; | 0 | ||||||||||||
640 | QList<QGesture *> &gestures = normalStartedGestures[receiver]; | - | ||||||||||||
641 | gestures.append(gesture); | - | ||||||||||||
642 | } never executed: end of block | 0 | ||||||||||||
643 | } | - | ||||||||||||
644 | } never executed: end of block | 0 | ||||||||||||
645 | - | |||||||||||||
646 | - | |||||||||||||
647 | for (GesturesPerWidget::const_iterator it = normalStartedGestures.constBegin(), | - | ||||||||||||
648 | e = normalStartedGestures.constEnd(); it != e
| 0 | ||||||||||||
649 | if (!it.value().isEmpty()
| 0 | ||||||||||||
650 | for (bool qt_category_enabled = lcGestureManager().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 710, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager::deliverEvents: sending to" << it.key() << "gestures:" << it.value(); | 0 | ||||||||||||
651 | << "gestures:" << it.value(); never executed: QMessageLogger(__FILE__, 710, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager::deliverEvents: sending to" << it.key() << "gestures:" << it.value(); | 0 | ||||||||||||
652 | QGestureEvent event(it.value()); | - | ||||||||||||
653 | QApplication::sendEvent(it.key(), &event); | - | ||||||||||||
654 | bool eventAccepted = event.isAccepted(); | - | ||||||||||||
655 | const auto eventGestures = event.gestures(); | - | ||||||||||||
656 | for (QGesture *gesture : eventGestures) { | - | ||||||||||||
657 | if (gesture->state() == Qt::GestureStarted
| 0 | ||||||||||||
658 | (eventAccepted
| 0 | ||||||||||||
659 | QWidget *w = event.m_targetWidgets.value(gesture->gestureType(), 0); | - | ||||||||||||
660 | ((!(w)) ? qt_assert("w",__FILE__,720) : qt_noop()); | - | ||||||||||||
661 | for (bool qt_category_enabled = lcGestureManager().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 721, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "started gesture was delivered and accepted by" << w; | 0 | ||||||||||||
662 | m_gestureTargets[gesture] = w; | - | ||||||||||||
663 | } never executed: end of block | 0 | ||||||||||||
664 | } never executed: end of block | 0 | ||||||||||||
665 | } never executed: end of block | 0 | ||||||||||||
666 | } never executed: end of block | 0 | ||||||||||||
667 | } never executed: end of block | 0 | ||||||||||||
668 | - | |||||||||||||
669 | void QGestureManager::recycle(QGesture *gesture) | - | ||||||||||||
670 | { | - | ||||||||||||
671 | QGestureRecognizer *recognizer = m_gestureToRecognizer.value(gesture, 0); | - | ||||||||||||
672 | if (recognizer
| 0 | ||||||||||||
673 | gesture->setGestureCancelPolicy(QGesture::CancelNone); | - | ||||||||||||
674 | recognizer->reset(gesture); | - | ||||||||||||
675 | m_activeGestures.remove(gesture); | - | ||||||||||||
676 | } never executed: else {end of block | 0 | ||||||||||||
677 | cleanupGesturesForRemovedRecognizer(gesture); | - | ||||||||||||
678 | } never executed: end of block | 0 | ||||||||||||
679 | } | - | ||||||||||||
680 | - | |||||||||||||
681 | bool QGestureManager::gesturePending(QObject *o) | - | ||||||||||||
682 | { | - | ||||||||||||
683 | const QGestureManager *gm = QGestureManager::instance(); | - | ||||||||||||
684 | return never executed: gm && gm->m_gestureOwners.key(o);return gm && gm->m_gestureOwners.key(o); never executed: return gm && gm->m_gestureOwners.key(o); | 0 | ||||||||||||
685 | } | - | ||||||||||||
686 | - | |||||||||||||
687 | - | |||||||||||||
688 | - | |||||||||||||
689 | - | |||||||||||||
690 | - | |||||||||||||
Switch to Source code | Preprocessed file |