aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Guminiak <michal.guminiak@teleca.com>2011-01-25 11:42:47 +0100
committerDominik Kapusta <dominik.kapusta@teleca.com>2011-01-25 14:51:18 +0100
commitb645655e35e19d2630cc69f1548350315810b3eb (patch)
tree117e5d147225d4247463a231dbdd0655588e953b
parent1ec3f11fb2eedaa057aebbe28f7c3590b5ce3a68 (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.cpp5
-rw-r--r--src/corelib/widgets/mscenewindow.cpp23
-rw-r--r--src/corelib/widgets/mscenewindow_p.h1
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;