Check geometry correctly when replaying popup mouse events.
Task-number: QTBUG-41869 Task-number: QTBUG-39313 Change-Id: I2b59f5db6f0ae4007b1a3b58a79eed958e662272 Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>bb10
parent
44654675ed
commit
6080db8c6d
|
|
@ -433,14 +433,19 @@ void QWidgetWindow::handleMouseEvent(QMouseEvent *event)
|
|||
QWindow *win = w->windowHandle();
|
||||
if (!win)
|
||||
win = w->nativeParentWidget()->windowHandle();
|
||||
if (win && win->geometry().contains(event->globalPos())) {
|
||||
// Use postEvent() to ensure the local QEventLoop terminates when called from QMenu::exec()
|
||||
const QPoint localPos = win->mapFromGlobal(event->globalPos());
|
||||
QMouseEvent *e = new QMouseEvent(QEvent::MouseButtonPress, localPos, localPos, event->globalPos(), event->button(), event->buttons(), event->modifiers());
|
||||
QCoreApplicationPrivate::setEventSpontaneous(e, true);
|
||||
QGuiApplicationPrivate::setMouseEventSource(e, QGuiApplicationPrivate::mouseEventSource(event));
|
||||
e->setTimestamp(event->timestamp());
|
||||
QCoreApplication::postEvent(win, e);
|
||||
if (win) {
|
||||
const QRect globalGeometry = win->isTopLevel()
|
||||
? win->geometry()
|
||||
: QRect(win->mapToGlobal(QPoint(0, 0)), win->size());
|
||||
if (globalGeometry.contains(event->globalPos())) {
|
||||
// Use postEvent() to ensure the local QEventLoop terminates when called from QMenu::exec()
|
||||
const QPoint localPos = win->mapFromGlobal(event->globalPos());
|
||||
QMouseEvent *e = new QMouseEvent(QEvent::MouseButtonPress, localPos, localPos, event->globalPos(), event->button(), event->buttons(), event->modifiers());
|
||||
QCoreApplicationPrivate::setEventSpontaneous(e, true);
|
||||
QGuiApplicationPrivate::setMouseEventSource(e, QGuiApplicationPrivate::mouseEventSource(event));
|
||||
e->setTimestamp(event->timestamp());
|
||||
QCoreApplication::postEvent(win, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue