From d1c96de04570d8365c2ab2fde597ccd21c7a3dc2 Mon Sep 17 00:00:00 2001 From: Nick Dedekind Date: Tue, 30 Jul 2013 12:23:42 +0200 Subject: Add action role (replacing actionState role) --- libqmenumodel/src/unitymenumodel.cpp | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) (limited to 'libqmenumodel/src/unitymenumodel.cpp') 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 #include -#include - 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 UnityMenuModel::roleNames() const names[IconRole] = "icon"; names[TypeRole] = "type"; names[ExtendedAttributesRole] = "ext"; - names[ActionStateRole] = "actionState"; + names[ActionRole] = "action"; return names; } -- cgit v1.2.3