aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoaquim Rocha <jrocha@igalia.com>2011-01-03 15:56:56 +0100
committerStanislav Ionascu <stanislav.ionascu@nokia.com>2011-01-04 11:57:08 +0200
commitb760e0a6a4c82f5ad4d08184dcfd68c38da2b31f (patch)
tree1ba4a023e93df3709e7b177e91c16d87a431725d
parente42e6e58a04377aa7c22019f936fc4c1df957564 (diff)
Fixes: NB#215423 - unable to access widgetsgallery app after selecting spinner in dialog
RevBy: Stanislav Ionascu Details: The event eater was being shown for an animation it started and should be hidden when it finishes. However, when that animation is being stopped manually it would result in the event eater being enabled all the time, preventing interaction with the widgets.
-rw-r--r--src/corelib/scene/mscenemanager.cpp20
-rw-r--r--src/corelib/scene/mscenemanager.h3
-rw-r--r--src/corelib/scene/mscenemanager_p.h3
3 files changed, 21 insertions, 5 deletions
diff --git a/src/corelib/scene/mscenemanager.cpp b/src/corelib/scene/mscenemanager.cpp
index 872c8d81..bad60e3b 100644
--- a/src/corelib/scene/mscenemanager.cpp
+++ b/src/corelib/scene/mscenemanager.cpp
@@ -335,16 +335,26 @@ void MSceneManagerPrivate::_q_emitOrientationChangeFinished()
inputWidgetRelocator->handleRotationFinished(q->orientation());
}
-void MSceneManagerPrivate::_q_unFreezeUI()
+void MSceneManagerPrivate::_q_unfreezeUI(QAbstractAnimation::State newState,
+ QAbstractAnimation::State oldState)
{
Q_Q(MSceneManager);
+ Q_UNUSED(oldState);
+
+ if (newState == QAbstractAnimation::Running)
+ return;
+
eventEater->hide();
QAbstractAnimation *animation = dynamic_cast<QAbstractAnimation *>(q->sender());
if (animation == 0)
return;
- QObject::disconnect(animation, SIGNAL(finished()), q, SLOT(_q_unFreezeUI()));
+ QObject::disconnect(animation,
+ SIGNAL(stateChanged(QAbstractAnimation::State,
+ QAbstractAnimation::State)),
+ q, SLOT(_q_unfreezeUI(QAbstractAnimation::State,
+ QAbstractAnimation::State)));
}
void MSceneManagerPrivate::_q_applySceneWindowTransitionsQueuedDueToOrientationAnimation()
@@ -1571,7 +1581,11 @@ void MSceneManagerPrivate::freezeUIForAnimationDuration(QAbstractAnimation *anim
eventEater->show();
if (animation->state() == QAbstractAnimation::Running) {
- QObject::connect(animation, SIGNAL(finished()), q, SLOT(_q_unFreezeUI()));
+ QObject::connect(animation,
+ SIGNAL(stateChanged(QAbstractAnimation::State,
+ QAbstractAnimation::State)),
+ q, SLOT(_q_unfreezeUI(QAbstractAnimation::State,
+ QAbstractAnimation::State)));
}
}
diff --git a/src/corelib/scene/mscenemanager.h b/src/corelib/scene/mscenemanager.h
index 3e8c8f91..e2c955ce 100644
--- a/src/corelib/scene/mscenemanager.h
+++ b/src/corelib/scene/mscenemanager.h
@@ -323,7 +323,8 @@ private:
Q_PRIVATE_SLOT(d_func(), void _q_setSenderGeometry())
Q_PRIVATE_SLOT(d_func(), void _q_changeGlobalOrientationAngle())
Q_PRIVATE_SLOT(d_func(), void _q_emitOrientationChangeFinished())
- Q_PRIVATE_SLOT(d_func(), void _q_unFreezeUI())
+ Q_PRIVATE_SLOT(d_func(), void _q_unfreezeUI(QAbstractAnimation::State newState,
+ QAbstractAnimation::State oldState))
Q_PRIVATE_SLOT(d_func(), void _q_applySceneWindowTransitionsQueuedDueToOrientationAnimation())
Q_PRIVATE_SLOT(d_func(), void _q_triggerAsyncPendingOrientationChange())
Q_PRIVATE_SLOT(d_func(), void _q_applyPendingOrientationChange())
diff --git a/src/corelib/scene/mscenemanager_p.h b/src/corelib/scene/mscenemanager_p.h
index 9a89507f..2e2163f8 100644
--- a/src/corelib/scene/mscenemanager_p.h
+++ b/src/corelib/scene/mscenemanager_p.h
@@ -202,7 +202,8 @@ public:
void _q_onPageSwitchAnimationFinished();
void _q_updateOnDisplayVisibility();
- void _q_unFreezeUI();
+ void _q_unfreezeUI(QAbstractAnimation::State newState,
+ QAbstractAnimation::State oldState);
void _q_applySceneWindowTransitionsQueuedDueToOrientationAnimation();