Merge lp:~nick-dedekind/qmenumodel/remove.unitymenuaction into lp:~phablet-team/qmenumodel/trunk

Proposed by Nick Dedekind
Status: Merged
Approved by: Lars Karlitski
Approved revision: 71
Merged at revision: 72
Proposed branch: lp:~nick-dedekind/qmenumodel/remove.unitymenuaction
Merge into: lp:~phablet-team/qmenumodel/trunk
Diff against target: 337 lines (+35/-196)
6 files modified
libqmenumodel/QMenuModel/plugin.cpp (+0/-3)
libqmenumodel/src/CMakeLists.txt (+0/-2)
libqmenumodel/src/unitymenuaction.cpp (+0/-60)
libqmenumodel/src/unitymenuaction.h (+0/-66)
libqmenumodel/src/unitymenumodel.cpp (+32/-64)
libqmenumodel/src/unitymenumodel.h (+3/-1)
To merge this branch: bzr merge lp:~nick-dedekind/qmenumodel/remove.unitymenuaction
Reviewer Review Type Date Requested Status
Lars Karlitski (community) Approve
PS Jenkins bot continuous-integration Approve
Review via email: mp+179800@code.launchpad.net

Commit message

Removed UnityMenuAction

Description of the change

Removed UnityMenuAction.
Was causing memory leaks from UnityMenuModel.
Replaced with roles for action name & action state.

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Lars Karlitski (larsu) wrote :

