aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRenato Araujo Oliveira Filho <renato.filho@canonical.com>2012-11-23 14:41:21 -0300
committerRenato Araujo Oliveira Filho <renato.filho@canonical.com>2012-11-23 14:41:21 -0300
commitaa56c7b79317fb88c12fc0573fc23b6939337fe4 (patch)
treed13cf7c507530260dccd35f6a207b4dcd3b8a313
parentaf103ebfb8945c903accb42944516d234fe5744c (diff)
downloadqmenumodel-aa56c7b79317fb88c12fc0573fc23b6939337fe4.tar.gz
qmenumodel-aa56c7b79317fb88c12fc0573fc23b6939337fe4.tar.bz2
qmenumodel-aa56c7b79317fb88c12fc0573fc23b6939337fe4.zip
Take care of object ref internally on QMenumodel, instead of QDBusMenuModel.
-rw-r--r--libqmenumodel/src/qdbusmenumodel.cpp9
-rw-r--r--libqmenumodel/src/qmenumodel.cpp22
-rw-r--r--libqmenumodel/src/qmenumodel.h1
-rw-r--r--tests/client/modeltest.cpp15
4 files changed, 7 insertions, 40 deletions
diff --git a/libqmenumodel/src/qdbusmenumodel.cpp b/libqmenumodel/src/qdbusmenumodel.cpp
index d3369dd..abf259f 100644
--- a/libqmenumodel/src/qdbusmenumodel.cpp
+++ b/libqmenumodel/src/qdbusmenumodel.cpp
@@ -89,11 +89,7 @@ void QDBusMenuModel::stop()
/*! \internal */
void QDBusMenuModel::serviceVanish(GDBusConnection *)
{
- GMenuModel *model = menuModel();
- if (model != NULL) {
- setMenuModel(NULL);
- g_object_unref(model);
- }
+ setMenuModel(NULL);
}
/*! \internal */
@@ -105,6 +101,9 @@ void QDBusMenuModel::serviceAppear(GDBusConnection *connection)
setMenuModel(model);
if (model == NULL) {
stop();
+ } else {
+ //setModel take care of the ref
+ g_object_unref(model);
}
}
diff --git a/libqmenumodel/src/qmenumodel.cpp b/libqmenumodel/src/qmenumodel.cpp
index 3ae2e3e..ec5570f 100644
--- a/libqmenumodel/src/qmenumodel.cpp
+++ b/libqmenumodel/src/qmenumodel.cpp
@@ -56,11 +56,7 @@ void QMenuModel::setMenuModel(GMenuModel *other)
if (m_menuModel == other) {
return;
}
- setMenuModelImpl(other);
-}
-void QMenuModel::setMenuModelImpl(GMenuModel *other)
-{
beginResetModel();
clearModel();
@@ -68,9 +64,7 @@ void QMenuModel::setMenuModelImpl(GMenuModel *other)
m_menuModel = other;
if (m_menuModel) {
- g_object_weak_ref(G_OBJECT(m_menuModel),
- reinterpret_cast<GWeakNotify>(QMenuModel::onGMenuModelDestroyed),
- this);
+ g_object_ref(m_menuModel);
// this will trigger the menu load
(void) g_menu_model_get_n_items(m_menuModel);
m_signalChangedId = g_signal_connect(m_menuModel,
@@ -92,11 +86,9 @@ GMenuModel *QMenuModel::menuModel() const
void QMenuModel::clearModel()
{
if (m_menuModel) {
- g_object_weak_unref(G_OBJECT(m_menuModel),
- reinterpret_cast<GWeakNotify>(QMenuModel::onGMenuModelDestroyed),
- this);
g_signal_handler_disconnect(m_menuModel, m_signalChangedId);
m_signalChangedId = 0;
+ g_object_unref(m_menuModel);
m_menuModel = NULL;
}
@@ -194,7 +186,7 @@ QVariant QMenuModel::getLink(const QModelIndex &index,
index.row(),
linkName.toUtf8().data());
- if (link) {
+ if (link) {
QMenuModel *other = new QMenuModel(link, const_cast<QMenuModel*>(this));
return QVariant::fromValue<QObject*>(other);
}
@@ -232,14 +224,6 @@ QVariant QMenuModel::getExtraProperties(const QModelIndex &index) const
return extra;
}
-/*! \internal */
-void QMenuModel::onGMenuModelDestroyed(gpointer data,
- GObject *oldObject)
-{
- QMenuModel *self = reinterpret_cast<QMenuModel*>(data);
- self->m_menuModel = NULL;
- self->setMenuModelImpl(NULL);
-}
/*! \internal */
void QMenuModel::onItemsChanged(GMenuModel *,
diff --git a/libqmenumodel/src/qmenumodel.h b/libqmenumodel/src/qmenumodel.h
index f3b431c..b3ef460 100644
--- a/libqmenumodel/src/qmenumodel.h
+++ b/libqmenumodel/src/qmenumodel.h
@@ -66,7 +66,6 @@ private:
void setMenuModelImpl(GMenuModel *model);
static void onItemsChanged(GMenuModel *model, gint position, gint removed, gint added, gpointer data);
- static void onGMenuModelDestroyed(gpointer data, GObject *oldObject);
};
#endif
diff --git a/tests/client/modeltest.cpp b/tests/client/modeltest.cpp
index bc5d95e..8be92a6 100644
--- a/tests/client/modeltest.cpp
+++ b/tests/client/modeltest.cpp
@@ -260,21 +260,6 @@ private Q_SLOTS:
delete model;
}
-
- /*
- * Test if the model is clearead after GMenuModel be destroyed
- */
- void testDestroyGMenuModel()
- {
- GMenu *menu = g_menu_new();
- g_menu_append(menu, "test-menu0", NULL);
- g_menu_append(menu, "test-menu1", NULL);
- TestMenuModel model(reinterpret_cast<GMenuModel*>(menu));
- QCOMPARE(model.rowCount(), 2);
-
- g_object_unref(menu);
- QCOMPARE(model.rowCount(), 0);
- }
};
QTEST_MAIN(ModelTest)