[nautilus-actions] Refactoring: update schemes list management



commit 1765afadc21d32ceab612d03fb537f35439da3f3
Author: Pierre Wieser <pwieser trychlos org>
Date:   Wed Feb 17 21:54:56 2010 +0100

    Refactoring: update schemes list management

 ChangeLog                       |    9 +++++++++
 src/api/na-core-utils.h         |    3 ++-
 src/api/na-object-api.h         |    1 +
 src/api/na-object-profile.h     |    1 +
 src/core/na-core-utils.c        |   31 +++++++++++++++++++++++++++++--
 src/core/na-object-profile.c    |   36 +++++++++++++++++++++++++++++++++++-
 src/io-gconf/nagp-reader.c      |    2 +-
 src/nact/nact-ibackground-tab.c |    2 +-
 src/nact/nact-schemes-list.c    |   28 ++++++++++++++--------------
 9 files changed, 93 insertions(+), 20 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 705168b..163f155 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
 2009-02-17 Pierre Wieser <pwieser trychlos org>
 
+	* src/api/na-core-utils.h:
+	* src/api/na-object-api.h:
+	* src/api/na-object-profile.h:
+	* src/core/na-core-utils.c:
+	* src/core/na-object-profile.c:
+	* src/io-gconf/nagp-reader.c:
+	* src/nact/nact-ibackground-tab.c:
+	* src/nact/nact-schemes-list.c: Update schemes list.
+
 	* src/nact/nact-providers-list.c: Update providers list.
 
 	* src/core/na-iprefs.c:
diff --git a/src/api/na-core-utils.h b/src/api/na-core-utils.h
index 9c04fd4..8b081a7 100644
--- a/src/api/na-core-utils.h
+++ b/src/api/na-core-utils.h
@@ -56,7 +56,8 @@ GSList  *na_core_utils_slist_duplicate( GSList *list );
 void     na_core_utils_slist_dump( GSList *list );
 GSList  *na_core_utils_slist_from_split( const gchar *string, const gchar *separator );
 GSList  *na_core_utils_slist_from_str_array( const gchar **str_array );
-GSList  *na_core_utils_slist_remove_string( GSList *list, const gchar *string );
+GSList  *na_core_utils_slist_remove_ascii( GSList *list, const gchar *text );
+GSList  *na_core_utils_slist_remove_utf8( GSList *list, const gchar *string );
 gchar   *na_core_utils_slist_to_text( GSList *list );
 gboolean na_core_utils_slist_find( GSList *list, const gchar *str );
 gboolean na_core_utils_slist_are_equal( GSList *a, GSList *b );
diff --git a/src/api/na-object-api.h b/src/api/na-object-api.h
index d38dfbc..b795d1b 100644
--- a/src/api/na-object-api.h
+++ b/src/api/na-object-api.h
@@ -167,6 +167,7 @@ G_BEGIN_DECLS
 #define na_object_set_schemes( obj, schemes )			na_idata_factory_set( NA_IDATA_FACTORY( obj ), NADF_DATA_SCHEMES, ( const void * )( schemes ))
 #define na_object_set_folders( obj, folders )			na_idata_factory_set( NA_IDATA_FACTORY( obj ), NADF_DATA_FOLDERS, ( const void * )( folders ))
 
+#define na_object_set_scheme( obj, scheme, add )		na_object_profile_set_scheme( NA_OBJECT_PROFILE( obj ), ( const gchar * )( scheme ), ( add ))
 #define na_object_replace_folder( obj, old, new )		na_object_profile_replace_folder( NA_OBJECT_PROFILE( obj ), ( const gchar * )( old ), ( const gchar * )( new ))
 
 G_END_DECLS
diff --git a/src/api/na-object-profile.h b/src/api/na-object-profile.h
index fe2e656..67180f2 100644
--- a/src/api/na-object-profile.h
+++ b/src/api/na-object-profile.h
@@ -75,6 +75,7 @@ GType            na_object_profile_get_type( void );
 
 NAObjectProfile *na_object_profile_new( void );
 
+void             na_object_profile_set_scheme( NAObjectProfile *profile, const gchar *scheme, gboolean selected );
 void             na_object_profile_replace_folder( NAObjectProfile *profile, const gchar *old, const gchar *new );
 
 gboolean         na_object_profile_is_candidate                ( const NAObjectProfile *profile, gint target, GList *files );
