| 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 |