diff options
author | Lars Uebernickel <lars.uebernickel@canonical.com> | 2013-09-23 18:41:15 +0200 |
---|---|---|
committer | Lars Uebernickel <lars.uebernickel@canonical.com> | 2013-09-23 18:41:15 +0200 |
commit | 74a9ba6419669fa4ca0b32bb50345e48e8f8ad46 (patch) | |
tree | dea335b86779590e69de03928174edae88b64954 | |
parent | 23dee12d54a17b9a883d02e03ffcff45f439e188 (diff) | |
download | qmenumodel-74a9ba6419669fa4ca0b32bb50345e48e8f8ad46.tar.gz qmenumodel-74a9ba6419669fa4ca0b32bb50345e48e8f8ad46.tar.bz2 qmenumodel-74a9ba6419669fa4ca0b32bb50345e48e8f8ad46.zip |
QStateAction: try to maintain the type of the action's state
QML likes to convert doubles to integers if the number is close enough to an
integer. This tries to circumvent that by explicitly casting to the right
action type, because that's what exporters of GActionGroups expect.
-rw-r--r-- | libqmenumodel/src/qstateaction.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/libqmenumodel/src/qstateaction.cpp b/libqmenumodel/src/qstateaction.cpp index 1861aea..40d70a5 100644 --- a/libqmenumodel/src/qstateaction.cpp +++ b/libqmenumodel/src/qstateaction.cpp @@ -92,9 +92,11 @@ bool QStateAction::isValid() const Request for the state of action to be changed to \a paramenter. This call merely requests a change. The action may refuse to change its state or may change its state to something other than \a paramenter. */ -void QStateAction::updateState(const QVariant ¶meter) +void QStateAction::updateState(const QVariant &state) { - m_group->updateActionState(m_name, parameter); + QVariant v = state; + if (v.convert(m_state.type())) + m_group->updateActionState(m_name, v); } /*! @@ -124,8 +126,9 @@ void QStateAction::setValid(bool valid) /*! \internal */ void QStateAction::setState(const QVariant &state) { - if (m_state != state) { - m_state = state; + QVariant v = state; + if (!m_state.isValid() || (v.convert(m_state.type()) && v != m_state)) { + m_state = v; Q_EMIT stateChanged(m_state); } } |