From 0373d6fcb3f7b62028db4978ba215c403b43fed9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Wed, 25 Jan 2012 11:55:37 +0100 Subject: IndicatorObject: correctly initialize the parent object. --- libindicator/indicator-object.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'libindicator') diff --git a/libindicator/indicator-object.c b/libindicator/indicator-object.c index 849fb9f..6e25387 100644 --- a/libindicator/indicator-object.c +++ b/libindicator/indicator-object.c @@ -348,6 +348,7 @@ indicator_object_dispose (GObject *object) if (entry_get_private(io, entry)->visibility == ENTRY_INVISIBLE) { g_signal_emit(io, signals[ENTRY_ADDED], detail, entry); } + entry->parent_object = NULL; } g_list_free (entries); @@ -507,6 +508,8 @@ get_entries_default (IndicatorObject * io) if (!priv->gotten_entries) { IndicatorObjectClass * class = INDICATOR_OBJECT_GET_CLASS(io); + priv->entry.parent_object = io; + if (class->get_label) { priv->entry.label = class->get_label(io); } @@ -551,7 +554,7 @@ get_entries_default (IndicatorObject * io) static GList* get_all_entries (IndicatorObject * io) { - GList * all_entries = NULL; + GList * all_entries = NULL, *l; g_return_val_if_fail(INDICATOR_IS_OBJECT(io), NULL); IndicatorObjectClass * class = INDICATOR_OBJECT_GET_CLASS(io); @@ -559,8 +562,16 @@ get_all_entries (IndicatorObject * io) if (class->get_entries == NULL) g_error("No get_entries function on object. It must have been deleted?!?!"); else + { all_entries = class->get_entries(io); + for (l = all_entries; l; l = l->next) + { + IndicatorObjectEntry *entry = l->data; + entry->parent_object = io; + } + } + return all_entries; } @@ -757,6 +768,7 @@ indicator_object_entry_being_removed (IndicatorObject * io, IndicatorObjectEntry IndicatorObjectClass * class = INDICATOR_OBJECT_GET_CLASS(io); entry_get_private (io, entry)->visibility = ENTRY_INVISIBLE; + entry->parent_object = NULL; if (class->entry_being_removed != NULL) class->entry_being_removed (io, entry); @@ -769,6 +781,7 @@ indicator_object_entry_was_added (IndicatorObject * io, IndicatorObjectEntry * e IndicatorObjectClass * class = INDICATOR_OBJECT_GET_CLASS(io); entry_get_private (io, entry)->visibility = ENTRY_VISIBLE; + entry->parent_object = io; if (class->entry_was_added != NULL) class->entry_was_added (io, entry); -- cgit v1.2.3 From c9df18becfc38ab3e3a833d0095c26f5140800e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Wed, 25 Jan 2012 12:21:51 +0100 Subject: Indicator-Object: update the parent_object value only if the entry is valid. --- libindicator/indicator-object.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'libindicator') diff --git a/libindicator/indicator-object.c b/libindicator/indicator-object.c index 6e25387..91f45ff 100644 --- a/libindicator/indicator-object.c +++ b/libindicator/indicator-object.c @@ -348,7 +348,9 @@ indicator_object_dispose (GObject *object) if (entry_get_private(io, entry)->visibility == ENTRY_INVISIBLE) { g_signal_emit(io, signals[ENTRY_ADDED], detail, entry); } - entry->parent_object = NULL; + + if (entry) + entry->parent_object = NULL; } g_list_free (entries); @@ -568,7 +570,9 @@ get_all_entries (IndicatorObject * io) for (l = all_entries; l; l = l->next) { IndicatorObjectEntry *entry = l->data; - entry->parent_object = io; + + if (entry) + entry->parent_object = io; } } @@ -768,10 +772,14 @@ indicator_object_entry_being_removed (IndicatorObject * io, IndicatorObjectEntry IndicatorObjectClass * class = INDICATOR_OBJECT_GET_CLASS(io); entry_get_private (io, entry)->visibility = ENTRY_INVISIBLE; - entry->parent_object = NULL; if (class->entry_being_removed != NULL) + { + if (entry) + entry->parent_object = NULL; + class->entry_being_removed (io, entry); + } } static void @@ -781,10 +789,14 @@ indicator_object_entry_was_added (IndicatorObject * io, IndicatorObjectEntry * e IndicatorObjectClass * class = INDICATOR_OBJECT_GET_CLASS(io); entry_get_private (io, entry)->visibility = ENTRY_VISIBLE; - entry->parent_object = io; if (class->entry_was_added != NULL) + { + if (entry) + entry->parent_object = io; + class->entry_was_added (io, entry); + } } /** -- cgit v1.2.3 From 1baaf2880f44fea4519f323e3da425318af6c688 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Wed, 25 Jan 2012 18:10:29 +0100 Subject: IndicatorObject: update object parent in any case. --- libindicator/indicator-object.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'libindicator') diff --git a/libindicator/indicator-object.c b/libindicator/indicator-object.c index 91f45ff..d0b3ecf 100644 --- a/libindicator/indicator-object.c +++ b/libindicator/indicator-object.c @@ -773,11 +773,11 @@ indicator_object_entry_being_removed (IndicatorObject * io, IndicatorObjectEntry entry_get_private (io, entry)->visibility = ENTRY_INVISIBLE; + if (entry) + entry->parent_object = NULL; + if (class->entry_being_removed != NULL) { - if (entry) - entry->parent_object = NULL; - class->entry_being_removed (io, entry); } } @@ -790,11 +790,11 @@ indicator_object_entry_was_added (IndicatorObject * io, IndicatorObjectEntry * e entry_get_private (io, entry)->visibility = ENTRY_VISIBLE; + if (entry) + entry->parent_object = io; + if (class->entry_was_added != NULL) { - if (entry) - entry->parent_object = io; - class->entry_was_added (io, entry); } } -- cgit v1.2.3