From 21fa38b6ad0167673148709faa4907b220853c5a Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 24 Nov 2020 11:00:10 +0100 Subject: QtWidgets: Propagate event device when translating mouse events There are a few places left over, for example the QTextEdit creating mouse events in a timer and notably QGraphicsView. Task-number: QTBUG-88678 Task-number: QTBUG-46412 Pick-to: 6.0 Change-Id: I7ed23911be3b86b4b39fb478b947ec3b7a60761f Reviewed-by: Oliver Wolff --- src/widgets/itemviews/qabstractitemview.cpp | 3 ++- src/widgets/kernel/qapplication.cpp | 3 ++- src/widgets/kernel/qwidgetwindow.cpp | 6 ++++-- src/widgets/util/qflickgesture.cpp | 3 ++- src/widgets/widgets/qmenu.cpp | 3 ++- 5 files changed, 12 insertions(+), 6 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/itemviews/qabstractitemview.cpp b/src/widgets/itemviews/qabstractitemview.cpp index 38fd4f1fcc..2e0ddf678f 100644 --- a/src/widgets/itemviews/qabstractitemview.cpp +++ b/src/widgets/itemviews/qabstractitemview.cpp @@ -1969,7 +1969,8 @@ void QAbstractItemView::mouseDoubleClickEvent(QMouseEvent *event) || (d->pressedIndex != index)) { QMouseEvent me(QEvent::MouseButtonPress, event->position(), event->scenePosition(), event->globalPosition(), - event->button(), event->buttons(), event->modifiers(), event->source()); + event->button(), event->buttons(), event->modifiers(), + event->source(), event->pointingDevice()); mousePressEvent(&me); return; } diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp index 97753b6af4..70616ed2b5 100644 --- a/src/widgets/kernel/qapplication.cpp +++ b/src/widgets/kernel/qapplication.cpp @@ -2842,7 +2842,8 @@ bool QApplication::notify(QObject *receiver, QEvent *e) QPointer pw = w; while (w) { QMouseEvent me(mouse->type(), relpos, mouse->scenePosition(), mouse->globalPosition().toPoint(), - mouse->button(), mouse->buttons(), mouse->modifiers(), mouse->source()); + mouse->button(), mouse->buttons(), mouse->modifiers(), mouse->source(), + mouse->pointingDevice()); me.m_spont = mouse->spontaneous(); me.setTimestamp(mouse->timestamp()); QMutableSinglePointEvent::from(me).setDoubleClick(QMutableSinglePointEvent::from(mouse)->isDoubleClick()); diff --git a/src/widgets/kernel/qwidgetwindow.cpp b/src/widgets/kernel/qwidgetwindow.cpp index c88d63686c..e4e8f9f9d1 100644 --- a/src/widgets/kernel/qwidgetwindow.cpp +++ b/src/widgets/kernel/qwidgetwindow.cpp @@ -569,7 +569,8 @@ void QWidgetWindow::handleMouseEvent(QMouseEvent *event) const auto buttons = event->type() == QEvent::MouseMove && qt_popup_down_closed ? Qt::NoButton : event->buttons(); QMouseEvent e(event->type(), widgetPos, event->scenePosition(), event->globalPosition(), - event->button(), buttons, event->modifiers(), event->source()); + event->button(), buttons, event->modifiers(), + event->source(), event->pointingDevice()); e.setTimestamp(event->timestamp()); QApplicationPrivate::sendMouseEvent(receiver, &e, receiver, receiver->window(), &qt_button_down, qt_last_mouse_receiver); qt_last_mouse_receiver = receiver; @@ -671,7 +672,8 @@ void QWidgetWindow::handleMouseEvent(QMouseEvent *event) // The preceding statement excludes MouseButtonPress events which caused // creation of a MouseButtonDblClick event. QTBUG-25831 QMouseEvent translated(event->type(), mapped, event->scenePosition(), event->globalPosition(), - event->button(), event->buttons(), event->modifiers(), event->source()); + event->button(), event->buttons(), event->modifiers(), + event->source(), event->pointingDevice()); translated.setTimestamp(event->timestamp()); QApplicationPrivate::sendMouseEvent(receiver, &translated, widget, m_widget, &qt_button_down, qt_last_mouse_receiver); diff --git a/src/widgets/util/qflickgesture.cpp b/src/widgets/util/qflickgesture.cpp index d23dfda83e..e5457243a0 100644 --- a/src/widgets/util/qflickgesture.cpp +++ b/src/widgets/util/qflickgesture.cpp @@ -299,7 +299,8 @@ protected: if (me) { QMouseEvent copy(me->type(), mouseTarget->mapFromGlobal(me->globalPosition()), mouseTarget->topLevelWidget()->mapFromGlobal(me->globalPosition()), me->globalPosition(), - me->button(), me->buttons(), me->modifiers(), me->source()); + me->button(), me->buttons(), me->modifiers(), + me->source(), me->pointingDevice()); qt_sendSpontaneousEvent(mouseTarget, ©); } diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp index 85dbe9b6e0..ab38abaed6 100644 --- a/src/widgets/widgets/qmenu.cpp +++ b/src/widgets/widgets/qmenu.cpp @@ -1366,7 +1366,8 @@ bool QMenuPrivate::mouseEventTaken(QMouseEvent *e) if (passOnEvent) { if (e->type() != QEvent::MouseButtonRelease || mouseDown == caused) { QMouseEvent new_e(e->type(), cpos, caused->mapTo(caused->topLevelWidget(), cpos), e->globalPosition(), - e->button(), e->buttons(), e->modifiers(), e->source()); + e->button(), e->buttons(), e->modifiers(), + e->source(), e->pointingDevice()); QCoreApplication::sendEvent(caused, &new_e); return true; } -- cgit v1.2.3