[nautilus-actions] Review NAIDuplicable interface



commit f5319fa1e1039fa95ca26bdc8d0471807a0cb829
Author: Pierre Wieser <pwieser trychlos org>
Date:   Tue Jan 3 23:01:24 2012 +0100

    Review NAIDuplicable interface

 ChangeLog                 |    2 +
 src/core/na-iduplicable.c |  178 +++++++++++++++++---------------------------
 2 files changed, 71 insertions(+), 109 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 23c9bf4..6f709e0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 2012-01-03 Pierre Wieser <pwieser trychlos org>
 
+	* src/core/na-iduplicable.c: Review NAIDuplicable interface.
+
 	* src/core/na-icontext.c: Review NAIContext interface.
 
 	* src/test/test-iface-iface.c:
diff --git a/src/core/na-iduplicable.c b/src/core/na-iduplicable.c
index c82a9c3..a2bb867 100644
--- a/src/core/na-iduplicable.c
+++ b/src/core/na-iduplicable.c
@@ -62,13 +62,12 @@ enum {
 };
 
 static NAIDuplicableInterface *st_interface = NULL;
-static gboolean                st_initialized = FALSE;
-static gboolean                st_finalized = FALSE ;
+static guint                   st_initializations = 0;
 static gint                    st_signals[ LAST_SIGNAL ] = { 0 };
 
 static GType          register_type( void );
-static void           interface_base_init( NAIDuplicableInterface *klass );
-static void           interface_base_finalize( NAIDuplicableInterface *klass );
+static void           interface_init( NAIDuplicableInterface *klass );
+static void           interface_finalize( NAIDuplicableInterface *klass );
 
 static void           v_copy( NAIDuplicable *target, const NAIDuplicable *source );
 static gboolean       v_are_equal( const NAIDuplicable *a, const NAIDuplicable *b );
@@ -101,8 +100,8 @@ register_type( void )
 
 	static const GTypeInfo info = {
 		sizeof( NAIDuplicableInterface ),
-		( GBaseInitFunc ) interface_base_init,
-		( GBaseFinalizeFunc ) interface_base_finalize,
+		( GBaseInitFunc ) interface_init,
+		( GBaseFinalizeFunc ) interface_finalize,
 		NULL,
 		NULL,
 		NULL,
@@ -121,11 +120,11 @@ register_type( void )
 }
 
 static void
-interface_base_init( NAIDuplicableInterface *klass )
+interface_init( NAIDuplicableInterface *klass )
 {
-	static const gchar *thisfn = "na_iduplicable_interface_base_init";
+	static const gchar *thisfn = "na_iduplicable_interface_init";
 
-	if( !st_initialized ){
+	if( !st_initializations ){
 
 		g_debug( "%s: klass=%p", thisfn, ( void * ) klass );
 
@@ -202,21 +201,21 @@ interface_base_init( NAIDuplicableInterface *klass )
 				G_TYPE_POINTER, G_TYPE_BOOLEAN );
 
 		st_interface = klass;
-
-		st_initialized = TRUE;
 	}
+
+	st_initializations += 1;
 }
 
 static void
