[nautilus-actions] Fix assertion 'NA_IS_OBJECT( object )' failed



commit fef01903b9eee5ba4087a63042468b944782883e
Author: Pierre Wieser <pwieser trychlos org>
Date:   Fri Feb 11 16:54:14 2011 +0100

    Fix assertion 'NA_IS_OBJECT( object )' failed
    
    when finalizing a modified tree view.

 src/core/na-object.c        |   12 ++++++------
 src/nact/nact-main-window.c |    6 +++++-
 2 files changed, 11 insertions(+), 7 deletions(-)
---
diff --git a/src/core/na-object.c b/src/core/na-object.c
index 3ba8197..e6300fb 100644
--- a/src/core/na-object.c
+++ b/src/core/na-object.c
@@ -670,13 +670,13 @@ na_object_object_ref( NAObject *object )
 void
 na_object_object_unref( NAObject *object )
 {
-	if( NA_IS_OBJECT( object )){
-		if( !object->private->dispose_has_run ){
-			if( NA_IS_OBJECT_ITEM( object )){
-				g_list_foreach( na_object_get_items( object ), ( GFunc ) na_object_object_unref, NULL );
-			}
-			g_object_unref( object );
+	g_return_if_fail( NA_IS_OBJECT( object ));
+
+	if( !object->private->dispose_has_run ){
+		if( NA_IS_OBJECT_ITEM( object )){
+			g_list_foreach( na_object_get_items( object ), ( GFunc ) na_object_object_unref, NULL );
 		}
+		g_object_unref( object );
 	}
 }
 
diff --git a/src/nact/nact-main-window.c b/src/nact/nact-main-window.c
index 0dc87a8..74718d2 100644
--- a/src/nact/nact-main-window.c
+++ b/src/nact/nact-main-window.c
@@ -740,7 +740,6 @@ instance_dispose( GObject *window )
 
 		self->private->dispose_has_run = TRUE;
 
-		g_object_unref( self->private->items_view );
 		g_object_unref( self->private->clipboard );
 		g_object_unref( self->private->menubar );
 
@@ -761,6 +760,11 @@ instance_dispose( GObject *window )
 		nact_iexecution_tab_dispose( NACT_IEXECUTION_TAB( window ));
 		nact_iproperties_tab_dispose( NACT_IPROPERTIES_TAB( window ));
 
+		/* unref items view at last as gtk_tree_model_store_clear() will
+		 * finalize all objects, thus invaliditing all our references
+		 */
+		g_object_unref( self->private->items_view );
+
 		/* chain up to the parent class */
 		if( G_OBJECT_CLASS( st_parent_class )->dispose ){
 			G_OBJECT_CLASS( st_parent_class )->dispose( window );



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