[nautilus-actions] Let a node available for a second reading



commit befa3abcdf4c9268b383db61cc2245ca7ed6009e
Author: Pierre Wieser <pwieser trychlos org>
Date:   Wed Aug 18 16:03:54 2010 +0200

    Let a node available for a second reading
    
    This is in the case of a multiple-defined data
    (e.g. icon which exists in localized and unlocalized forms).

 ChangeLog                 |    4 ++++
 src/io-xml/naxml-reader.c |   19 +++++++++++++++----
 2 files changed, 19 insertions(+), 4 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 1340517..83d2def 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2010-08-18 Pierre Wieser <pwieser trychlos org>
 
+	* src/io-xml/naxml-reader.c (naxml_reader_read_data):
+	Let a node available for a second reading in case of a multiple-defined
+	data (e.g. icon which exists in localized and unlocalized forms).
+
 	* src/io-desktop/nadp-desktop-file.c (nadp_desktop_file_new_from_uri):
 	Do not warn about malformed .desktop file when importing an URI.
 
diff --git a/src/io-xml/naxml-reader.c b/src/io-xml/naxml-reader.c
index 23bdc36..0815281 100644
--- a/src/io-xml/naxml-reader.c
+++ b/src/io-xml/naxml-reader.c
@@ -85,6 +85,7 @@ struct NAXMLReaderPrivate {
 	 */
 	gboolean                       type_found;
 	GList                         *nodes;
+	GList                         *dealt;
 	RootNodeStr                   *root_node_str;
 	gchar                         *item_id;
 
@@ -252,6 +253,7 @@ instance_init( GTypeInstance *instance, gpointer klass )
 	self->private->parms = NULL;
 	self->private->type_found = FALSE;
 	self->private->nodes = NULL;
+	self->private->dealt = NULL;
 	self->private->root_node_str = NULL;
 }
 
@@ -270,6 +272,7 @@ instance_dispose( GObject *object )
 		self->private->dispose_has_run = TRUE;
 
 		g_list_free( self->private->nodes );
+		g_list_free( self->private->dealt );
 
 		/* chain up to the parent class */
 		if( G_OBJECT_CLASS( st_parent_class )->dispose ){
@@ -606,6 +609,10 @@ read_start_profile_attach_profile( NAXMLReader *reader, NAObjectProfile *profile
 /*
  * this callback function is called by NAIFactoryObject once for each
  * serializable data for the object
+ *
+ * Note that some nodes may be readen twice because of multiple definition
+ * of the same data (e.g. icon which exists in localized and unlocalized
+ * versions). So do not remove dealt-with nodes here
  */
 NADataBoxed *
 naxml_reader_read_data( const NAIFactoryProvider *provider, void *reader_data, const NAIFactoryObject *object, const NADataDef *def, GSList **messages )
@@ -651,7 +658,7 @@ naxml_reader_read_data( const NAIFactoryProvider *provider, void *reader_data, c
 	}
 
 	if( boxed ){
-		reader->private->nodes = g_list_remove( reader->private->nodes, parent_node );
+		reader->private->dealt = g_list_prepend( reader->private->dealt, parent_node );
 	}
 
 	return( boxed );
@@ -1075,6 +1082,7 @@ schema_read_value( NAXMLReader *reader, xmlNode *node, const NADataDef *def )
 		value = get_value_from_child_node( node, NAXML_KEY_SCHEMA_NODE_DEFAULT );
 	}
 
+	/*g_debug( "name=%s, localizable=%s, value=%s", def->name, def->localizable ? "True":"False", value );*/
 	return( value );
 }
 
@@ -1380,9 +1388,12 @@ publish_undealt_nodes( NAXMLReader *reader )
 
 	for( iter = reader->private->nodes ; iter ; iter = iter->next ){
 		xmlNode *node = ( xmlNode * ) iter->data;
-		text = xmlNodeGetContent( node );
-		na_core_utils_slist_add_message( &reader->private->parms->messages, WARN_UNDEALT_NODE, ( const gchar * ) text, node->line );
-		xmlFree( text );
+
+		if( !g_list_find( reader->private->dealt, node )){
+			text = xmlNodeGetContent( node );
+			na_core_utils_slist_add_message( &reader->private->parms->messages, WARN_UNDEALT_NODE, ( const gchar * ) text, node->line );
+			xmlFree( text );
+		}
 	}
 }
 



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