Thanks.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'libqmenumodel/QMenuModel/plugin.cpp'
--- libqmenumodel/QMenuModel/plugin.cpp 2013-07-30 10:23:42 +0000
+++ libqmenumodel/QMenuModel/plugin.cpp 2013-08-12 20:53:45 +0000
@@ -22,7 +22,6 @@
22#include "qdbusmenumodel.h"22#include "qdbusmenumodel.h"
23#include "qdbusactiongroup.h"23#include "qdbusactiongroup.h"
24#include "qstateaction.h"24#include "qstateaction.h"
25#include "unitymenuaction.h"
26#include "unitymenumodel.h"25#include "unitymenumodel.h"
27#include "unitythemediconprovider.h"26#include "unitythemediconprovider.h"
2827
@@ -41,8 +40,6 @@
41 "QStateAction must be created by QDBusActionGroup::action");40 "QStateAction must be created by QDBusActionGroup::action");
42 qmlRegisterUncreatableType<DBusEnums>(uri, 0, 1, "DBus",41 qmlRegisterUncreatableType<DBusEnums>(uri, 0, 1, "DBus",
43 "DBus is only a namespace");42 "DBus is only a namespace");
44 qmlRegisterUncreatableType<UnityMenuAction>(uri, 0, 1, "UnityMenuAction",
45 "UnityMenuAction must be created by UnityMenuModel");
4643
47 qmlRegisterType<QDBusMenuModel>(uri, 0, 1, "QDBusMenuModel");44 qmlRegisterType<QDBusMenuModel>(uri, 0, 1, "QDBusMenuModel");
48 qmlRegisterType<QDBusActionGroup>(uri, 0, 1, "QDBusActionGroup");45 qmlRegisterType<QDBusActionGroup>(uri, 0, 1, "QDBusActionGroup");
4946
=== modified file 'libqmenumodel/src/CMakeLists.txt'
--- libqmenumodel/src/CMakeLists.txt 2013-08-09 09:50:12 +0000
+++ libqmenumodel/src/CMakeLists.txt 2013-08-12 20:53:45 +0000
@@ -10,7 +10,6 @@
10 qdbusmenumodel.cpp10 qdbusmenumodel.cpp
11 qdbusactiongroup.cpp11 qdbusactiongroup.cpp
12 qstateaction.cpp12 qstateaction.cpp
13 unitymenuaction.cpp
14 unitymenumodel.cpp13 unitymenumodel.cpp
15 unitymenumodelevents.cpp14 unitymenumodelevents.cpp
16 unitythemediconprovider.cpp15 unitythemediconprovider.cpp
@@ -59,7 +58,6 @@
59 qdbusobject.h58 qdbusobject.h
60 qmenumodel.h59 qmenumodel.h
61 qstateaction.h60 qstateaction.h
62 unitymenuaction.h
63 unitymenumodel.h61 unitymenumodel.h
64 unitythemediconprovider.h62 unitythemediconprovider.h
65)63)
6664
=== removed file 'libqmenumodel/src/unitymenuaction.cpp'
--- libqmenumodel/src/unitymenuaction.cpp 2013-07-30 10:23:42 +0000
+++ libqmenumodel/src/unitymenuaction.cpp 1970-01-01 00:00:00 +0000
@@ -1,60 +0,0 @@
1/*
2 * Copyright 2013 Canonical Ltd.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU Lesser General Public License as published by
6 * the Free Software Foundation; version 3.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU Lesser General Public License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Authors:
17 * Nick Dedekind <nick.dedekind@canonical.com>
18 */
19
20#include "unitymenuaction.h"
21#include "unitymenumodel.h"
22
23UnityMenuAction::UnityMenuAction(QObject* parent)
24 : QObject(parent),
25 m_model(NULL),
26 m_index(-1)
27{
28}
29
30int UnityMenuAction::index() const
31{
32 return m_index;
33}
34
35void UnityMenuAction::setIndex(int index)
36{
37 if (m_index != index) {
38 m_index = index;
39 Q_EMIT indexChanged(index);
40 }
41}
42
43UnityMenuModel* UnityMenuAction::model() const
44{
45 return m_model;
46}
47
48void UnityMenuAction::setModel(UnityMenuModel* model)
49{
50 if (m_model != model) {
51 if (m_model) {
52 disconnect(m_model);
53 }
54 m_model = model;
55
56 connect(model, SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&, const QVector<int>&)), SIGNAL(stateChanged()));
57
58 Q_EMIT modelChanged(model);
59 }
60}
610
=== removed file 'libqmenumodel/src/unitymenuaction.h'
--- libqmenumodel/src/unitymenuaction.h 2013-08-09 11:33:39 +0000
+++ libqmenumodel/src/unitymenuaction.h 1970-01-01 00:00:00 +0000
@@ -1,66 +0,0 @@
1/*
2 * Copyright 2013 Canonical Ltd.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU Lesser General Public License as published by
6 * the Free Software Foundation; version 3.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU Lesser General Public License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Authors:
17 * Nick Dedekind <nick.dedekind@canonical.com>
18 */
19
20#ifndef UNITYMENUACTION_H
21#define UNITYMENUACTION_H
22
23#include <QObject>
24#include <QVariant>
25
26typedef struct _GVariant GVariant;
27class UnityMenuModel;
28
29class UnityMenuAction : public QObject
30{
31 Q_OBJECT
32 Q_PROPERTY(QVariant name READ name NOTIFY nameChanged)
33 Q_PROPERTY(QVariant state READ state WRITE changeState NOTIFY stateChanged)
34 Q_PROPERTY(int index READ index WRITE setIndex NOTIFY indexChanged)
35 Q_PROPERTY(UnityMenuModel* model READ model WRITE setModel NOTIFY modelChanged)
36public:
37 UnityMenuAction(QObject* parent=0);
38
39 int index() const;
40 void setIndex(int index);
41
42 UnityMenuModel* model() const;
43 void setModel(UnityMenuModel* model);
44
45 virtual QString name() const = 0;
46
47 virtual QVariant state() const = 0;
48
49 Q_INVOKABLE virtual void activate(const QVariant &parameter) = 0;
50
51 Q_INVOKABLE virtual void changeState(const QVariant& vvalue) = 0;
52
53Q_SIGNALS:
54 void nameChanged();
55 void stateChanged();
56 void indexChanged(int index);
57 void modelChanged(UnityMenuModel* model);
58
59private:
60 UnityMenuModel* m_model;
61 int m_index;
62};
63
64Q_DECLARE_METATYPE(UnityMenuAction*)
65
66#endif // UNITYMENUACTION_H
670
=== modified file 'libqmenumodel/src/unitymenumodel.cpp'
--- libqmenumodel/src/unitymenumodel.cpp 2013-08-12 10:33:40 +0000
+++ libqmenumodel/src/unitymenumodel.cpp 2013-08-12 20:53:45 +0000
@@ -19,7 +19,6 @@
19#include "unitymenumodel.h"19#include "unitymenumodel.h"
20#include "converter.h"20#include "converter.h"
21#include "actionstateparser.h"21#include "actionstateparser.h"
22#include "unitymenuaction.h"
23#include "unitymenumodelevents.h"22#include "unitymenumodelevents.h"
2423
25#include <QIcon>24#include <QIcon>
@@ -43,6 +42,7 @@
43 TypeRole,42 TypeRole,
44 ExtendedAttributesRole,43 ExtendedAttributesRole,
45 ActionRole,44 ActionRole,
45 ActionStateRole,
46 IsCheckRole,46 IsCheckRole,
47 IsRadioRole,47 IsRadioRole,
48 IsToggledRole48 IsToggledRole
@@ -80,65 +80,6 @@
80 static void menuItemChanged(GObject *object, GParamSpec *pspec, gpointer user_data);80 static void menuItemChanged(GObject *object, GParamSpec *pspec, gpointer user_data);
81};81};
8282
83class UnityGtkMenuTrackerItemAction : public UnityMenuAction
84{
85public:
86 UnityGtkMenuTrackerItemAction(int index, UnityMenuModelPrivate* priv)
87 : UnityMenuAction(priv->model),
88 d(priv)
89 {
90 setModel(priv->model);
91 setIndex(index);
92 }
93
94 virtual QString name() const {
95 GtkMenuTrackerItem* item;
96
97 item = (GtkMenuTrackerItem *) g_sequence_get (g_sequence_get_iter_at_pos (d->items, index()));
98 if (!item) return QString();
99
100 return gtk_menu_tracker_item_get_action_name(item);
101 }
102
103 virtual QVariant state() const {
104 GtkMenuTrackerItem* item;
105
106 item = (GtkMenuTrackerItem *) g_sequence_get (g_sequence_get_iter_at_pos (d->items, index()));
107 if (!item) return QVariant();
108
109 return d->itemState(item);
110 }
111
112 virtual void activate(const QVariant &parameter)
113 {
114 GtkMenuTrackerItem* item;
115 gchar *action;
116
117 item = (GtkMenuTrackerItem *) g_sequence_get (g_sequence_get_iter_at_pos (d->items, index()));
118 if (!item) return;
119
120 gtk_menu_tracker_item_get_attribute (item, "action", "s", &action);
121 g_action_group_activate_action (G_ACTION_GROUP (d->muxer), action, Converter::toGVariant(parameter));
122
123 g_free (action);
124 }
125
126 virtual void changeState(const QVariant& vvalue)
127 {
128 GtkMenuTrackerItem* item;
129
130 item = (GtkMenuTrackerItem *) g_sequence_get (g_sequence_get_iter_at_pos (d->items, index()));
131 if (!item) return;
132
133 GVariant* data = Converter::toGVariant(vvalue);
134 gtk_menu_tracker_item_change_state (item, data);
135 g_variant_unref(data);
136 }
137
138private:
139 UnityMenuModelPrivate* d;
140};
141
142void menu_item_free (gpointer data)83void menu_item_free (gpointer data)
143{84{
144 GtkMenuTrackerItem *item = (GtkMenuTrackerItem *) data;85 GtkMenuTrackerItem *item = (GtkMenuTrackerItem *) data;
@@ -455,7 +396,10 @@
455 }396 }
456397
457 case ActionRole:398 case ActionRole:
458 return QVariant::fromValue(new UnityGtkMenuTrackerItemAction(index.row(), priv));399 return gtk_menu_tracker_item_get_action_name (item);
400
401 case ActionStateRole:
402 return priv->itemState(item);
459403
460 case IsCheckRole:404 case IsCheckRole:
461 return gtk_menu_tracker_item_get_role (item) == GTK_MENU_TRACKER_ITEM_ROLE_CHECK;405 return gtk_menu_tracker_item_get_role (item) == GTK_MENU_TRACKER_ITEM_ROLE_CHECK;
@@ -493,6 +437,7 @@
493 names[TypeRole] = "type";437 names[TypeRole] = "type";
494 names[ExtendedAttributesRole] = "ext";438 names[ExtendedAttributesRole] = "ext";
495 names[ActionRole] = "action";439 names[ActionRole] = "action";
440 names[ActionStateRole] = "actionState";
496 names[IsCheckRole] = "isCheck";441 names[IsCheckRole] = "isCheck";
497 names[IsRadioRole] = "isRadio";442 names[IsRadioRole] = "isRadio";
498 names[IsToggledRole] = "isToggled";443 names[IsToggledRole] = "isToggled";
@@ -641,13 +586,36 @@
641 return this->data(this->index(row, 0), priv->roles[role]);586 return this->data(this->index(row, 0), priv->roles[role]);
642}587}
643588
644void UnityMenuModel::activate(int index)589void UnityMenuModel::activate(int index, const QVariant& parameter)
645{590{
646 GtkMenuTrackerItem *item;591 GtkMenuTrackerItem *item;
647592
648 item = (GtkMenuTrackerItem *) g_sequence_get (g_sequence_get_iter_at_pos (priv->items, index));593 item = (GtkMenuTrackerItem *) g_sequence_get (g_sequence_get_iter_at_pos (priv->items, index));
649 gtk_menu_tracker_item_activated (item);594
650}595 if (parameter.isValid()) {
596 gchar *action;
597
598 gtk_menu_tracker_item_get_attribute (item, "action", "s", &action);
599 g_action_group_activate_action (G_ACTION_GROUP (priv->muxer), action, Converter::toGVariant(parameter));
600
601 g_free (action);
602 } else {
603 gtk_menu_tracker_item_activated (item);
604 }
605}
606
607void UnityMenuModel::changeState(int index, const QVariant& parameter)
608{
609 GtkMenuTrackerItem* item;
610
611 item = (GtkMenuTrackerItem *) g_sequence_get (g_sequence_get_iter_at_pos (priv->items, index));
612 if (!item) return;
613
614 GVariant* data = Converter::toGVariant(parameter);
615 gtk_menu_tracker_item_change_state (item, data);
616 g_variant_unref(data);
617}
618
651619
652bool UnityMenuModel::event(QEvent* e)620bool UnityMenuModel::event(QEvent* e)
653{621{
654622
=== modified file 'libqmenumodel/src/unitymenumodel.h'
--- libqmenumodel/src/unitymenumodel.h 2013-08-12 10:30:21 +0000
+++ libqmenumodel/src/unitymenumodel.h 2013-08-12 20:53:45 +0000
@@ -57,7 +57,9 @@
57 Q_INVOKABLE QObject * submenu(int position, QQmlComponent* actionStateParser = NULL);57 Q_INVOKABLE QObject * submenu(int position, QQmlComponent* actionStateParser = NULL);
58 Q_INVOKABLE bool loadExtendedAttributes(int position, const QVariantMap &schema);58 Q_INVOKABLE bool loadExtendedAttributes(int position, const QVariantMap &schema);
59 Q_INVOKABLE QVariant get(int row, const QByteArray &role);59 Q_INVOKABLE QVariant get(int row, const QByteArray &role);
60 Q_INVOKABLE void activate(int index);60
61 Q_INVOKABLE void activate(int index, const QVariant& parameter = QVariant());
62 Q_INVOKABLE void changeState(int index, const QVariant& parameter);
6163
62Q_SIGNALS:64Q_SIGNALS:
63 void busNameChanged(const QByteArray &name);65 void busNameChanged(const QByteArray &name);

Subscribers

People subscribed via source and target branches