[nautilus-actions] Refactoring: update schemes list management
- From: Pierre Wieser <pwieser src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus-actions] Refactoring: update schemes list management
- Date: Fri, 19 Feb 2010 02:29:23 +0000 (UTC)
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]