summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/corelib/statemachine/qeventtransition.cpp29
-rw-r--r--src/corelib/statemachine/qeventtransition_p.h3
2 files changed, 18 insertions, 14 deletions
diff --git a/src/corelib/statemachine/qeventtransition.cpp b/src/corelib/statemachine/qeventtransition.cpp
index 74eb577..f25d821 100644
--- a/src/corelib/statemachine/qeventtransition.cpp
+++ b/src/corelib/statemachine/qeventtransition.cpp
@@ -111,19 +111,20 @@ QEventTransitionPrivate *QEventTransitionPrivate::get(QEventTransition *q)
return q->d_func();
}
-void QEventTransitionPrivate::invalidate()
+void QEventTransitionPrivate::unregister()
{
Q_Q(QEventTransition);
- if (registered) {
- QState *source = sourceState();
- QStatePrivate *source_d = QStatePrivate::get(source);
- QStateMachinePrivate *mach = QStateMachinePrivate::get(source_d->machine());
- if (mach) {
- mach->unregisterEventTransition(q);
- if (mach->configuration.contains(source))
- mach->registerEventTransition(q);
- }
- }
+ if (!registered || !machine())
+ return;
+ QStateMachinePrivate::get(machine())->unregisterEventTransition(q);
+}
+
+void QEventTransitionPrivate::maybeRegister()
+{
+ Q_Q(QEventTransition);
+ if (!machine() || !machine()->configuration().contains(sourceState()))
+ return;
+ QStateMachinePrivate::get(machine())->registerEventTransition(q);
}
/*!
@@ -223,8 +224,9 @@ void QEventTransition::setEventType(QEvent::Type type)
Q_D(QEventTransition);
if (d->eventType == type)
return;
+ d->unregister();
d->eventType = type;
- d->invalidate();
+ d->maybeRegister();
}
/*!
@@ -245,8 +247,9 @@ void QEventTransition::setEventObject(QObject *object)
Q_D(QEventTransition);
if (d->object == object)
return;
+ d->unregister();
d->object = object;
- d->invalidate();
+ d->maybeRegister();
}
/*!
diff --git a/src/corelib/statemachine/qeventtransition_p.h b/src/corelib/statemachine/qeventtransition_p.h
index fca8c0d..600cec0 100644
--- a/src/corelib/statemachine/qeventtransition_p.h
+++ b/src/corelib/statemachine/qeventtransition_p.h
@@ -66,7 +66,8 @@ public:
static QEventTransitionPrivate *get(QEventTransition *q);
- void invalidate();
+ void unregister();
+ void maybeRegister();
bool registered;
QObject *object;