-interface_base_finalize( NAIDuplicableInterface *klass )
+interface_finalize( NAIDuplicableInterface *klass )
 {
-	static const gchar *thisfn = "na_iduplicable_interface_base_finalize";
+	static const gchar *thisfn = "na_iduplicable_interface_finalize";
 
-	if( !st_finalized ){
+	st_initializations -= 1;
 
-		g_debug( "%s: klass=%p", thisfn, ( void * ) klass );
+	if( !st_initializations ){
 
-		st_finalized = TRUE;
+		g_debug( "%s: klass=%p", thisfn, ( void * ) klass );
 
 		release_signal_consumers( klass->private->consumers );
 
@@ -239,12 +238,9 @@ na_iduplicable_dispose( const NAIDuplicable *object )
 
 	g_return_if_fail( NA_IS_IDUPLICABLE( object ));
 
-	if( st_initialized && !st_finalized ){
-
-		str = get_duplicable_str( object );
-		g_free( str );
-		g_object_set_data( G_OBJECT( object ), NA_IDUPLICABLE_DATA_DUPLICABLE, NULL );
-	}
+	str = get_duplicable_str( object );
+	g_free( str );
+	g_object_set_data( G_OBJECT( object ), NA_IDUPLICABLE_DATA_DUPLICABLE, NULL );
 }
 
 /**
@@ -269,14 +265,11 @@ na_iduplicable_dump( const NAIDuplicable *object )
 
 	g_return_if_fail( NA_IS_IDUPLICABLE( object ));
 
-	if( st_initialized && !st_finalized ){
+	str = get_duplicable_str( object );
 
-		str = get_duplicable_str( object );
-
-		g_debug( "| %s:   origin=%p", thisfn, ( void * ) str->origin );
-		g_debug( "| %s: modified=%s", thisfn, str->modified ? "True" : "False" );
-		g_debug( "| %s:    valid=%s", thisfn, str->valid ? "True" : "False" );
-	}
+	g_debug( "| %s:   origin=%p", thisfn, ( void * ) str->origin );
+	g_debug( "| %s: modified=%s", thisfn, str->modified ? "True" : "False" );
+	g_debug( "| %s:    valid=%s", thisfn, str->valid ? "True" : "False" );
 }
 
 /**
@@ -311,25 +304,20 @@ na_iduplicable_duplicate( const NAIDuplicable *object )
 
 	g_return_val_if_fail( NA_IS_IDUPLICABLE( object ), NULL );
 
-	dup = NULL;
+	g_debug( "%s: object=%p (%s)",
+			thisfn,
+			( void * ) object, G_OBJECT_TYPE_NAME( object ));
 
-	if( st_initialized && !st_finalized ){
+	dup = g_object_new( G_OBJECT_TYPE( object ), NULL );
 
-		g_debug( "%s: object=%p (%s)",
-				thisfn,
-				( void * ) object, G_OBJECT_TYPE_NAME( object ));
+	v_copy( dup, object );
 
-		dup = g_object_new( G_OBJECT_TYPE( object ), NULL );
+	dup_str = get_duplicable_str( dup );
+	obj_str = get_duplicable_str( object );
 
-		v_copy( dup, object );
-
-		dup_str = get_duplicable_str( dup );
-		obj_str = get_duplicable_str( object );
-
-		dup_str->origin = ( NAIDuplicable * ) object;
-		dup_str->modified = obj_str->modified;
-		dup_str->valid = obj_str->valid;
-	}
+	dup_str->origin = ( NAIDuplicable * ) object;
+	dup_str->modified = obj_str->modified;
+	dup_str->valid = obj_str->valid;
 
 	return( dup );
 }
@@ -364,36 +352,34 @@ na_iduplicable_check_status( const NAIDuplicable *object )
 
 	g_return_if_fail( NA_IS_IDUPLICABLE( object ));
 
-	if( st_initialized && !st_finalized ){
-		g_debug( "%s: object=%p (%s)", thisfn, ( void * ) object, G_OBJECT_TYPE_NAME( object ));
+	g_debug( "%s: object=%p (%s)", thisfn, ( void * ) object, G_OBJECT_TYPE_NAME( object ));
 
-		str = get_duplicable_str( object );
+	str = get_duplicable_str( object );
 
-		was_modified = str->modified;
-		was_valid = str->valid;
+	was_modified = str->modified;
+	was_valid = str->valid;
 
-		if( str->origin ){
-			g_debug( "%s: vs. origin=%p (%s)", thisfn, ( void * ) str->origin, G_OBJECT_TYPE_NAME( str->origin ));
-			g_return_if_fail( NA_IS_IDUPLICABLE( str->origin ));
-			str->modified = !v_are_equal( str->origin, object );
+	if( str->origin ){
+		g_debug( "%s: vs. origin=%p (%s)", thisfn, ( void * ) str->origin, G_OBJECT_TYPE_NAME( str->origin ));
+		g_return_if_fail( NA_IS_IDUPLICABLE( str->origin ));
+		str->modified = !v_are_equal( str->origin, object );
 
-		} else {
-			str->modified = TRUE;
-		}
+	} else {
+		str->modified = TRUE;
+	}
 
-		if( was_modified != str->modified ){
-			g_debug( "%s: %p (%s) status changed to modified=%s",
-					thisfn, ( void * ) object, G_OBJECT_TYPE_NAME( object ), str->modified ? "True":"False" );
-			g_signal_emit_by_name( G_OBJECT( object ), IDUPLICABLE_SIGNAL_MODIFIED_CHANGED, object, str->modified );
-		}
+	if( was_modified != str->modified ){
+		g_debug( "%s: %p (%s) status changed to modified=%s",
+				thisfn, ( void * ) object, G_OBJECT_TYPE_NAME( object ), str->modified ? "True":"False" );
+		g_signal_emit_by_name( G_OBJECT( object ), IDUPLICABLE_SIGNAL_MODIFIED_CHANGED, object, str->modified );
+	}
 
-		str->valid = v_is_valid( object );
+	str->valid = v_is_valid( object );
 
-		if( was_valid != str->valid ){
-			g_debug( "%s: %p (%s) status changed to valid=%s",
-					thisfn, ( void * ) object, G_OBJECT_TYPE_NAME( object ), str->valid ? "True":"False" );
-			g_signal_emit_by_name( G_OBJECT( object ), IDUPLICABLE_SIGNAL_VALID_CHANGED, object, str->valid );
-		}
+	if( was_valid != str->valid ){
+		g_debug( "%s: %p (%s) status changed to valid=%s",
+				thisfn, ( void * ) object, G_OBJECT_TYPE_NAME( object ), str->valid ? "True":"False" );
+		g_signal_emit_by_name( G_OBJECT( object ), IDUPLICABLE_SIGNAL_VALID_CHANGED, object, str->valid );
 	}
 }
 
@@ -415,13 +401,8 @@ na_iduplicable_get_origin( const NAIDuplicable *object )
 
 	g_return_val_if_fail( NA_IS_IDUPLICABLE( object ), NULL );
 
-	origin = NULL;
-
-	if( st_initialized && !st_finalized ){
-
-		str = get_duplicable_str( object );
-		origin = str->origin;
-	}
+	str = get_duplicable_str( object );
+	origin = str->origin;
 
 	return( origin );
 }
@@ -445,13 +426,8 @@ na_iduplicable_is_valid( const NAIDuplicable *object )
 
 	g_return_val_if_fail( NA_IS_IDUPLICABLE( object ), FALSE );
 
-	is_valid = FALSE;
-
-	if( st_initialized && !st_finalized ){
-
-		str = get_duplicable_str( object );
-		is_valid = str->valid;
-	}
+	str = get_duplicable_str( object );
+	is_valid = str->valid;
 
 	return( is_valid );
 }
@@ -476,13 +452,8 @@ na_iduplicable_is_modified( const NAIDuplicable *object )
 
 	g_return_val_if_fail( NA_IS_IDUPLICABLE( object ), FALSE );
 
-	is_modified = FALSE;
-
-	if( st_initialized && !st_finalized ){
-
-		str = get_duplicable_str( object );
-		is_modified = str->modified;
-	}
+	str = get_duplicable_str( object );
+	is_modified = str->modified;
 
 	return( is_modified );
 }
@@ -504,11 +475,8 @@ na_iduplicable_set_origin( NAIDuplicable *object, const NAIDuplicable *origin )
 	g_return_if_fail( NA_IS_IDUPLICABLE( object ));
 	g_return_if_fail( NA_IS_IDUPLICABLE( origin ) || !origin );
 
-	if( st_initialized && !st_finalized ){
-
-		str = get_duplicable_str( object );
-		str->origin = ( NAIDuplicable * ) origin;
-	}
+	str = get_duplicable_str( object );
+	str->origin = ( NAIDuplicable * ) origin;
 }
 
 #ifdef NA_ENABLE_DEPRECATED
@@ -529,11 +497,8 @@ na_iduplicable_set_modified( NAIDuplicable *object, gboolean modified )
 
 	g_return_if_fail( NA_IS_IDUPLICABLE( object ));
 
-	if( st_initialized && !st_finalized ){
-
-		str = get_duplicable_str( object );
-		str->modified = modified;
-	}
+	str = get_duplicable_str( object );
+	str->modified = modified;
 }
 #endif /* NA_ENABLE_DEPRECATED */
 
@@ -579,12 +544,9 @@ na_iduplicable_register_consumer( GObject *consumer )
 {
 	g_return_if_fail( st_interface );
 
-	if( st_initialized && !st_finalized ){
+	g_debug( "na_iduplicable_register_consumer: consumer=%p", ( void * ) consumer );
 
-		g_debug( "na_iduplicable_register_consumer: consumer=%p", ( void * ) consumer );
-
-		st_interface->private->consumers = g_list_prepend( st_interface->private->consumers, consumer );
-	}
+	st_interface->private->consumers = g_list_prepend( st_interface->private->consumers, consumer );
 }
 
 static void
@@ -609,14 +571,12 @@ propagate_signal_to_consumers( NAIDuplicable *instance, const gchar *signal, GOb
 	static const gchar *thisfn = "na_iduplicable_propagate_signals_to_consumers";
 	GList *ic;
 
-	g_return_if_fail( st_interface );
+	g_return_if_fail( NA_IS_IDUPLICABLE( instance ));
 
-	if( st_initialized && !st_finalized ){
-		g_debug( "%s: instance=%p, signal=%s", thisfn, ( void * ) instance, signal );
+	g_debug( "%s: instance=%p, signal=%s", thisfn, ( void * ) instance, signal );
 
-		for( ic = st_interface->private->consumers ; ic ; ic = ic->next ){
-			g_signal_emit_by_name( ic->data, signal, object, new_status );
-		}
+	for( ic = st_interface->private->consumers ; ic ; ic = ic->next ){
+		g_signal_emit_by_name( ic->data, signal, object, new_status );
 	}
 }
 



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