aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Uebernickel <lars.uebernickel@canonical.com>2013-09-02 18:35:00 +0200
committerLars Uebernickel <lars.uebernickel@canonical.com>2013-09-02 18:35:00 +0200
commit2641328dca5a7db154e5dbca7d9904d3c321974e (patch)
tree3f92b3b800ad4d3779da1d3048cb9f45feccc7ec
parentf58b7c76605623a171d2e6eba82cdbf7a788657d (diff)
downloadqmenumodel-2641328dca5a7db154e5dbca7d9904d3c321974e.tar.gz
qmenumodel-2641328dca5a7db154e5dbca7d9904d3c321974e.tar.bz2
qmenumodel-2641328dca5a7db154e5dbca7d9904d3c321974e.zip
Add UnityMenuModel::getAction
A method that returns a UnityMenuAction for a menu item. It must be used if the action name came from an attribute on the menu item so that the menu item's namespace can be prepended to the action name.
-rw-r--r--libqmenumodel/src/gtk/gtkmenutrackeritem.c6
-rw-r--r--libqmenumodel/src/gtk/gtkmenutrackeritem.h2
-rw-r--r--libqmenumodel/src/unitymenumodel.cpp28
-rw-r--r--libqmenumodel/src/unitymenumodel.h1
4 files changed, 37 insertions, 0 deletions
diff --git a/libqmenumodel/src/gtk/gtkmenutrackeritem.c b/libqmenumodel/src/gtk/gtkmenutrackeritem.c
index 3dc1d13..34e168a 100644
--- a/libqmenumodel/src/gtk/gtkmenutrackeritem.c
+++ b/libqmenumodel/src/gtk/gtkmenutrackeritem.c
@@ -649,6 +649,12 @@ gtk_menu_tracker_item_get_action_state (GtkMenuTrackerItem *self)
return NULL;
}
+const gchar *
+gtk_menu_tracker_item_get_action_namespace (GtkMenuTrackerItem *self)
+{
+ return self->action_namespace;
+}
+
static void
gtk_menu_tracker_item_set_submenu_shown (GtkMenuTrackerItem *self,
gboolean submenu_shown)
diff --git a/libqmenumodel/src/gtk/gtkmenutrackeritem.h b/libqmenumodel/src/gtk/gtkmenutrackeritem.h
index c0d61f0..dc62bf1 100644
--- a/libqmenumodel/src/gtk/gtkmenutrackeritem.h
+++ b/libqmenumodel/src/gtk/gtkmenutrackeritem.h
@@ -91,6 +91,8 @@ gchar * gtk_menu_tracker_item_get_action_name (GtkMen
GVariant * gtk_menu_tracker_item_get_action_state (GtkMenuTrackerItem *self);
+const gchar * gtk_menu_tracker_item_get_action_namespace (GtkMenuTrackerItem *self);
+
gboolean gtk_menu_tracker_item_get_attribute (GtkMenuTrackerItem *self,
const gchar *attribute,
const gchar *format,
diff --git a/libqmenumodel/src/unitymenumodel.cpp b/libqmenumodel/src/unitymenumodel.cpp
index ff65e69..026cb93 100644
--- a/libqmenumodel/src/unitymenumodel.cpp
+++ b/libqmenumodel/src/unitymenumodel.cpp
@@ -641,6 +641,34 @@ QVariant UnityMenuModel::get(int row, const QByteArray &role)
return this->data(this->index(row, 0), priv->roles[role]);
}
+UnityMenuAction * UnityMenuModel::getAction(int row, const QByteArray &name)
+{
+ GSequenceIter *iter;
+ GtkMenuTrackerItem *item;
+ const gchar *action_namespace;
+ gchar *action_name;
+ UnityMenuAction *action;
+
+ iter = g_sequence_get_iter_at_pos (priv->items, row);
+ if (g_sequence_iter_is_end (iter))
+ return NULL;
+
+ item = (GtkMenuTrackerItem *) g_sequence_get (iter);
+ action_namespace = gtk_menu_tracker_item_get_action_namespace (item);
+ if (action_namespace != NULL)
+ action_name = g_strjoin (".", action_namespace, name.constData(), NULL);
+ else
+ action_name = g_strdup (name.constData());
+
+ action = new UnityMenuAction(this);
+ action->setModel(this);
+ action->setName(action_name);
+
+ g_free (action_name);
+
+ return action;
+}
+
void UnityMenuModel::activate(int index, const QVariant& parameter)
{
GtkMenuTrackerItem *item;
diff --git a/libqmenumodel/src/unitymenumodel.h b/libqmenumodel/src/unitymenumodel.h
index a229f09..1391b27 100644
--- a/libqmenumodel/src/unitymenumodel.h
+++ b/libqmenumodel/src/unitymenumodel.h
@@ -58,6 +58,7 @@ public:
Q_INVOKABLE QObject * submenu(int position, QQmlComponent* actionStateParser = NULL);
Q_INVOKABLE bool loadExtendedAttributes(int position, const QVariantMap &schema);
Q_INVOKABLE QVariant get(int row, const QByteArray &role);
+ Q_INVOKABLE UnityMenuAction * getAction(int row, const QByteArray &name);
Q_INVOKABLE void activate(int index, const QVariant& parameter = QVariant());
Q_INVOKABLE void changeState(int index, const QVariant& parameter);