diff options
author | Joaquim Rocha <jrocha@igalia.com> | 2011-01-03 15:56:56 +0100 |
---|---|---|
committer | Stanislav Ionascu <stanislav.ionascu@nokia.com> | 2011-01-04 11:57:08 +0200 |
commit | b760e0a6a4c82f5ad4d08184dcfd68c38da2b31f (patch) | |
tree | 1ba4a023e93df3709e7b177e91c16d87a431725d | |
parent | e42e6e58a04377aa7c22019f936fc4c1df957564 (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.cpp | 20 | ||||
-rw-r--r-- | src/corelib/scene/mscenemanager.h | 3 | ||||
-rw-r--r-- | src/corelib/scene/mscenemanager_p.h | 3 |
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(); |