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 category; } | - | ||||||||||||||||||
7 | - | |||||||||||||||||||
8 | - | |||||||||||||||||||
9 | static inline int panTouchPoints() | - | ||||||||||||||||||
10 | { | - | ||||||||||||||||||
11 | - | |||||||||||||||||||
12 | static const char panTouchPointVariable[] = "QT_PAN_TOUCHPOINTS"; | - | ||||||||||||||||||
13 | if (qEnvironmentVariableIsSet(panTouchPointVariable)) { | - | ||||||||||||||||||
14 | bool ok; | - | ||||||||||||||||||
15 | const int result = qEnvironmentVariableIntValue(panTouchPointVariable, &ok); | - | ||||||||||||||||||
16 | if (ok && result >= 1) | - | ||||||||||||||||||
17 | return result; | - | ||||||||||||||||||
18 | QMessageLogger(__FILE__, 7278, __PRETTY_FUNCTION__).warning() << "Ignoring invalid value of " << panTouchPointVariable; | - | ||||||||||||||||||
19 | } | - | ||||||||||||||||||
20 | - | |||||||||||||||||||
21 | - | |||||||||||||||||||
22 | - | |||||||||||||||||||
23 | - | |||||||||||||||||||
24 | return 2; | - | ||||||||||||||||||
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 | } | - | ||||||||||||||||||
52 | - | |||||||||||||||||||
53 | QGestureManager::~QGestureManager() | - | ||||||||||||||||||
54 | { | - | ||||||||||||||||||
55 | qDeleteAll(m_recognizers.values());); | - | ||||||||||||||||||
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(!!(!
| 0 | ||||||||||||||||||
67 | QMessageLogger(__FILE__, 121127, __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)) { | - | ||||||||||||||||||
86 | if (!m_obsoleteGestures.contains(recognizer)) { | - | ||||||||||||||||||
87 | - | |||||||||||||||||||
88 | m_obsoleteGestures.insert(recognizer, QSet<QGesture *>()); | - | ||||||||||||||||||
89 | } | - | ||||||||||||||||||
90 | } | - | ||||||||||||||||||
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)) { | - | ||||||||||||||||||
94 | m_deletedRecognizers.insert(g, recognizer); | - | ||||||||||||||||||
95 | } | - | ||||||||||||||||||
96 | } | - | ||||||||||||||||||
97 | - | |||||||||||||||||||
98 | QMap<ObjectGesture, QList<QGesture *> >::const_iterator iter = m_objectGestures.constBegin(); | - | ||||||||||||||||||
99 | while (iter != m_objectGestures.constEnd()) { | - | ||||||||||||||||||
100 | ObjectGesture objectGesture = iter.key(); | - | ||||||||||||||||||
101 | if (objectGesture.gesture == type) { | - | ||||||||||||||||||
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)) { | - | ||||||||||||||||||
104 | m_gestureToRecognizer.remove(g); | - | ||||||||||||||||||
105 | m_obsoleteGestures[recognizer].insert(g); | - | ||||||||||||||||||
106 | } | - | ||||||||||||||||||
107 | } | - | ||||||||||||||||||
108 | } | - | ||||||||||||||||||
109 | ++iter; | - | ||||||||||||||||||
110 | } | - | ||||||||||||||||||
111 | } | - | ||||||||||||||||||
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()) { | - | ||||||||||||||||||
117 | ObjectGesture objectGesture = iter.key(); | - | ||||||||||||||||||
118 | if (objectGesture.gesture == type && target == objectGesture.object) { | - | ||||||||||||||||||
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; ++it) { | - | ||||||||||||||||||
122 | it.value() -= gestures; | - | ||||||||||||||||||
123 | } | - | ||||||||||||||||||
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 | } | - | ||||||||||||||||||
133 | - | |||||||||||||||||||
134 | iter = m_objectGestures.erase(iter); | - | ||||||||||||||||||
135 | } else { | - | ||||||||||||||||||
136 | ++iter; | - | ||||||||||||||||||
137 | } | - | ||||||||||||||||||
138 | } | - | ||||||||||||||||||
139 | } | - | ||||||||||||||||||
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__,208214) : 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 | for (QForeachContainer<typename QtPrivate::remove_reference<decltype(m_objectGestures.value(QGestureManager::ObjectGesture(object, type)))>::type> _container_((const auto states = m_objectGestures.value(QGestureManager::ObjectGesture(object, type)))); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1))); | - | ||||||||||||||||||
163 | for (QGesture *state = *_container_.i; _container_.control; _container_.control = 0: 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__,221228) : 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; ++context) { | - | ||||||||||||||||||
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; ++typeToRecognizerIterator) { | - | ||||||||||||||||||
211 | QGestureRecognizer *recognizer = typeToRecognizerIterator.value(); | - | ||||||||||||||||||
212 | QObject *target = context.key(); | - | ||||||||||||||||||
213 | QGesture *state = getState(target, recognizer, gestureType); | - | ||||||||||||||||||
214 | if (!state) | - | ||||||||||||||||||
215 | continue; | - | ||||||||||||||||||
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) { | - | ||||||||||||||||||
220 | for (bool qt_category_enabled = lcGestureManager().isDebugEnabled(); qt_category_enabled; qt_category_enabled = false) QMessageLogger(__FILE__, 273280, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager:Recognizer: gesture triggered: " << state << event; | - | ||||||||||||||||||
221 | triggeredGestures << state; | - | ||||||||||||||||||
222 | } else if (recognizerState == QGestureRecognizer::FinishGesture) { | - | ||||||||||||||||||
223 | for (bool qt_category_enabled = lcGestureManager().isDebugEnabled(); qt_category_enabled; qt_category_enabled = false) QMessageLogger(__FILE__, 276283, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager:Recognizer: gesture finished: " << state << event; | - | ||||||||||||||||||
224 | finishedGestures << state; | - | ||||||||||||||||||
225 | } else if (recognizerState == QGestureRecognizer::MayBeGesture) { | - | ||||||||||||||||||
226 | for (bool qt_category_enabled = lcGestureManager().isDebugEnabled(); qt_category_enabled; qt_category_enabled = false) QMessageLogger(__FILE__, 279286, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager:Recognizer: maybe gesture: " << state << event; | - | ||||||||||||||||||
227 | newMaybeGestures << state; | - | ||||||||||||||||||
228 | } else if (recognizerState == QGestureRecognizer::CancelGesture) { | - | ||||||||||||||||||
229 | for (bool qt_category_enabled = lcGestureManager().isDebugEnabled(); qt_category_enabled; qt_category_enabled = false) QMessageLogger(__FILE__, 282289, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager:Recognizer: not gesture: " << state << event; | - | ||||||||||||||||||
230 | notGestures << state; | - | ||||||||||||||||||
231 | } else if (recognizerState == QGestureRecognizer::Ignore) { | - | ||||||||||||||||||
232 | for (bool qt_category_enabled = lcGestureManager().isDebugEnabled(); qt_category_enabled; qt_category_enabled = false) QMessageLogger(__FILE__, 285292, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager:Recognizer: ignored the event: " << state << event; | - | ||||||||||||||||||
233 | } else { | - | ||||||||||||||||||
234 | for (bool qt_category_enabled = lcGestureManager().isDebugEnabled(); qt_category_enabled; qt_category_enabled = false) QMessageLogger(__FILE__, 287294, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager:Recognizer: hm, lets assume the recognizer" | - | ||||||||||||||||||
235 | << "ignored the event: " << state << event; | - | ||||||||||||||||||
236 | } | - | ||||||||||||||||||
237 | if (resultHint & QGestureRecognizer::ConsumeEventHint) { | - | ||||||||||||||||||
238 | for (bool qt_category_enabled = lcGestureManager().isDebugEnabled(); qt_category_enabled; qt_category_enabled = false) QMessageLogger(__FILE__, 291298, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager: we were asked to consume the event: " | - | ||||||||||||||||||
239 | << state << event; | - | ||||||||||||||||||
240 | consumeEventHint = true; | - | ||||||||||||||||||
241 | } | - | ||||||||||||||||||
242 | } | - | ||||||||||||||||||
243 | } | - | ||||||||||||||||||
244 | if (!triggeredGestures.isEmpty() || !finishedGestures.isEmpty() | - | ||||||||||||||||||
245 | || !newMaybeGestures.isEmpty() || !notGestures.isEmpty()) { | - | ||||||||||||||||||
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__,321328) : qt_noop()); | - | ||||||||||||||||||
269 | ((!((startedGestures & newMaybeGestures).isEmpty())) ? qt_assert("(startedGestures & newMaybeGestures).isEmpty()",__FILE__,322329) : qt_noop()); | - | ||||||||||||||||||
270 | ((!((startedGestures & canceledGestures).isEmpty())) ? qt_assert("(startedGestures & canceledGestures).isEmpty()",__FILE__,323330) : qt_noop()); | - | ||||||||||||||||||
271 | ((!((finishedGestures & newMaybeGestures).isEmpty())) ? qt_assert("(finishedGestures & newMaybeGestures).isEmpty()",__FILE__,324331) : qt_noop()); | - | ||||||||||||||||||
272 | ((!((finishedGestures & canceledGestures).isEmpty())) ? qt_assert("(finishedGestures & canceledGestures).isEmpty()",__FILE__,325332) : qt_noop()); | - | ||||||||||||||||||
273 | ((!((canceledGestures & newMaybeGestures).isEmpty())) ? qt_assert("(canceledGestures & newMaybeGestures).isEmpty()",__FILE__,326333) : qt_noop()); | - | ||||||||||||||||||
274 | - | |||||||||||||||||||
275 | QSet<QGesture *> notStarted = finishedGestures - m_activeGestures; | - | ||||||||||||||||||
276 | if (!notStarted.isEmpty()) { | - | ||||||||||||||||||
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; | - | ||||||||||||||||||
281 | QSet<QGesture *> undeliveredGestures; | - | ||||||||||||||||||
282 | deliverEvents(notStarted, &undeliveredGestures); | - | ||||||||||||||||||
283 | finishedGestures -= undeliveredGestures; | - | ||||||||||||||||||
284 | } | - | ||||||||||||||||||
285 | - | |||||||||||||||||||
286 | m_activeGestures += startedGestures; | - | ||||||||||||||||||
287 | - | |||||||||||||||||||
288 | ((!((m_activeGestures & triggeredGestures).size() == triggeredGestures.size())) ? qt_assert("(m_activeGestures & triggeredGestures).size() == triggeredGestures.size()",__FILE__,341348) : 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; | - | ||||||||||||||||||
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; | - | ||||||||||||||||||
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; | - | ||||||||||||||||||
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; | - | ||||||||||||||||||
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; | - | ||||||||||||||||||
304 | - | |||||||||||||||||||
305 | if (!m_activeGestures.isEmpty() || !m_maybeGestures.isEmpty() || | - | ||||||||||||||||||
306 | !startedGestures.isEmpty() || !triggeredGestures.isEmpty() || | - | ||||||||||||||||||
307 | !finishedGestures.isEmpty() || !canceledGestures.isEmpty()) { | - | ||||||||||||||||||
308 | for (bool qt_category_enabled = lcGestureManager().isDebugEnabled(); qt_category_enabled; qt_category_enabled = false) QMessageLogger(__FILE__, 361368, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "QGestureManager::filterEventThroughContexts:" | - | ||||||||||||||||||
309 | << "\n\tactiveGestures:" << m_activeGestures | - | ||||||||||||||||||
310 | << "\n\tmaybeGestures:" << m_maybeGestures | - | ||||||||||||||||||
311 | << "\n\tstarted:" << startedGestures | - | ||||||||||||||||||
312 | << "\n\ttriggered:" << triggeredGestures | - | ||||||||||||||||||
313 | << "\n\tfinished:" << finishedGestures | - | ||||||||||||||||||
314 | << "\n\tcanceled:" << canceledGestures | - | ||||||||||||||||||
315 | << "\n\tmaybe-canceled:" << maybeToCanceledGestures; | - | ||||||||||||||||||
316 | } | - | ||||||||||||||||||
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)) | - | ||||||||||||||||||
324 | continue; | - | ||||||||||||||||||
325 | if (g->gestureCancelPolicy() == QGesture::CancelAllInContext) { | - | ||||||||||||||||||
326 | for (bool qt_category_enabled = lcGestureManager().isDebugEnabled(); qt_category_enabled; qt_category_enabled = false) QMessageLogger(__FILE__, 379386, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << "lets try to cancel some"; | - | ||||||||||||||||||
327 | - | |||||||||||||||||||
328 | cancelGesturesForChildren(g); | - | ||||||||||||||||||
329 | } | - | ||||||||||||||||||
330 | } | - | ||||||||||||||||||
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 | } | - | ||||||||||||||||||
341 | } | - | ||||||||||||||||||
342 | - | |||||||||||||||||||
343 | qDeleteAll(m_gesturesToDelete); | - | ||||||||||||||||||
344 | m_gesturesToDelete.clear(); | - | ||||||||||||||||||
345 | - | |||||||||||||||||||
346 | return consumeEventHint; | - | ||||||||||||||||||
347 | } | - | ||||||||||||||||||
348 | - | |||||||||||||||||||
349 | - | |||||||||||||||||||
350 | void QGestureManager::cancelGesturesForChildren(QGesture *original) | - | ||||||||||||||||||
351 | { | - | ||||||||||||||||||
352 | ((!(original)) ? qt_assert("original",__FILE__,405412) : qt_noop()); | - | ||||||||||||||||||
353 | QWidget *originatingWidget = m_gestureTargets.value(original); | - | ||||||||||||||||||
354 | ((!(originatingWidget)) ? qt_assert("originatingWidget",__FILE__,407414) : qt_noop()); | - | ||||||||||||||||||
355 | if (!originatingWidget) | - | ||||||||||||||||||
356 | return; | - | ||||||||||||||||||
357 | - | |||||||||||||||||||
358 | - | |||||||||||||||||||
359 | - | |||||||||||||||||||
360 | - | |||||||||||||||||||
361 | - | |||||||||||||||||||
362 | QSet<QGesture*> cancelledGestures; | - | ||||||||||||||||||
363 | QSet<QGesture*>::Iterator iter = m_activeGestures.begin(); | - | ||||||||||||||||||
364 | while (iter != m_activeGestures.end()) { | - | ||||||||||||||||||
365 | QWidget *widget = m_gestureTargets.value(*iter); | - | ||||||||||||||||||
366 | - | |||||||||||||||||||
367 | if (widget != originatingWidget && originatingWidget->isAncestorOf(widget)) { | - | ||||||||||||||||||
368 | for (bool qt_category_enabled = lcGestureManager().isDebugEnabled(); qt_category_enabled; qt_category_enabled = false) QMessageLogger(__FILE__, 421428, __PRETTY_FUNCTION__, lcGestureManager().categoryName()).debug() << " found a gesture to cancel" << (*iter); | - | ||||||||||||||||||
369 | (*iter)->d_func()->state = Qt::GestureCanceled; | - | ||||||||||||||||||
370 | cancelledGestures << *iter; | - | ||||||||||||||||||
371 | iter = m_activeGestures.erase(iter); | - | ||||||||||||||||||
372 | } else { | - | ||||||||||||||||||
373 | ++iter; | - | ||||||||||||||||||
374 | } | - | ||||||||||||||||||
375 | } | - | ||||||||||||||||||
376 | - | |||||||||||||||||||
377 | - | |||||||||||||||||||
378 | - | |||||||||||||||||||
379 | - | |||||||||||||||||||
380 | QSet<QGesture *> almostCanceledGestures = cancelledGestures; | - | ||||||||||||||||||
381 | while (!almostCanceledGestures.isEmpty()) { | - | ||||||||||||||||||
382 | QWidget *target = 0; | - | ||||||||||||||||||
383 | QSet<QGesture*> gestures; | - | ||||||||||||||||||
384 | iter = almostCanceledGestures.begin(); | - | ||||||||||||||||||
385 | - | |||||||||||||||||||
386 | while (iter != almostCanceledGestures.end()) { | - | ||||||||||||||||||
387 | QWidget *widget = m_gestureTargets.value(*iter); | - | ||||||||||||||||||
388 | if (target == 0) | - | ||||||||||||||||||
389 | target = widget; | - | ||||||||||||||||||
390 | if (target == widget) { | - | ||||||||||||||||||
391 | gestures << *iter; | - | ||||||||||||||||||
392 | iter = almostCanceledGestures.erase(iter); | - | ||||||||||||||||||
393 | } else { | - | ||||||||||||||||||
394 | ++iter; | - | ||||||||||||||||||
395 | } | - | ||||||||||||||||||
396 | } | - | ||||||||||||||||||
397 | ((!(target)) ? qt_assert("target",__FILE__,450457) : qt_noop()); | - | ||||||||||||||||||
398 | - | |||||||||||||||||||
399 | QSet<QGesture*> undeliveredGestures; | - | ||||||||||||||||||
400 | deliverEvents(gestures, &undeliveredGestures); | - | ||||||||||||||||||
401 | } | - | ||||||||||||||||||
402 | - | |||||||||||||||||||
403 | for (iter = cancelledGestures.begin(); iter != cancelledGestures.end(); ++iter) | - | ||||||||||||||||||
404 | recycle(*iter); | - | ||||||||||||||||||
405 | } | - | ||||||||||||||||||
406 | - | |||||||||||||||||||
407 | void QGestureManager::cleanupGesturesForRemovedRecognizer(QGesture *gesture) | - | ||||||||||||||||||
408 | { | - | ||||||||||||||||||
409 | QGestureRecognizer *recognizer = m_deletedRecognizers.value(gesture); | - | ||||||||||||||||||
410 | if(!recognizer) | - | ||||||||||||||||||
411 | return; | - | ||||||||||||||||||
412 | m_deletedRecognizers.remove(gesture); | - | ||||||||||||||||||
413 | if (m_deletedRecognizers.keys(recognizer).isEmpty()) { | - | ||||||||||||||||||
414 | - | |||||||||||||||||||
415 | qDeleteAll(m_obsoleteGestures.value(recognizer)); | - | ||||||||||||||||||
416 | m_obsoleteGestures.remove(recognizer); | - | ||||||||||||||||||
417 | delete recognizer; | - | ||||||||||||||||||
418 | } | - | ||||||||||||||||||
419 | } | - | ||||||||||||||||||
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()) { | - | ||||||||||||||||||
429 | for(ContextIterator it = w->d_func()->gestureContext.constBegin(), | - | ||||||||||||||||||
430 | e = w->d_func()->gestureContext.constEnd(); it != e; ++it) { | - | ||||||||||||||||||
431 | types.insert(it.key(), 0); | - | ||||||||||||||||||
432 | contexts.insertMulti(w, it.key()); | - | ||||||||||||||||||
433 | } | - | ||||||||||||||||||
434 | } | - | ||||||||||||||||||
435 | - | |||||||||||||||||||
436 | w = w->isWindow() ? 0 : w->parentWidget(); | - | ||||||||||||||||||
437 | while (w) | - | ||||||||||||||||||
438 | { | - | ||||||||||||||||||
439 | for (ContextIterator it = w->d_func()->gestureContext.constBegin(), | - | ||||||||||||||||||
440 | e = w->d_func()->gestureContext.constEnd(); it != e; ++it) { | - | ||||||||||||||||||
441 | if (!(it.value() & Qt::DontStartGestureOnChildren)) { | - | ||||||||||||||||||
442 | if (!types.contains(it.key())) { | - | ||||||||||||||||||
443 | types.insert(it.key(), 0); | - | ||||||||||||||||||
444 | contexts.insertMulti(w, it.key()); | - | ||||||||||||||||||
445 | } | - | ||||||||||||||||||
446 | } | - | ||||||||||||||||||
447 | } | - | ||||||||||||||||||
448 | if (w->isWindow()) | - | ||||||||||||||||||
449 | break; | - | ||||||||||||||||||
450 | w = w->parentWidget(); | - | ||||||||||||||||||
451 | } | - | ||||||||||||||||||
452 | return contexts.isEmpty() ? false : filterEventThroughContexts(contexts, event); | - | ||||||||||||||||||
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()) { | - | ||||||||||||||||||
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; ++it) { | - | ||||||||||||||||||
465 | types.insert(it.key(), 0); | - | ||||||||||||||||||
466 | contexts.insertMulti(item, it.key()); | - | ||||||||||||||||||
467 | } | - | ||||||||||||||||||
468 | } | - | ||||||||||||||||||
469 | - | |||||||||||||||||||
470 | item = item->parentObject(); | - | ||||||||||||||||||
471 | while (item) | - | ||||||||||||||||||
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; ++it) { | - | ||||||||||||||||||
476 | if (!(it.value() & Qt::DontStartGestureOnChildren)) { | - | ||||||||||||||||||
477 | if (!types.contains(it.key())) { | - | ||||||||||||||||||
478 | types.insert(it.key(), 0); | - | ||||||||||||||||||
479 | contexts.insertMulti(item, it.key()); | - | ||||||||||||||||||
480 | } | - | ||||||||||||||||||
481 | } | - | ||||||||||||||||||
482 | } | - | ||||||||||||||||||
483 | item = item->parentObject(); | - | ||||||||||||||||||
484 | } | - | ||||||||||||||||||
485 | return contexts.isEmpty() ? false : filterEventThroughContexts(contexts, event); | - | ||||||||||||||||||
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 && widgetWindow->widget()) | - | ||||||||||||||||||
496 | return filterEvent(widgetWindow->widget(), event); | - | ||||||||||||||||||
497 | - | |||||||||||||||||||
498 | QGesture *state = qobject_cast<QGesture *>(receiver); | - | ||||||||||||||||||
499 | if (!state || !m_gestureToRecognizer.contains(state)) | - | ||||||||||||||||||
500 | return false; | - | ||||||||||||||||||
501 | QMultiMap<QObject *, Qt::GestureType> contexts; | - | ||||||||||||||||||
502 | contexts.insert(state, state->gestureType()); | - | ||||||||||||||||||
503 | return filterEventThroughContexts(contexts, event); | - | ||||||||||||||||||
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__,569576) : qt_noop()); | - | ||||||||||||||||||
517 | if (receiver) | - | ||||||||||||||||||
518 | gestureByTypes[gesture->gestureType()].insert(receiver, gesture); | - | ||||||||||||||||||
519 | } | - | ||||||||||||||||||
520 | - | |||||||||||||||||||
521 | - | |||||||||||||||||||
522 | for (GestureByTypes::const_iterator git = gestureByTypes.cbegin(), gend = gestureByTypes.cend(); git != gend; ++git) { | - | ||||||||||||||||||
523 | const QHash<QWidget *, QGesture *> &gestures = git.value(); | - | ||||||||||||||||||
524 | for (QHash<QWidget *, QGesture *>::const_iterator wit = gestures.cbegin(), wend = gestures.cend(); wit != wend; ++wit) { | - | ||||||||||||||||||
525 | QWidget *widget = wit.key(); | - | ||||||||||||||||||
526 | QWidget *w = widget->parentWidget(); | - | ||||||||||||||||||
527 | while (w) { | - | ||||||||||||||||||
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()) { | - | ||||||||||||||||||
531 | - | |||||||||||||||||||
532 | if (!(it.value() & Qt::DontStartGestureOnChildren) && w != widget) { | - | ||||||||||||||||||
533 | - | |||||||||||||||||||
534 | (*conflicts)[widget].append(wit.value()); | - | ||||||||||||||||||
535 | break; | - | ||||||||||||||||||
536 | } | - | ||||||||||||||||||
537 | } | - | ||||||||||||||||||
538 | if (w->isWindow()) { | - | ||||||||||||||||||
539 | w = 0; | - | ||||||||||||||||||
540 | break; | - | ||||||||||||||||||
541 | } | - | ||||||||||||||||||
542 | w = w->parentWidget(); | - | ||||||||||||||||||
543 | } | - | ||||||||||||||||||
544 | if (!w) | - | ||||||||||||||||||
545 | (*normal)[widget].append(wit.value()); | - | ||||||||||||||||||
546 | } | - | ||||||||||||||||||
547 | } | - | ||||||||||||||||||
548 | } | - | ||||||||||||||||||
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__,621628) : 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__,640647) : qt_noop()); | - | ||||||||||||||||||
588 | (void)gestureType;; | - | ||||||||||||||||||
589 | - | |||||||||||||||||||
590 | if (target) {if (gesture->state() == Qt::GestureStarted) { | 0 | ||||||||||||||||||
startedGestures.insert(gesture); | ||||||||||||||||||||
} else { | ||||||||||||||||||||
normalStartedGestures[__builtin_expect(!!(!
| ||||||||||||||||||||
}
| ||||||||||||||||||||
} else
| ||||||||||||||||||||
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__, 652653, __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
| 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 | for (QForeachContainer<typename QtPrivate::remove_reference<decltype(event.gestures())>::type> _container_((const auto eventGestures = event.gestures())); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1)(); | - | ||||||||||||||||||
629 | for (QGesture *gesture = *_container_.i; _container_.control; _container_.control = 0: eventGestures) { | - | ||||||||||||||||||
630 | if (eventAccepted
| 0 | ||||||||||||||||||
631 | QWidget *w = event.m_targetWidgets.value(gesture->gestureType(), 0); | - | ||||||||||||||||||
632 | ((!(w)) ? qt_assert("w",__FILE__,684692) : 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 | for (QForeachContainer<typename QtPrivate::remove_reference<decltype(event.gestures())>::type> _container_((const auto eventGestures = event.gestures())); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1)(); | - | ||||||||||||||||||
656 | for (QGesture *gesture = *_container_.i; _container_.control; _container_.control = 0: 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__,711720) : 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) { | - | ||||||||||||||||||
673 | gesture->setGestureCancelPolicy(QGesture::CancelNone); | - | ||||||||||||||||||
674 | recognizer->reset(gesture); | - | ||||||||||||||||||
675 | m_activeGestures.remove(gesture); | - | ||||||||||||||||||
676 | } else { | - | ||||||||||||||||||
677 | cleanupGesturesForRemovedRecognizer(gesture); | - | ||||||||||||||||||
678 | } | - | ||||||||||||||||||
679 | } | - | ||||||||||||||||||
680 | - | |||||||||||||||||||
681 | bool QGestureManager::gesturePending(QObject *o) | - | ||||||||||||||||||
682 | { | - | ||||||||||||||||||
683 | const QGestureManager *gm = QGestureManager::instance(); | - | ||||||||||||||||||
684 | return gm && gm->m_gestureOwners.key(o); | - | ||||||||||||||||||
685 | } | - | ||||||||||||||||||
686 | - | |||||||||||||||||||
687 | - | |||||||||||||||||||
688 | - | |||||||||||||||||||
689 | - | |||||||||||||||||||
690 | - | |||||||||||||||||||
Switch to Source code | Preprocessed file |