summaryrefslogtreecommitdiffstats
path: root/src/widgets/kernel/qwidgetwindow_qpa.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets/kernel/qwidgetwindow_qpa.cpp')
-rw-r--r--src/widgets/kernel/qwidgetwindow_qpa.cpp35
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();