[nautilus-actions] Fix memory leak when selection is changed



commit dce78682d5dd954234dff8fd3a5f2bde7d46d425
Author: Pierre Wieser <pwieser trychlos org>
Date:   Sun Sep 27 19:17:56 2009 +0200

    Fix memory leak when selection is changed

 ChangeLog                     |    6 ++++++
 src/common/na-object-item.c   |    9 +++++----
 src/nact/nact-iactions-list.c |    5 ++---
 3 files changed, 13 insertions(+), 7 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 45eb447..004c088 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,10 +1,16 @@
 2009-09-27 Pierre Wieser <pwieser trychlos org>
 
+	* src/common/na-object-item.c (na_object_item_remove_item):
+	Release the reference on the removed item.
+
 	* src/nact/nact-clipboard.c:
 	* src/nact/nact-clipboard.h (nact_clipboard_primary_set,
 	nact_clipboard_primary_get, nact_clipboard_primary_counts):
 	Now use the NactClipboard convenience object.
 
+	* src/nact/nact-iactions-list.c (on_treeview_selection_changed):
+	Only get selected items when about to send the message.
+
 	* src/nact/nact-main-menubar.c:
 	Now use the NactClipboard convenience object.
 
diff --git a/src/common/na-object-item.c b/src/common/na-object-item.c
index 211d026..1f7b60a 100644
--- a/src/common/na-object-item.c
+++ b/src/common/na-object-item.c
@@ -589,8 +589,8 @@ na_object_item_free_items( GList *items )
 	for( it = items ; it ; it = it->next ){
 		if( G_IS_OBJECT( it->data )){
 			g_object_unref( it->data );
-		} else {
-			g_warning( "na_object_item_free_items: %p not an object", ( void * ) it->data );
+		/*} else {
+			g_warning( "na_object_item_free_items: %p not an object", ( void * ) it->data );*/
 		}
 	}
 
@@ -803,6 +803,7 @@ na_object_item_remove_item( NAObjectItem *item, const NAObject *object )
 
 		if( g_list_find( item->private->items, ( gconstpointer ) object )){
 			item->private->items = g_list_remove( item->private->items, ( gconstpointer ) object );
+			g_object_unref(( gpointer ) object );
 		}
 	}
 }
@@ -828,8 +829,8 @@ object_dump( const NAObject *item )
 				( void * ) NA_OBJECT_ITEM( item )->private->items );
 
 		/* do not recurse here, as this is actually dealt with by
-		 * na_object_dump() api ;
-		 * else, we would have the action being dumped after its childs
+		 * na_object_dump() api ; else, we would have the action body
+		 * being dumped after its childs
 		 */
 	}
 }
diff --git a/src/nact/nact-iactions-list.c b/src/nact/nact-iactions-list.c
index cbda05d..b347538 100644
--- a/src/nact/nact-iactions-list.c
+++ b/src/nact/nact-iactions-list.c
@@ -1429,10 +1429,9 @@ on_treeview_selection_changed( GtkTreeSelection *selection, NactIActionsList *in
 {
 	GList *selected_items;
 
-	selected_items = nact_iactions_list_get_selected_items( instance );
-	g_debug( "on_treeview_selection_changed: selection=%p (%d items)", ( void * ) selected_items, g_list_length( selected_items ));
-
 	if( is_selection_changed_authorized( instance )){
+		selected_items = nact_iactions_list_get_selected_items( instance );
+		g_debug( "on_treeview_selection_changed: selection=%p (%d items)", ( void * ) selected_items, g_list_length( selected_items ));
 		g_signal_emit_by_name( instance, IACTIONS_LIST_SIGNAL_SELECTION_CHANGED, selected_items );
 	}
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]