diff --git a/src/core/na-core-utils.c b/src/core/na-core-utils.c
index b3d2de0..f8a5b33 100644
--- a/src/core/na-core-utils.c
+++ b/src/core/na-core-utils.c
@@ -215,7 +215,34 @@ na_core_utils_slist_from_str_array( const gchar **str_array )
 }
 
 /**
- * na_core_utils_slist_remove_string:
+ * na_core_utils_slist_remove_ascii:
+ * @list: the GSList to be updated.
+ * @text: string to remove.
+ *
+ * Removes a string from a GSList of strings.
+ *
+ * Returns the new list after update.
+ */
+GSList *
+na_core_utils_slist_remove_ascii( GSList *list, const gchar *text )
+{
+	GSList *il;
+
+	for( il = list ; il ; il = il->next ){
+
+		const gchar *istr = ( const gchar * ) il->data;
+		if( !g_ascii_strcasecmp( text, istr )){
+
+			list = g_slist_remove( list, ( gconstpointer ) istr );
+			return( list );
+		}
+	}
+
+	return( list );
+}
+
+/**
+ * na_core_utils_slist_remove_utf8:
  * @list: the GSList to be updated.
  * @str: the string to be removed.
  *
@@ -225,7 +252,7 @@ na_core_utils_slist_from_str_array( const gchar **str_array )
  * Returns: the new @list start position.
  */
 GSList *
