bool MiniBrowserApplication::notify(QObject* target, QEvent* event) { // We try to be smart, if we received real touch event, we are probably on a device // with touch screen, and we should not have touch mocking. if (!event->spontaneous() || m_realTouchEventReceived || !m_windowOptions.touchMockingEnabled()) return QGuiApplication::notify(target, event); if (isTouchEvent(event)) { if (m_pendingFakeTouchEventCount) --m_pendingFakeTouchEventCount; else m_realTouchEventReceived = true; return QGuiApplication::notify(target, event); } BrowserWindow* browserWindow = qobject_cast<BrowserWindow*>(target); if (!browserWindow) return QGuiApplication::notify(target, event); m_holdingControl = QGuiApplication::keyboardModifiers().testFlag(Qt::ControlModifier); // In QML events are propagated through parents. But since the WebView // may consume key events, a shortcut might never reach the top QQuickItem. // Therefore we are checking here for shortcuts. if (event->type() == QEvent::KeyPress) { QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event); if ((keyEvent->key() == Qt::Key_R && keyEvent->modifiers() == Qt::ControlModifier) || keyEvent->key() == Qt::Key_F5) { browserWindow->reload(); return true; } if ((keyEvent->key() == Qt::Key_L && keyEvent->modifiers() == Qt::ControlModifier) || keyEvent->key() == Qt::Key_F6) { browserWindow->focusAddressBar(); return true; } if ((keyEvent->key() == Qt::Key_F && keyEvent->modifiers() == Qt::ControlModifier) || keyEvent->key() == Qt::Key_F3) { browserWindow->toggleFind(); return true; } } if (event->type() == QEvent::KeyRelease && static_cast<QKeyEvent*>(event)->key() == Qt::Key_Control) { foreach (int id, m_heldTouchPoints) if (m_touchPoints.contains(id) && !QGuiApplication::mouseButtons().testFlag(Qt::MouseButton(id))) { m_touchPoints[id].setState(Qt::TouchPointReleased); m_heldTouchPoints.remove(id); } else m_touchPoints[id].setState(Qt::TouchPointStationary); sendTouchEvent(browserWindow, m_heldTouchPoints.isEmpty() ? QEvent::TouchEnd : QEvent::TouchUpdate, static_cast<QKeyEvent*>(event)->timestamp()); }
bool Event::composed() const { if (m_composed) return true; // http://w3c.github.io/webcomponents/spec/shadow/#scoped-flag if (!isTrusted()) return false; return m_type == eventNames().inputEvent || m_type == eventNames().textInputEvent || m_type == eventNames().DOMActivateEvent || isCompositionEvent() || isClipboardEvent() || isFocusEvent() || isKeyboardEvent() || isMouseEvent() || isTouchEvent(); }