aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--debian/changelog6
-rw-r--r--libqmenumodel/src/qdbusactiongroup.cpp25
-rw-r--r--libqmenumodel/src/qdbusactiongroup.h9
3 files changed, 38 insertions, 2 deletions
diff --git a/debian/changelog b/debian/changelog
index 4b608e1..13c496f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+qmenumodel (0.2.9-0ubuntu1) UNRELEASED; urgency=medium
+
+ * Added support for overriding QDBusActionGroup state parser
+
+ -- Nick Dedekind <nick.dedekind@canonical.com> Tue, 11 Nov 2014 15:25:11 +0000
+
qmenumodel (0.2.8+14.10.20141013-0ubuntu1) utopic; urgency=low
[ Nick Dedekind ]
diff --git a/libqmenumodel/src/qdbusactiongroup.cpp b/libqmenumodel/src/qdbusactiongroup.cpp
index 0ef907a..b29ece0 100644
--- a/libqmenumodel/src/qdbusactiongroup.cpp
+++ b/libqmenumodel/src/qdbusactiongroup.cpp
@@ -17,6 +17,7 @@
* Renato Araujo Oliveira Filho <renato@canonical.com>
*/
+#include "actionstateparser.h"
#include "qdbusactiongroup.h"
#include "qstateaction.h"
#include "converter.h"
@@ -58,7 +59,8 @@ extern "C" {
QDBusActionGroup::QDBusActionGroup(QObject *parent)
:QObject(parent),
QDBusObject(this),
- m_actionGroup(NULL)
+ m_actionGroup(NULL),
+ m_actionStateParser(new ActionStateParser(this))
{
}
@@ -89,7 +91,13 @@ QVariant QDBusActionGroup::actionState(const QString &name)
{
QVariant result;
GVariant *state = g_action_group_get_action_state(m_actionGroup, name.toUtf8().data());
- result = Converter::toQVariant(state);
+
+ if (m_actionStateParser != NULL) {
+ result = m_actionStateParser->toQVariant(state);
+ } else {
+ result = Converter::toQVariant(state);
+ }
+
if (state) {
g_variant_unref(state);
}
@@ -190,6 +198,19 @@ void QDBusActionGroup::setActionGroup(GDBusActionGroup *ag)
}
}
+ActionStateParser* QDBusActionGroup::actionStateParser() const
+{
+ return m_actionStateParser;
+}
+
+void QDBusActionGroup::setActionStateParser(ActionStateParser* actionStateParser)
+{
+ if (m_actionStateParser != actionStateParser) {
+ m_actionStateParser = actionStateParser;
+ Q_EMIT actionStateParserChanged(actionStateParser);
+ }
+}
+
/*! \internal */
void QDBusActionGroup::clear()
{
diff --git a/libqmenumodel/src/qdbusactiongroup.h b/libqmenumodel/src/qdbusactiongroup.h
index f369a4e..afb12f2 100644
--- a/libqmenumodel/src/qdbusactiongroup.h
+++ b/libqmenumodel/src/qdbusactiongroup.h
@@ -26,6 +26,7 @@
#include <QVariant>
class QStateAction;
+class ActionStateParser;
typedef char gchar;
typedef void* gpointer;
@@ -40,6 +41,7 @@ class QDBusActionGroup : public QObject, public QDBusObject
Q_PROPERTY(QString busName READ busName WRITE setBusName NOTIFY busNameChanged)
Q_PROPERTY(QString objectPath READ objectPath WRITE setObjectPath NOTIFY objectPathChanged)
Q_PROPERTY(int status READ status NOTIFY statusChanged)
+ Q_PROPERTY(ActionStateParser* actionStateParser READ actionStateParser WRITE setActionStateParser NOTIFY actionStateParserChanged)
public:
QDBusActionGroup(QObject *parent=0);
@@ -52,6 +54,10 @@ public:
Q_INVOKABLE QStateAction *action(const QString &name);
Q_INVOKABLE QVariant actionState(const QString &name);
+ ActionStateParser* actionStateParser() const;
+ // Ownership of the actionStateParser is not passed to this object.
+ void setActionStateParser(ActionStateParser* actionStateParser);
+
Q_SIGNALS:
void busTypeChanged(DBusEnums::BusType type);
void busNameChanged(const QString &busNameChanged);
@@ -60,6 +66,7 @@ Q_SIGNALS:
void actionAppear(const QString &name);
void actionVanish(const QString &name);
void actionStateChanged(const QString &name, QVariant state);
+ void actionStateParserChanged(ActionStateParser* parser);
public Q_SLOTS:
void start();
@@ -77,6 +84,8 @@ private:
int m_signalActionRemovedId;
int m_signalStateChangedId;
+ ActionStateParser* m_actionStateParser;
+
// workaround to support int as busType
void setIntBusType(int busType);