diff options
author | Laszlo Agocs <laszlo.p.agocs@nokia.com> | 2012-05-31 16:33:07 +0300 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-06-01 18:26:18 +0200 |
commit | 4f27960dd85f88c84998be02817e0674c43adbdf (patch) | |
tree | efa7ab4c1e998073a8d2063bbabd0e190569514b /src/widgets/kernel/qwidgetwindow_qpa.cpp | |
parent | 79a025b88a382b994febb4943292fdc15b0e55b3 (diff) |
Dispatch tablet events to widgets
Plus remove some platform-specific tablet leftovers from Qt4.
Change-Id: I376abc38d1fe4c253d8803cf0ce007e2d6c298bf
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
Diffstat (limited to 'src/widgets/kernel/qwidgetwindow_qpa.cpp')
-rw-r--r-- | src/widgets/kernel/qwidgetwindow_qpa.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/widgets/kernel/qwidgetwindow_qpa.cpp b/src/widgets/kernel/qwidgetwindow_qpa.cpp index 2e1e6854ff..3b1d69e46d 100644 --- a/src/widgets/kernel/qwidgetwindow_qpa.cpp +++ b/src/widgets/kernel/qwidgetwindow_qpa.cpp @@ -51,6 +51,7 @@ QT_BEGIN_NAMESPACE QWidget *qt_button_down = 0; // widget got last button-down +static QWidget *qt_tablet_target = 0; // popup control QWidget *qt_popup_down = 0; // popup that contains the pressed widget @@ -178,6 +179,14 @@ bool QWidgetWindow::event(QEvent *event) } return true; +#ifndef QT_NO_TABLETEVENT + case QEvent::TabletPress: + case QEvent::TabletMove: + case QEvent::TabletRelease: + handleTabletEvent(static_cast<QTabletEvent *>(event)); + return true; +#endif + default: break; } @@ -527,6 +536,32 @@ bool QWidgetWindow::nativeEvent(const QByteArray &eventType, void *message, long return m_widget->nativeEvent(eventType, message, result); } +#ifndef QT_NO_TABLETEVENT +void QWidgetWindow::handleTabletEvent(QTabletEvent *event) +{ + if (event->type() == QEvent::TabletPress) { + QWidget *widget = m_widget->childAt(event->pos()); + if (!widget) + widget = m_widget; + + qt_tablet_target = widget; + } + + if (qt_tablet_target) { + QPointF delta = event->globalPosF() - event->globalPos(); + QPointF mapped = qt_tablet_target->mapFromGlobal(event->globalPos()) + delta; + QTabletEvent ev(event->type(), mapped, event->globalPosF(), event->device(), event->pointerType(), + event->pressure(), event->xTilt(), event->yTilt(), event->tangentialPressure(), + event->rotation(), event->z(), event->modifiers(), event->uniqueId()); + ev.setTimestamp(event->timestamp()); + QGuiApplication::sendSpontaneousEvent(qt_tablet_target, &ev); + } + + if (event->type() == QEvent::TabletRelease) + qt_tablet_target = 0; +} +#endif // QT_NO_TABLETEVENT + void QWidgetWindow::updateObjectName() { QString name = m_widget->objectName(); |