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
1=== modified file 'libqmenumodel/QMenuModel/plugin.cpp'
2--- libqmenumodel/QMenuModel/plugin.cpp 2013-07-30 10:23:42 +0000
3+++ libqmenumodel/QMenuModel/plugin.cpp 2013-08-12 20:53:45 +0000
4@@ -22,7 +22,6 @@
5 #include "qdbusmenumodel.h"
6 #include "qdbusactiongroup.h"
7 #include "qstateaction.h"
8-#include "unitymenuaction.h"
9 #include "unitymenumodel.h"
10 #include "unitythemediconprovider.h"
11
12@@ -41,8 +40,6 @@
13 "QStateAction must be created by QDBusActionGroup::action");
14 qmlRegisterUncreatableType<DBusEnums>(uri, 0, 1, "DBus",
15 "DBus is only a namespace");
16- qmlRegisterUncreatableType<UnityMenuAction>(uri, 0, 1, "UnityMenuAction",
17- "UnityMenuAction must be created by UnityMenuModel");
18
19 qmlRegisterType<QDBusMenuModel>(uri, 0, 1, "QDBusMenuModel");
20 qmlRegisterType<QDBusActionGroup>(uri, 0, 1, "QDBusActionGroup");
21
22=== modified file 'libqmenumodel/src/CMakeLists.txt'
23--- libqmenumodel/src/CMakeLists.txt 2013-08-09 09:50:12 +0000
24+++ libqmenumodel/src/CMakeLists.txt 2013-08-12 20:53:45 +0000
25@@ -10,7 +10,6 @@
26 qdbusmenumodel.cpp
27 qdbusactiongroup.cpp
28 qstateaction.cpp
29- unitymenuaction.cpp
30 unitymenumodel.cpp
31 unitymenumodelevents.cpp
32 unitythemediconprovider.cpp
33@@ -59,7 +58,6 @@
34 qdbusobject.h
35 qmenumodel.h
36 qstateaction.h
37- unitymenuaction.h
38 unitymenumodel.h
39 unitythemediconprovider.h
40 )
41
42=== removed file 'libqmenumodel/src/unitymenuaction.cpp'
43--- libqmenumodel/src/unitymenuaction.cpp 2013-07-30 10:23:42 +0000
44+++ libqmenumodel/src/unitymenuaction.cpp 1970-01-01 00:00:00 +0000
45@@ -1,60 +0,0 @@
46-/*
47- * Copyright 2013 Canonical Ltd.
48- *
49- * This program is free software; you can redistribute it and/or modify
50- * it under the terms of the GNU Lesser General Public License as published by
51- * the Free Software Foundation; version 3.
52- *
53- * This program is distributed in the hope that it will be useful,
54- * but WITHOUT ANY WARRANTY; without even the implied warranty of
55- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
56- * GNU Lesser General Public License for more details.
57- *
58- * You should have received a copy of the GNU Lesser General Public License
59- * along with this program. If not, see <http://www.gnu.org/licenses/>.
60- *
61- * Authors:
62- * Nick Dedekind <nick.dedekind@canonical.com>
63- */
64-
65-#include "unitymenuaction.h"
66-#include "unitymenumodel.h"
67-
68-UnityMenuAction::UnityMenuAction(QObject* parent)
69- : QObject(parent),
70- m_model(NULL),
71- m_index(-1)
72-{
73-}
74-
75-int UnityMenuAction::index() const
76-{
77- return m_index;
78-}
79-
80-void UnityMenuAction::setIndex(int index)
81-{
82- if (m_index != index) {
83- m_index = index;
84- Q_EMIT indexChanged(index);
85- }
86-}
87-
88-UnityMenuModel* UnityMenuAction::model() const
89-{
90- return m_model;
91-}
92-
93-void UnityMenuAction::setModel(UnityMenuModel* model)
94-{
95- if (m_model != model) {
96- if (m_model) {
97- disconnect(m_model);
98- }
99- m_model = model;
100-
101- connect(model, SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&, const QVector<int>&)), SIGNAL(stateChanged()));
102-
103- Q_EMIT modelChanged(model);
104- }
105-}
106
107=== removed file 'libqmenumodel/src/unitymenuaction.h'
108--- libqmenumodel/src/unitymenuaction.h 2013-08-09 11:33:39 +0000
109+++ libqmenumodel/src/unitymenuaction.h 1970-01-01 00:00:00 +0000
110@@ -1,66 +0,0 @@
111-/*
112- * Copyright 2013 Canonical Ltd.
113- *
114- * This program is free software; you can redistribute it and/or modify
115- * it under the terms of the GNU Lesser General Public License as published by
116- * the Free Software Foundation; version 3.
117- *
118- * This program is distributed in the hope that it will be useful,
119- * but WITHOUT ANY WARRANTY; without even the implied warranty of
120- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
121- * GNU Lesser General Public License for more details.
122- *
123- * You should have received a copy of the GNU Lesser General Public License
124- * along with this program. If not, see <http://www.gnu.org/licenses/>.
125- *
126- * Authors:
127- * Nick Dedekind <nick.dedekind@canonical.com>
128- */
129-
130-#ifndef UNITYMENUACTION_H
131-#define UNITYMENUACTION_H
132-
133-#include <QObject>
134-#include <QVariant>
135-
136-typedef struct _GVariant GVariant;
137-class UnityMenuModel;
138-
139-class UnityMenuAction : public QObject
140-{
141- Q_OBJECT
142- Q_PROPERTY(QVariant name READ name NOTIFY nameChanged)
143- Q_PROPERTY(QVariant state READ state WRITE changeState NOTIFY stateChanged)
144- Q_PROPERTY(int index READ index WRITE setIndex NOTIFY indexChanged)
145- Q_PROPERTY(UnityMenuModel* model READ model WRITE setModel NOTIFY modelChanged)
146-public:
147- UnityMenuAction(QObject* parent=0);
148-
149- int index() const;
150- void setIndex(int index);
151-
152- UnityMenuModel* model() const;
153- void setModel(UnityMenuModel* model);
154-
155- virtual QString name() const = 0;
156-
157- virtual QVariant state() const = 0;
158-
159- Q_INVOKABLE virtual void activate(const QVariant &parameter) = 0;
160-
161- Q_INVOKABLE virtual void changeState(const QVariant& vvalue) = 0;
162-
163-Q_SIGNALS:
164- void nameChanged();
165- void stateChanged();
166- void indexChanged(int index);
167- void modelChanged(UnityMenuModel* model);
168-
169-private:
170- UnityMenuModel* m_model;
171- int m_index;
172-};
173-
174-Q_DECLARE_METATYPE(UnityMenuAction*)
175-
176-#endif // UNITYMENUACTION_H
177
178=== modified file 'libqmenumodel/src/unitymenumodel.cpp'
179--- libqmenumodel/src/unitymenumodel.cpp 2013-08-12 10:33:40 +0000
180+++ libqmenumodel/src/unitymenumodel.cpp 2013-08-12 20:53:45 +0000
181@@ -19,7 +19,6 @@
182 #include "unitymenumodel.h"
183 #include "converter.h"
184 #include "actionstateparser.h"
185-#include "unitymenuaction.h"
186 #include "unitymenumodelevents.h"
187
188 #include <QIcon>
189@@ -43,6 +42,7 @@
190 TypeRole,
191 ExtendedAttributesRole,
192 ActionRole,
193+ ActionStateRole,
194 IsCheckRole,
195 IsRadioRole,
196 IsToggledRole
197@@ -80,65 +80,6 @@
198 static void menuItemChanged(GObject *object, GParamSpec *pspec, gpointer user_data);
199 };
200
201-class UnityGtkMenuTrackerItemAction : public UnityMenuAction
202-{
203-public:
204- UnityGtkMenuTrackerItemAction(int index, UnityMenuModelPrivate* priv)
205- : UnityMenuAction(priv->model),
206- d(priv)
207- {
208- setModel(priv->model);
209- setIndex(index);
210- }
211-
212- virtual QString name() const {
213- GtkMenuTrackerItem* item;
214-
215- item = (GtkMenuTrackerItem *) g_sequence_get (g_sequence_get_iter_at_pos (d->items, index()));
216- if (!item) return QString();
217-
218- return gtk_menu_tracker_item_get_action_name(item);
219- }
220-
221- virtual QVariant state() const {
222- GtkMenuTrackerItem* item;
223-
224- item = (GtkMenuTrackerItem *) g_sequence_get (g_sequence_get_iter_at_pos (d->items, index()));
225- if (!item) return QVariant();
226-
227- return d->itemState(item);
228- }
229-
230- virtual void activate(const QVariant &parameter)
231- {
232- GtkMenuTrackerItem* item;
233- gchar *action;
234-
235- item = (GtkMenuTrackerItem *) g_sequence_get (g_sequence_get_iter_at_pos (d->items, index()));
236- if (!item) return;
237-
238- gtk_menu_tracker_item_get_attribute (item, "action", "s", &action);
239- g_action_group_activate_action (G_ACTION_GROUP (d->muxer), action, Converter::toGVariant(parameter));
240-
241- g_free (action);
242- }
243-
244- virtual void changeState(const QVariant& vvalue)
245- {
246- GtkMenuTrackerItem* item;
247-
248- item = (GtkMenuTrackerItem *) g_sequence_get (g_sequence_get_iter_at_pos (d->items, index()));
249- if (!item) return;
250-
251- GVariant* data = Converter::toGVariant(vvalue);
252- gtk_menu_tracker_item_change_state (item, data);
253- g_variant_unref(data);
254- }
255-
256-private:
257- UnityMenuModelPrivate* d;
258-};
259-
260 void menu_item_free (gpointer data)
261 {
262 GtkMenuTrackerItem *item = (GtkMenuTrackerItem *) data;
263@@ -455,7 +396,10 @@
264 }
265
266 case ActionRole:
267- return QVariant::fromValue(new UnityGtkMenuTrackerItemAction(index.row(), priv));
268+ return gtk_menu_tracker_item_get_action_name (item);
269+
270+ case ActionStateRole:
271+ return priv->itemState(item);
272
273 case IsCheckRole:
274 return gtk_menu_tracker_item_get_role (item) == GTK_MENU_TRACKER_ITEM_ROLE_CHECK;
275@@ -493,6 +437,7 @@
276 names[TypeRole] = "type";
277 names[ExtendedAttributesRole] = "ext";
278 names[ActionRole] = "action";
279+ names[ActionStateRole] = "actionState";
280 names[IsCheckRole] = "isCheck";
281 names[IsRadioRole] = "isRadio";
282 names[IsToggledRole] = "isToggled";
283@@ -641,13 +586,36 @@
284 return this->data(this->index(row, 0), priv->roles[role]);
285 }
286
287-void UnityMenuModel::activate(int index)
288+void UnityMenuModel::activate(int index, const QVariant& parameter)
289 {
290 GtkMenuTrackerItem *item;
291
292 item = (GtkMenuTrackerItem *) g_sequence_get (g_sequence_get_iter_at_pos (priv->items, index));
293- gtk_menu_tracker_item_activated (item);
294-}
295+
296+ if (parameter.isValid()) {
297+ gchar *action;
298+
299+ gtk_menu_tracker_item_get_attribute (item, "action", "s", &action);
300+ g_action_group_activate_action (G_ACTION_GROUP (priv->muxer), action, Converter::toGVariant(parameter));
301+
302+ g_free (action);
303+ } else {
304+ gtk_menu_tracker_item_activated (item);
305+ }
306+}
307+
308+void UnityMenuModel::changeState(int index, const QVariant& parameter)
309+{
310+ GtkMenuTrackerItem* item;
311+
312+ item = (GtkMenuTrackerItem *) g_sequence_get (g_sequence_get_iter_at_pos (priv->items, index));
313+ if (!item) return;
314+
315+ GVariant* data = Converter::toGVariant(parameter);
316+ gtk_menu_tracker_item_change_state (item, data);
317+ g_variant_unref(data);
318+}
319+
320
321 bool UnityMenuModel::event(QEvent* e)
322 {
323
324=== modified file 'libqmenumodel/src/unitymenumodel.h'
325--- libqmenumodel/src/unitymenumodel.h 2013-08-12 10:30:21 +0000
326+++ libqmenumodel/src/unitymenumodel.h 2013-08-12 20:53:45 +0000
327@@ -57,7 +57,9 @@
328 Q_INVOKABLE QObject * submenu(int position, QQmlComponent* actionStateParser = NULL);
329 Q_INVOKABLE bool loadExtendedAttributes(int position, const QVariantMap &schema);
330 Q_INVOKABLE QVariant get(int row, const QByteArray &role);
331- Q_INVOKABLE void activate(int index);
332+
333+ Q_INVOKABLE void activate(int index, const QVariant& parameter = QVariant());
334+ Q_INVOKABLE void changeState(int index, const QVariant& parameter);
335
336 Q_SIGNALS:
337 void busNameChanged(const QByteArray &name);

Subscribers

People subscribed via source and target branches