diff options
author | Michal Guminiak <michal.guminiak@teleca.com> | 2011-01-25 11:42:47 +0100 |
---|---|---|
committer | Dominik Kapusta <dominik.kapusta@teleca.com> | 2011-01-25 14:51:18 +0100 |
commit | b645655e35e19d2630cc69f1548350315810b3eb (patch) | |
tree | 117e5d147225d4247463a231dbdd0655588e953b | |
parent | 1ec3f11fb2eedaa057aebbe28f7c3590b5ce3a68 (diff) |
Fixes: Cancel event is sent to the mouse grabber if some other widget accepts context menu event
RevBy: Dominik
Details: Moving the cancel event sending functionality to MWidget.
-rw-r--r-- | src/corelib/widgets/core/mwidget.cpp | 5 | ||||
-rw-r--r-- | src/corelib/widgets/mscenewindow.cpp | 23 | ||||
-rw-r--r-- | src/corelib/widgets/mscenewindow_p.h | 1 |
3 files changed, 7 insertions, 22 deletions
diff --git a/src/corelib/widgets/core/mwidget.cpp b/src/corelib/widgets/core/mwidget.cpp index a6d6a463..dcaab455 100644 --- a/src/corelib/widgets/core/mwidget.cpp +++ b/src/corelib/widgets/core/mwidget.cpp @@ -333,6 +333,11 @@ void MWidget::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) } if (hasObjectMenuActions) { + + MScene *mScene = qobject_cast<MScene *>(scene()); + if (mScene) + mScene->d_func()->notifyChildRequestedMouseCancel(); + MObjectMenu *menu = new MObjectMenu(this); menu->setCursorPosition(event->scenePos()); sceneManager()->appearSceneWindow(menu, MSceneWindow::DestroyWhenDone); diff --git a/src/corelib/widgets/mscenewindow.cpp b/src/corelib/widgets/mscenewindow.cpp index 54d5578b..c99da388 100644 --- a/src/corelib/widgets/mscenewindow.cpp +++ b/src/corelib/widgets/mscenewindow.cpp @@ -49,7 +49,6 @@ MSceneWindowPrivate::MSceneWindowPrivate() sceneWindowState(MSceneWindow::Disappeared), managedManually(false), dismissed(false), - waitingForContextMenuEvent(false), effect(0), displacementItem(0), appearanceAnimation(0), @@ -299,8 +298,6 @@ void MSceneWindow::closeEvent(QCloseEvent *event) void MSceneWindow::tapAndHoldGestureEvent(QGestureEvent *event, QTapAndHoldGesture *gesture) { - Q_D(MSceneWindow); - if (gesture->state() == Qt::GestureFinished) { QGraphicsSceneContextMenuEvent contextEvent(QEvent::GraphicsSceneContextMenu); @@ -308,17 +305,7 @@ void MSceneWindow::tapAndHoldGestureEvent(QGestureEvent *event, QTapAndHoldGestu contextEvent.setScenePos(gesture->position()); contextEvent.setScreenPos(gesture->position().toPoint()); - d->waitingForContextMenuEvent = true; QApplication::sendEvent(scene(), &contextEvent); - - if (contextEvent.isAccepted() && d->waitingForContextMenuEvent) { - //Event has been accepted by some widget on top of this scenewindow. - MScene *mScene = qobject_cast<MScene *>(scene()); - if (mScene) - mScene->d_func()->notifyChildRequestedMouseCancel(); - } - d->waitingForContextMenuEvent = false; - } event->accept(gesture); @@ -331,14 +318,8 @@ bool MSceneWindow::event(QEvent *event) dismissEvent(static_cast<MDismissEvent *>(event)); } else if (event->type() == QEvent::GraphicsSceneContextMenu) { //Event was not accepted by any of our child widgets. - //We need to accept it so that it doesn't propagate further and - //clear the flag, so that the tap&hold gesture event handler - //will know that the event wasn't delivered. - if (d->waitingForContextMenuEvent) { - event->accept(); - d->waitingForContextMenuEvent = false; - return true; - } + //We need to accept it so that it doesn't propagate. + event->accept(); } else if (event->type() == QEvent::ChildAdded) { QChildEvent *childEvent = static_cast<QChildEvent *>(event); if (childEvent->child()->objectName() == "_m_testBridge") { diff --git a/src/corelib/widgets/mscenewindow_p.h b/src/corelib/widgets/mscenewindow_p.h index ec9ce1a4..bfb62046 100644 --- a/src/corelib/widgets/mscenewindow_p.h +++ b/src/corelib/widgets/mscenewindow_p.h @@ -53,7 +53,6 @@ public: bool managedManually; bool dismissed; - bool waitingForContextMenuEvent; MSceneLayerEffect *effect; QGraphicsItem *displacementItem; |