aboutsummaryrefslogtreecommitdiff
path: root/libqmenumodel/src/unitymenumodel.cpp
diff options
context:
space:
mode:
authorNick Dedekind <nicholas.dedekind@gmail.com>2013-07-30 12:23:42 +0200
committerLars Uebernickel <lars.uebernickel@canonical.com>2013-07-30 12:23:42 +0200
commitd1c96de04570d8365c2ab2fde597ccd21c7a3dc2 (patch)
tree6abe5ac6cea1593c4effdea00c3087e4c9f37ede /libqmenumodel/src/unitymenumodel.cpp
parentd47194b0794968fa7713a8c7c9cfec7f1e4f8a17 (diff)
downloadqmenumodel-d1c96de04570d8365c2ab2fde597ccd21c7a3dc2.tar.gz
qmenumodel-d1c96de04570d8365c2ab2fde597ccd21c7a3dc2.tar.bz2
qmenumodel-d1c96de04570d8365c2ab2fde597ccd21c7a3dc2.zip
Add action role (replacing actionState role)
Diffstat (limited to 'libqmenumodel/src/unitymenumodel.cpp')
-rw-r--r--libqmenumodel/src/unitymenumodel.cpp36
1 files changed, 30 insertions, 6 deletions
diff --git a/libqmenumodel/src/unitymenumodel.cpp b/libqmenumodel/src/unitymenumodel.cpp
index 8bbb601..72a5985 100644
--- a/libqmenumodel/src/unitymenumodel.cpp
+++ b/libqmenumodel/src/unitymenumodel.cpp
@@ -19,12 +19,11 @@
#include "unitymenumodel.h"
#include "converter.h"
#include "actionstateparser.h"
+#include "unitymenuaction.h"
#include <QIcon>
#include <QQmlComponent>
-#include <QIcon>
-
extern "C" {
#include "gtk/gtkactionmuxer.h"
#include "gtk/gtkmenutracker.h"
@@ -41,7 +40,7 @@ enum MenuRoles {
IconRole,
TypeRole,
ExtendedAttributesRole,
- ActionStateRole
+ ActionRole
};
class UnityMenuModelPrivate
@@ -76,6 +75,31 @@ public:
static void menuItemChanged(GObject *object, GParamSpec *pspec, gpointer user_data);
};
+class UnityGtkMenuTrackerItemAction : public UnityMenuAction
+{
+public:
+ UnityGtkMenuTrackerItemAction(int index, UnityMenuModelPrivate* priv)
+ : UnityMenuAction(priv->model),
+ d(priv)
+ {
+ setModel(priv->model);
+ setIndex(index);
+ }
+
+ virtual QVariant state() const {
+ GtkMenuTrackerItem* item = (GtkMenuTrackerItem *) g_sequence_get (g_sequence_get_iter_at_pos (d->items, index()));
+ if (!item) {
+ return QVariant();
+ }
+ return d->itemState(item);
+ }
+
+ virtual void updateState(const QVariant& param = QVariant()) { }
+
+private:
+ UnityMenuModelPrivate* d;
+};
+
void menu_item_free (gpointer data)
{
GtkMenuTrackerItem *item = (GtkMenuTrackerItem *) data;
@@ -411,8 +435,8 @@ QVariant UnityMenuModel::data(const QModelIndex &index, int role) const
return map ? *map : QVariant();
}
- case ActionStateRole:
- return priv->itemState(item);
+ case ActionRole:
+ return QVariant::fromValue(new UnityGtkMenuTrackerItemAction(index.row(), priv));
default:
return QVariant();
@@ -440,7 +464,7 @@ QHash<int, QByteArray> UnityMenuModel::roleNames() const
names[IconRole] = "icon";
names[TypeRole] = "type";
names[ExtendedAttributesRole] = "ext";
- names[ActionStateRole] = "actionState";
+ names[ActionRole] = "action";
return names;
}