aboutsummaryrefslogtreecommitdiff
path: root/libqmenumodel/src/unitymenumodel.cpp
diff options
context:
space:
mode:
authorNick Dedekind <nicholas.dedekind@gmail.com>2013-08-12 21:51:20 +0100
committerNick Dedekind <nicholas.dedekind@gmail.com>2013-08-12 21:51:20 +0100
commit3caade32e973e78b9470f6a57e25c53f96c4e083 (patch)
tree65d324edbd75c6dba27cf9ab9f1b8191266a67f8 /libqmenumodel/src/unitymenumodel.cpp
parentd6085f82847f07de4aa3bf13e8d3f8c779d60e32 (diff)
downloadqmenumodel-3caade32e973e78b9470f6a57e25c53f96c4e083.tar.gz
qmenumodel-3caade32e973e78b9470f6a57e25c53f96c4e083.tar.bz2
qmenumodel-3caade32e973e78b9470f6a57e25c53f96c4e083.zip
Removed UnityMenuAction. Fixed leaks from unitymenumodel.
Diffstat (limited to 'libqmenumodel/src/unitymenumodel.cpp')
-rw-r--r--libqmenumodel/src/unitymenumodel.cpp94
1 files changed, 31 insertions, 63 deletions
diff --git a/libqmenumodel/src/unitymenumodel.cpp b/libqmenumodel/src/unitymenumodel.cpp
index 8191dee..e5407ab 100644
--- a/libqmenumodel/src/unitymenumodel.cpp
+++ b/libqmenumodel/src/unitymenumodel.cpp
@@ -19,7 +19,6 @@
#include "unitymenumodel.h"
#include "converter.h"
#include "actionstateparser.h"
-#include "unitymenuaction.h"
#include "unitymenumodelevents.h"
#include <QIcon>
@@ -43,6 +42,7 @@ enum MenuRoles {
TypeRole,
ExtendedAttributesRole,
ActionRole,
+ ActionStateRole,
IsCheckRole,
IsRadioRole,
IsToggledRole
@@ -80,65 +80,6 @@ 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 QString name() const {
- GtkMenuTrackerItem* item;
-
- item = (GtkMenuTrackerItem *) g_sequence_get (g_sequence_get_iter_at_pos (d->items, index()));
- if (!item) return QString();
-
- return gtk_menu_tracker_item_get_action_name(item);
- }
-
- virtual QVariant state() const {
- GtkMenuTrackerItem* item;
-
- item = (GtkMenuTrackerItem *) g_sequence_get (g_sequence_get_iter_at_pos (d->items, index()));
- if (!item) return QVariant();
-
- return d->itemState(item);
- }
-
- virtual void activate(const QVariant &parameter)
- {
- GtkMenuTrackerItem* item;
- gchar *action;
-
- item = (GtkMenuTrackerItem *) g_sequence_get (g_sequence_get_iter_at_pos (d->items, index()));
- if (!item) return;
-
- gtk_menu_tracker_item_get_attribute (item, "action", "s", &action);
- g_action_group_activate_action (G_ACTION_GROUP (d->muxer), action, Converter::toGVariant(parameter));
-
- g_free (action);
- }
-
- virtual void changeState(const QVariant& vvalue)
- {
- GtkMenuTrackerItem* item;
-
- item = (GtkMenuTrackerItem *) g_sequence_get (g_sequence_get_iter_at_pos (d->items, index()));
- if (!item) return;
-
- GVariant* data = Converter::toGVariant(vvalue);
- gtk_menu_tracker_item_change_state (item, data);
- g_variant_unref(data);
- }
-
-private:
- UnityMenuModelPrivate* d;
-};
-
void menu_item_free (gpointer data)
{
GtkMenuTrackerItem *item = (GtkMenuTrackerItem *) data;
@@ -455,7 +396,10 @@ QVariant UnityMenuModel::data(const QModelIndex &index, int role) const
}
case ActionRole:
- return QVariant::fromValue(new UnityGtkMenuTrackerItemAction(index.row(), priv));
+ return gtk_menu_tracker_item_get_action_name (item);
+
+ case ActionStateRole:
+ return priv->itemState(item);
case IsCheckRole:
return gtk_menu_tracker_item_get_role (item) == GTK_MENU_TRACKER_ITEM_ROLE_CHECK;
@@ -493,6 +437,7 @@ QHash<int, QByteArray> UnityMenuModel::roleNames() const
names[TypeRole] = "type";
names[ExtendedAttributesRole] = "ext";
names[ActionRole] = "action";
+ names[ActionStateRole] = "actionState";
names[IsCheckRole] = "isCheck";
names[IsRadioRole] = "isRadio";
names[IsToggledRole] = "isToggled";
@@ -641,14 +586,37 @@ QVariant UnityMenuModel::get(int row, const QByteArray &role)
return this->data(this->index(row, 0), priv->roles[role]);
}
-void UnityMenuModel::activate(int index)
+void UnityMenuModel::activate(int index, const QVariant& parameter)
{
GtkMenuTrackerItem *item;
item = (GtkMenuTrackerItem *) g_sequence_get (g_sequence_get_iter_at_pos (priv->items, index));
- gtk_menu_tracker_item_activated (item);
+
+ if (parameter.isValid()) {
+ gchar *action;
+
+ gtk_menu_tracker_item_get_attribute (item, "action", "s", &action);
+ g_action_group_activate_action (G_ACTION_GROUP (priv->muxer), action, Converter::toGVariant(parameter));
+
+ g_free (action);
+ } else {
+ gtk_menu_tracker_item_activated (item);
+ }
+}
+
+void UnityMenuModel::changeState(int index, const QVariant& parameter)
+{
+ GtkMenuTrackerItem* item;
+
+ item = (GtkMenuTrackerItem *) g_sequence_get (g_sequence_get_iter_at_pos (priv->items, index));
+ if (!item) return;
+
+ GVariant* data = Converter::toGVariant(parameter);
+ gtk_menu_tracker_item_change_state (item, data);
+ g_variant_unref(data);
}
+
bool UnityMenuModel::event(QEvent* e)
{
if (e->type() == UnityMenuModelClearEvent::eventType) {