[nautilus-actions] Review NAIFactoryObject interface



commit 4e9887ac5067552950c4c97a76501d7a6aba9ba5
Author: Pierre Wieser <pwieser trychlos org>
Date:   Tue Jan 3 23:09:27 2012 +0100

    Review NAIFactoryObject interface

 ChangeLog                     |    3 +
 src/core/na-factory-object.c  |  138 +++++++++++++++++------------------------
 src/core/na-ifactory-object.c |   55 +++++++---------
 3 files changed, 83 insertions(+), 113 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 4f3257c..1078313 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2012-01-03 Pierre Wieser <pwieser trychlos org>
 
+	* src/core/na-factory-object.c:
+	* src/core/na-ifactory-object.c: Review NAIFactoryObject interface.
+
 	* src/core/na-exporter.c:
 	* src/core/na-iexporter.c: Review NAIExporter interface.
 
diff --git a/src/core/na-factory-object.c b/src/core/na-factory-object.c
index ad03d1a..c0f53fb 100644
--- a/src/core/na-factory-object.c
+++ b/src/core/na-factory-object.c
@@ -123,17 +123,14 @@ na_factory_object_define_properties( GObjectClass *class, const NADataGroup *gro
 {
 	static const gchar *thisfn = "na_factory_object_define_properties";
 
-	if( ifactory_object_initialized && !ifactory_object_finalized ){
+	g_return_if_fail( G_IS_OBJECT_CLASS( class ));
 
-		g_debug( "%s: class=%p (%s)",
-				thisfn, ( void * ) class, G_OBJECT_CLASS_NAME( class ));
+	g_debug( "%s: class=%p (%s)",
+			thisfn, ( void * ) class, G_OBJECT_CLASS_NAME( class ));
 
-		g_return_if_fail( G_IS_OBJECT_CLASS( class ));
-
-		/* define class properties
-		 */
-		iter_on_data_defs( groups, DATA_DEF_ITER_SET_PROPERTIES, ( NADataDefIterFunc ) define_class_properties_iter, class );
-	}
+	/* define class properties
+	 */
+	iter_on_data_defs( groups, DATA_DEF_ITER_SET_PROPERTIES, ( NADataDefIterFunc ) define_class_properties_iter, class );
 }
 
 static gboolean
@@ -175,23 +172,20 @@ na_factory_object_get_data_def( const NAIFactoryObject *object, const gchar *nam
 
 	def = NULL;
 
-	if( ifactory_object_initialized && !ifactory_object_finalized ){
+	NADataGroup *groups = v_get_groups( object );
+	while( groups->group ){
 
-		NADataGroup *groups = v_get_groups( object );
-		while( groups->group ){
-
-			NADataDef *def = groups->def;
-			if( def ){
-				while( def->name ){
+		NADataDef *def = groups->def;
+		if( def ){
+			while( def->name ){
 
-					if( !strcmp( def->name, name )){
-						return( def );
-					}
-					def++;
+				if( !strcmp( def->name, name )){
+					return( def );
 				}
+				def++;
 			}
-			groups++;
 		}
+		groups++;
 	}
 
 	return( def );
@@ -210,12 +204,7 @@ na_factory_object_get_data_groups( const NAIFactoryObject *object )
 
 	g_return_val_if_fail( NA_IS_IFACTORY_OBJECT( object ), NULL );
 
-	groups = NULL;
-
-	if( ifactory_object_initialized && !ifactory_object_finalized ){
-
-		groups = v_get_groups( object );
-	}
+	groups = v_get_groups( object );
 
 	return( groups );
 }
@@ -238,15 +227,12 @@ na_factory_object_iter_on_boxed( const NAIFactoryObject *object, NAFactoryObject
 
 	g_return_if_fail( NA_IS_IFACTORY_OBJECT( object ));
 
-	if( ifactory_object_initialized && !ifactory_object_finalized ){
-
-		list = g_object_get_data( G_OBJECT( object ), NA_IFACTORY_OBJECT_PROP_DATA );
-		/*g_debug( "list=%p (count=%u)", ( void * ) list, g_list_length( list ));*/
-		stop = FALSE;
+	list = g_object_get_data( G_OBJECT( object ), NA_IFACTORY_OBJECT_PROP_DATA );
+	/*g_debug( "list=%p (count=%u)", ( void * ) list, g_list_length( list ));*/
+	stop = FALSE;
 
-		for( ibox = list ; ibox && !stop ; ibox = ibox->next ){
-			stop = ( *pfn )( object, NA_DATA_BOXED( ibox->data ), user_data );
-		}
+	for( ibox = list ; ibox && !stop ; ibox = ibox->next ){
+		stop = ( *pfn )( object, NA_DATA_BOXED( ibox->data ), user_data );
 	}
 }
 
@@ -269,14 +255,11 @@ na_factory_object_get_default( NAIFactoryObject *object, const gchar *name )
 
 	value = NULL;
 
-	if( ifactory_object_initialized && !ifactory_object_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 ));
 
-		def = na_factory_object_get_data_def( object, name );
-		if( def ){
-			value = g_strdup( def->default_value );
-		}
+	def = na_factory_object_get_data_def( object, name );
+	if( def ){
+		value = g_strdup( def->default_value );
 	}
 
 	return( value );
@@ -297,22 +280,19 @@ na_factory_object_set_defaults( NAIFactoryObject *object )
 
 	g_return_if_fail( NA_IS_IFACTORY_OBJECT( object ));
 
-	if( ifactory_object_initialized && !ifactory_object_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 ));
 
-		groups = v_get_groups( object );
-		if( !groups ){
-			g_warning( "%s: no NADataGroup found for %s", thisfn, G_OBJECT_TYPE_NAME( object ));
+	groups = v_get_groups( object );
+	if( !groups ){
+		g_warning( "%s: no NADataGroup found for %s", thisfn, G_OBJECT_TYPE_NAME( object ));
 
-		} else {
-			iter_data = g_new0( NafoDefaultIter, 1 );
-			iter_data->object = object;
+	} else {
+		iter_data = g_new0( NafoDefaultIter, 1 );
+		iter_data->object = object;
 
-			iter_on_data_defs( groups, DATA_DEF_ITER_SET_DEFAULTS, ( NADataDefIterFunc ) set_defaults_iter, iter_data );
+		iter_on_data_defs( groups, DATA_DEF_ITER_SET_DEFAULTS, ( NADataDefIterFunc ) set_defaults_iter, iter_data );
 
-			g_free( iter_data );
-		}
+		g_free( iter_data );
 	}
 }
 
@@ -352,20 +332,17 @@ na_factory_object_move_boxed( NAIFactoryObject *target, const NAIFactoryObject *
 	g_return_if_fail( NA_IS_IFACTORY_OBJECT( target ));
 	g_return_if_fail( NA_IS_IFACTORY_OBJECT( source ));
 
-	if( ifactory_object_initialized && !ifactory_object_finalized ){
+	GList *src_list = g_object_get_data( G_OBJECT( source ), NA_IFACTORY_OBJECT_PROP_DATA );
 
-		GList *src_list = g_object_get_data( G_OBJECT( source ), NA_IFACTORY_OBJECT_PROP_DATA );
+	if( g_list_find( src_list, boxed )){
+		src_list = g_list_remove( src_list, boxed );
+		g_object_set_data( G_OBJECT( source ), NA_IFACTORY_OBJECT_PROP_DATA, src_list );
 
-		if( g_list_find( src_list, boxed )){
-			src_list = g_list_remove( src_list, boxed );
-			g_object_set_data( G_OBJECT( source ), NA_IFACTORY_OBJECT_PROP_DATA, src_list );
+		attach_boxed_to_object( target, boxed );
 
-			attach_boxed_to_object( target, boxed );
-
-			const NADataDef *src_def = na_data_boxed_get_data_def( boxed );
-			NADataDef *tgt_def = na_factory_object_get_data_def( target, src_def->name );
-			na_data_boxed_set_data_def( boxed, tgt_def );
-		}
+		const NADataDef *src_def = na_data_boxed_get_data_def( boxed );
+		NADataDef *tgt_def = na_factory_object_get_data_def( target, src_def->name );
+		na_data_boxed_set_data_def( boxed, tgt_def );
 	}
 }
 
@@ -597,29 +574,26 @@ na_factory_object_read_item( NAIFactoryObject *object, const NAIFactoryProvider
 	g_return_if_fail( NA_IS_IFACTORY_OBJECT( object ));
 	g_return_if_fail( NA_IS_IFACTORY_PROVIDER( reader ));
 
-	if( ifactory_object_initialized && !ifactory_object_finalized ){
+	NADataGroup *groups = v_get_groups( object );
 
-		NADataGroup *groups = v_get_groups( object );
-
-		if( groups ){
-			v_read_start( object, reader, reader_data, messages );
+	if( groups ){
+		v_read_start( object, reader, reader_data, messages );
 
-			NafoReadIter *iter = g_new0( NafoReadIter, 1 );
-			iter->object = object;
-			iter->reader = ( NAIFactoryProvider * ) reader;
-			iter->reader_data = reader_data;
-			iter->messages = messages;
+		NafoReadIter *iter = g_new0( NafoReadIter, 1 );
+		iter->object = object;
+		iter->reader = ( NAIFactoryProvider * ) reader;
+		iter->reader_data = reader_data;
+		iter->messages = messages;
 
-			iter_on_data_defs( groups, DATA_DEF_ITER_READ_ITEM, ( NADataDefIterFunc ) read_data_iter, iter );
+		iter_on_data_defs( groups, DATA_DEF_ITER_READ_ITEM, ( NADataDefIterFunc ) read_data_iter, iter );
 
-			g_free( iter );
+		g_free( iter );
 
-			v_read_done( object, reader, reader_data, messages );
+		v_read_done( object, reader, reader_data, messages );
 
-		} else {
-			g_warning( "%s: class %s doesn't return any NADataGroup structure",
-					thisfn, G_OBJECT_TYPE_NAME( object ));
-		}
+	} else {
+		g_warning( "%s: class %s doesn't return any NADataGroup structure",
+				thisfn, G_OBJECT_TYPE_NAME( object ));
 	}
 }
 
diff --git a/src/core/na-ifactory-object.c b/src/core/na-ifactory-object.c
index a1ad864..214501c 100644
--- a/src/core/na-ifactory-object.c
+++ b/src/core/na-ifactory-object.c
@@ -44,12 +44,11 @@ struct _NAIFactoryObjectInterfacePrivate {
 	void *empty;					/* so that gcc -pedantic is happy */
 };
 
-gboolean ifactory_object_initialized = FALSE;
-gboolean ifactory_object_finalized   = FALSE;
+static guint st_initializations = 0;	/* interface initialization count */
 
 static GType register_type( void );
-static void  interface_base_init( NAIFactoryObjectInterface *klass );
-static void  interface_base_finalize( NAIFactoryObjectInterface *klass );
+static void  interface_init( NAIFactoryObjectInterface *klass );
+static void  interface_finalize( NAIFactoryObjectInterface *klass );
 
 static guint ifactory_object_get_version( const NAIFactoryObject *instance );
 
@@ -76,8 +75,8 @@ register_type( void )
 
 	static const GTypeInfo info = {
 		sizeof( NAIFactoryObjectInterface ),
-		( GBaseInitFunc ) interface_base_init,
-		( GBaseFinalizeFunc ) interface_base_finalize,
+		( GBaseInitFunc ) interface_init,
+		( GBaseFinalizeFunc ) interface_finalize,
 		NULL,
 		NULL,
 		NULL,
@@ -96,11 +95,11 @@ register_type( void )
 }
 
 static void
-interface_base_init( NAIFactoryObjectInterface *klass )
+interface_init( NAIFactoryObjectInterface *klass )
 {
-	static const gchar *thisfn = "na_ifactory_object_interface_base_init";
+	static const gchar *thisfn = "na_ifactory_object_interface_init";
 
-	if( !ifactory_object_initialized ){
+	if( !st_initializations ){
 
 		g_debug( "%s: klass=%p (%s)", thisfn, ( void * ) klass, G_OBJECT_CLASS_NAME( klass ));
 
@@ -115,21 +114,21 @@ interface_base_init( NAIFactoryObjectInterface *klass )
 		klass->read_done = NULL;
 		klass->write_start = NULL;
 		klass->write_done = NULL;
-
-		ifactory_object_initialized = TRUE;
 	}
+
+	st_initializations += 1;
 }
 
 static void
-interface_base_finalize( NAIFactoryObjectInterface *klass )
+interface_finalize( NAIFactoryObjectInterface *klass )
 {
-	static const gchar *thisfn = "na_ifactory_object_interface_base_finalize";
+	static const gchar *thisfn = "na_ifactory_object_interface_finalize";
 
-	if( ifactory_object_initialized && !ifactory_object_finalized ){
+	st_initializations -= 1;
 
-		g_debug( "%s: klass=%p", thisfn, ( void * ) klass );
+	if( !st_initializations ){
 
-		ifactory_object_finalized = TRUE;
+		g_debug( "%s: klass=%p", thisfn, ( void * ) klass );
 
 		g_free( klass->private );
 	}
@@ -161,18 +160,15 @@ na_ifactory_object_get_data_boxed( const NAIFactoryObject *object, const gchar *
 
 	g_return_val_if_fail( NA_IS_IFACTORY_OBJECT( object ), NULL );
 
-	if( ifactory_object_initialized && !ifactory_object_finalized ){
+	list = g_object_get_data( G_OBJECT( object ), NA_IFACTORY_OBJECT_PROP_DATA );
+	/*g_debug( "list=%p (count=%u)", ( void * ) list, g_list_length( list ));*/
 
-		list = g_object_get_data( G_OBJECT( object ), NA_IFACTORY_OBJECT_PROP_DATA );
-		/*g_debug( "list=%p (count=%u)", ( void * ) list, g_list_length( list ));*/
+	for( ip = list ; ip ; ip = ip->next ){
+		NADataBoxed *boxed = NA_DATA_BOXED( ip->data );
+		const NADataDef *def = na_data_boxed_get_data_def( boxed );
 
-		for( ip = list ; ip ; ip = ip->next ){
-			NADataBoxed *boxed = NA_DATA_BOXED( ip->data );
-			const NADataDef *def = na_data_boxed_get_data_def( boxed );
-
-			if( !strcmp( def->name, name )){
-				return( boxed );
-			}
+		if( !strcmp( def->name, name )){
+			return( boxed );
 		}
 	}
 
@@ -199,11 +195,8 @@ na_ifactory_object_get_data_groups( const NAIFactoryObject *object )
 
 	groups = NULL;
 
-	if( ifactory_object_initialized && !ifactory_object_finalized ){
-
-		if( NA_IFACTORY_OBJECT_GET_INTERFACE( object )->get_groups ){
-			groups = NA_IFACTORY_OBJECT_GET_INTERFACE( object )->get_groups( object );
-		}
+	if( NA_IFACTORY_OBJECT_GET_INTERFACE( object )->get_groups ){
+		groups = NA_IFACTORY_OBJECT_GET_INTERFACE( object )->get_groups( object );
 	}
 
 	return( groups );



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