From c2aea75c220984953c53c3813717713437649999 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Thu, 1 Sep 2011 11:13:35 +0200 Subject: Refactor QMouseEvent to contain the position inside the window Rename the default accessors for positions to localPos, windowPos and screenPos, to be explicit about their use. Introduce a QT_NO_INTEGER_EVENT_COORDINATES define so one can make sure to always use the float based coordinates. Fixup all Qt code to use the correct constructor that specifies all three coordinates. Change-Id: If4bb93b8d1e2eb2440260d99680c468706cfe68f Reviewed-on: http://codereview.qt.nokia.com/4058 Reviewed-by: Qt Sanity Bot Reviewed-by: Gunnar Sletta --- src/widgets/widgets/qmenu.cpp | 3 ++- src/widgets/widgets/qplaintextedit.cpp | 3 ++- src/widgets/widgets/qtextedit.cpp | 2 +- src/widgets/widgets/qwidgetlinecontrol.cpp | 2 +- src/widgets/widgets/qwidgettextcontrol.cpp | 3 ++- 5 files changed, 8 insertions(+), 5 deletions(-) (limited to 'src/widgets/widgets') diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp index 8494c9eca2..bcf7c574f0 100644 --- a/src/widgets/widgets/qmenu.cpp +++ b/src/widgets/widgets/qmenu.cpp @@ -994,7 +994,8 @@ bool QMenuPrivate::mouseEventTaken(QMouseEvent *e) } if (passOnEvent) { if(e->type() != QEvent::MouseButtonRelease || mouseDown == caused) { - QMouseEvent new_e(e->type(), cpos, e->button(), e->buttons(), e->modifiers()); + QMouseEvent new_e(e->type(), cpos, caused->mapTo(caused->topLevelWidget(), cpos), e->screenPos(), + e->button(), e->buttons(), e->modifiers()); QApplication::sendEvent(caused, &new_e); return true; } diff --git a/src/widgets/widgets/qplaintextedit.cpp b/src/widgets/widgets/qplaintextedit.cpp index 7eb78acd82..e408a6e7aa 100644 --- a/src/widgets/widgets/qplaintextedit.cpp +++ b/src/widgets/widgets/qplaintextedit.cpp @@ -1525,7 +1525,8 @@ void QPlainTextEdit::timerEvent(QTimerEvent *e) } else { const QPoint globalPos = QCursor::pos(); pos = d->viewport->mapFromGlobal(globalPos); - QMouseEvent ev(QEvent::MouseMove, pos, globalPos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); + QMouseEvent ev(QEvent::MouseMove, pos, d->viewport->mapTo(d->viewport->topLevelWidget(), pos), globalPos, + Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); mouseMoveEvent(&ev); } int deltaY = qMax(pos.y() - visible.top(), visible.bottom() - pos.y()) - visible.height(); diff --git a/src/widgets/widgets/qtextedit.cpp b/src/widgets/widgets/qtextedit.cpp index fd36b7284b..72cb326507 100644 --- a/src/widgets/widgets/qtextedit.cpp +++ b/src/widgets/widgets/qtextedit.cpp @@ -1086,7 +1086,7 @@ void QTextEdit::timerEvent(QTimerEvent *e) } else { const QPoint globalPos = QCursor::pos(); pos = d->viewport->mapFromGlobal(globalPos); - QMouseEvent ev(QEvent::MouseMove, pos, globalPos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); + QMouseEvent ev(QEvent::MouseMove, pos, mapTo(topLevelWidget(), pos), globalPos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); mouseMoveEvent(&ev); } int deltaY = qMax(pos.y() - visible.top(), visible.bottom() - pos.y()) - visible.height(); diff --git a/src/widgets/widgets/qwidgetlinecontrol.cpp b/src/widgets/widgets/qwidgetlinecontrol.cpp index 28c0973e04..790ed73f99 100644 --- a/src/widgets/widgets/qwidgetlinecontrol.cpp +++ b/src/widgets/widgets/qwidgetlinecontrol.cpp @@ -1412,7 +1412,7 @@ bool QWidgetLineControl::processEvent(QEvent* ev) case QEvent::GraphicsSceneMousePress:{ QGraphicsSceneMouseEvent *gvEv = static_cast(ev); QMouseEvent mouse(ev->type(), - gvEv->pos().toPoint(), gvEv->button(), gvEv->buttons(), gvEv->modifiers()); + gvEv->pos(), gvEv->pos(), gvEv->screenPos(), gvEv->button(), gvEv->buttons(), gvEv->modifiers()); processMouseEvent(&mouse); break; } #endif diff --git a/src/widgets/widgets/qwidgettextcontrol.cpp b/src/widgets/widgets/qwidgettextcontrol.cpp index f45211c1ff..89c64082a4 100644 --- a/src/widgets/widgets/qwidgettextcontrol.cpp +++ b/src/widgets/widgets/qwidgettextcontrol.cpp @@ -1800,7 +1800,8 @@ bool QWidgetTextControlPrivate::sendMouseEventToInputContext( return true; } if (ctx) { - QMouseEvent ev(eventType, contextWidget->mapFromGlobal(globalPos), globalPos, + QMouseEvent ev(eventType, contextWidget->mapFromGlobal(globalPos), + contextWidget->topLevelWidget()->mapFromGlobal(globalPos), globalPos, button, buttons, modifiers); ctx->mouseHandler(cursorPos, &ev); e->setAccepted(ev.isAccepted()); -- cgit v1.2.3