-na_core_utils_slist_remove_string( GSList *list, const gchar *str )
+na_core_utils_slist_remove_utf8( GSList *list, const gchar *str )
 {
 	GSList *is;
 
diff --git a/src/core/na-object-profile.c b/src/core/na-object-profile.c
index cec0619..6c1a8d4 100644
--- a/src/core/na-object-profile.c
+++ b/src/core/na-object-profile.c
@@ -358,6 +358,40 @@ na_object_profile_new( void )
 }
 
 /**
+ * na_object_profile_set_scheme:
+ * @profile: the #NAObjectProfile to be updated.
+ * @scheme: name of the scheme.
+ * @selected: whether this scheme is candidate to this profile.
+ *
+ * Sets the status of a scheme relative to this profile.
+ */
+void
+na_object_profile_set_scheme( NAObjectProfile *profile, const gchar *scheme, gboolean selected )
+{
+	/*static const gchar *thisfn = "na_object_profile_set_scheme";*/
+	gboolean exist;
+	GSList *schemes;
+
+	g_return_if_fail( NA_IS_OBJECT_PROFILE( profile ));
+
+	if( !profile->private->dispose_has_run ){
+
+		schemes = na_object_get_schemes( profile );
+		exist = na_core_utils_slist_find( schemes, scheme );
+		/*g_debug( "%s: scheme=%s exist=%s", thisfn, scheme, exist ? "True":"False" );*/
+
+		if( selected && !exist ){
+			schemes = g_slist_prepend( schemes, g_strdup( scheme ));
+		}
+		if( !selected && exist ){
+			schemes = na_core_utils_slist_remove_ascii( schemes, scheme );
+		}
+		na_object_set_schemes( profile, schemes );
+		na_core_utils_slist_free( schemes );
+	}
+}
+
+/**
  * na_object_profile_replace_folder:
  * @profile: the #NAObjectProfile to be updated.
  * @old: the old uri.
@@ -375,7 +409,7 @@ na_object_profile_replace_folder( NAObjectProfile *profile, const gchar *old, co
 	if( !profile->private->dispose_has_run ){
 
 		folders = na_object_get_folders( profile );
-		folders = na_core_utils_slist_remove_string( folders, old );
+		folders = na_core_utils_slist_remove_utf8( folders, old );
 		folders = g_slist_append( folders, ( gpointer ) g_strdup( new ));
 		na_object_set_folders( profile, folders );
 		na_core_utils_slist_free( folders );
diff --git a/src/io-gconf/nagp-reader.c b/src/io-gconf/nagp-reader.c
index 9a72c9a..73477b1 100644
--- a/src/io-gconf/nagp-reader.c
+++ b/src/io-gconf/nagp-reader.c
@@ -189,7 +189,7 @@ read_item_action( NagpGConfProvider *provider, const gchar *path, NAObjectAction
 		for( ip = order ; ip ; ip = ip->next ){
 			profile_path = gconf_concat_dir_and_key( path, ( gchar * ) ip->data );
 			read_item_action_profile( provider, action, profile_path );
-			list_profiles = na_core_utils_slist_remove_string( list_profiles, profile_path );
+			list_profiles = na_core_utils_slist_remove_utf8( list_profiles, profile_path );
 			g_free( profile_path );
 		}
 
diff --git a/src/nact/nact-ibackground-tab.c b/src/nact/nact-ibackground-tab.c
index 1ee662a..ce6eb38 100644
--- a/src/nact/nact-ibackground-tab.c
+++ b/src/nact/nact-ibackground-tab.c
@@ -637,7 +637,7 @@ remove_uri_from_folders( NactIBackgroundTab *instance, const gchar *uri )
 			NULL );
 
 	folders = na_object_get_folders( edited );
-	folders = na_core_utils_slist_remove_string( folders, uri );
+	folders = na_core_utils_slist_remove_utf8( folders, uri );
 	na_object_set_folders( edited, folders );
 
 	na_core_utils_slist_free( folders );
diff --git a/src/nact/nact-schemes-list.c b/src/nact/nact-schemes-list.c
index c735e4b..b43cbfd 100644
--- a/src/nact/nact-schemes-list.c
+++ b/src/nact/nact-schemes-list.c
@@ -36,10 +36,10 @@
 #include <gdk/gdkkeysyms.h>
 #include <glib/gi18n.h>
 
+#include <api/na-core-utils.h>
 #include <api/na-object-api.h>
 
-#include <runtime/na-iprefs.h>
-#include <runtime/na-utils.h>
+#include <core/na-iprefs.h>
 
 #include "nact-application.h"
 #include "nact-gtk-utils.h"
@@ -211,23 +211,23 @@ init_view_setup_defaults( GtkTreeView *treeview, BaseWindow *window )
 		g_strfreev( tokens );
 	}
 
-	na_utils_free_string_list( schemes );
+	na_core_utils_slist_free( schemes );
 }
 
 /*
  * return default schemes list
- * the returned list must be released with na_utils_free_string_list()
+ * the returned list must be released with #na_core_utils_slist_free()
  */
 static GSList *
 get_default_schemes_list( BaseWindow *window )
 {
 	GSList *list = NULL;
 	NactApplication *application;
-	NAPivot *pivot;
+	NAUpdater *updater;
 
 	application = NACT_APPLICATION( base_window_get_application( window ));
-	pivot = nact_application_get_pivot( application );
-	list = na_iprefs_read_string_list( NA_IPREFS( pivot ), "schemes", NULL );
+	updater = nact_application_get_updater( application );
+	list = na_iprefs_read_string_list( NA_IPREFS( updater ), "schemes", NULL );
 	if( !list ){
 		list = get_default_default_schemes_list( window );
 	}
@@ -420,7 +420,7 @@ iter_for_setup( gchar *scheme, GtkTreeModel *model )
  * @treeview: the #GtkTreeView.
  *
  * Returns selected schemes as a list of strings.
- * The caller should call na_utils_free_string_list after use.
+ * The caller should call #na_core_utils_slist_free() after use.
  */
 GSList *
 nact_schemes_list_get_schemes( GtkTreeView *treeview )
@@ -449,16 +449,16 @@ nact_schemes_list_save_defaults( BaseWindow *window )
 	GtkTreeView *treeview;
 	GSList *schemes;
 	NactApplication *application;
-	NAPivot *pivot;
+	NAUpdater *updater;
 
 	treeview = GTK_TREE_VIEW( g_object_get_data( G_OBJECT( window ), SCHEMES_LIST_TREEVIEW ));
 	schemes = get_list_schemes( treeview );
 	application = NACT_APPLICATION( base_window_get_application( window ));
-	pivot = nact_application_get_pivot( application );
+	updater = nact_application_get_updater( application );
 
-	na_iprefs_write_string_list( NA_IPREFS( pivot ), "schemes", schemes );
+	na_iprefs_write_string_list( NA_IPREFS( updater ), "schemes", schemes );
 
-	na_utils_free_string_list( schemes );
+	na_core_utils_slist_free( schemes );
 }
 
 static GSList *
@@ -630,8 +630,8 @@ on_keyword_edited( GtkCellRendererText *renderer, const gchar *path, const gchar
 					TAB_UPDATABLE_PROP_EDITED_PROFILE, &edited,
 					NULL );
 			if( edited ){
-				na_object_profile_set_scheme( edited, old_text, FALSE );
-				na_object_profile_set_scheme( edited, text, TRUE );
+				na_object_set_scheme( edited, old_text, FALSE );
+				na_object_set_scheme( edited, text, TRUE );
 				g_signal_emit_by_name( G_OBJECT( window ), TAB_UPDATABLE_SIGNAL_ITEM_UPDATED, edited, FALSE );
 			}
 		}



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