diff options
author | Paolo Borelli <pborelli@katamail.com> | 2007-11-02 15:22:13 +0000 |
---|---|---|
committer | Paolo Borelli <pborelli@src.gnome.org> | 2007-11-02 15:22:13 +0000 |
commit | 9f51277f583b56d42c7ac9f7aba380453af3b6d7 (patch) | |
tree | 5ff1efa991b59997ab3c9f8813c22bfe549d05fb | |
parent | 3b3c8425b66dc6546b2615ca73fde5b573e5e4dc (diff) | |
download | nautilus-9f51277f583b56d42c7ac9f7aba380453af3b6d7.tar.gz |
Remove all uses of eel-string-list and update code to the new
2007-11-02 Paolo Borelli <pborelli@katamail.com>
* src/file-manager/fm-icon-container.c:
* src/file-manager/fm-list-view.c:
* src/nautilus-shell.c:
* src/nautilus-file-management-properties.c:
* libnautilus-private/nautilus-column-utilities.c:
* libnautilus-private/nautilus-column-utilities.h:
* libnautilus-private/nautilus-column-chooser.c:
* libnautilus-private/nautilus-column-chooser.h:
Remove all uses of eel-string-list and update code to the new
eel_preferences_[set|get]_string_array api.
* libnautilus-private/nautilus-global-preferences.c:
Update to the eel-enumerations api changes.
svn path=/branches/gio-branch/; revision=13402
-rw-r--r-- | ChangeLog | 16 | ||||
-rw-r--r-- | libnautilus-private/nautilus-column-chooser.c | 73 | ||||
-rw-r--r-- | libnautilus-private/nautilus-column-chooser.h | 11 | ||||
-rw-r--r-- | libnautilus-private/nautilus-column-utilities.c | 23 | ||||
-rw-r--r-- | libnautilus-private/nautilus-column-utilities.h | 2 | ||||
-rw-r--r-- | libnautilus-private/nautilus-global-preferences.c | 117 | ||||
-rw-r--r-- | src/file-manager/fm-icon-container.c | 43 | ||||
-rw-r--r-- | src/file-manager/fm-list-view.c | 144 | ||||
-rw-r--r-- | src/nautilus-file-management-properties.c | 64 | ||||
-rw-r--r-- | src/nautilus-shell.c | 45 | ||||
-rw-r--r-- | test/test-nautilus-preferences-change.c | 121 |
11 files changed, 319 insertions, 340 deletions
@@ -1,3 +1,19 @@ +2007-11-02 Paolo Borelli <pborelli@katamail.com> + + * src/file-manager/fm-icon-container.c: + * src/file-manager/fm-list-view.c: + * src/nautilus-shell.c: + * src/nautilus-file-management-properties.c: + * libnautilus-private/nautilus-column-utilities.c: + * libnautilus-private/nautilus-column-utilities.h: + * libnautilus-private/nautilus-column-chooser.c: + * libnautilus-private/nautilus-column-chooser.h: + Remove all uses of eel-string-list and update code to the new + eel_preferences_[set|get]_string_array api. + + * libnautilus-private/nautilus-global-preferences.c: + Update to the eel-enumerations api changes. + 2007-11-02 Alexander Larsson <alexl@redhat.com> * libnautilus-private/nautilus-customization-data.[ch]: diff --git a/libnautilus-private/nautilus-column-chooser.c b/libnautilus-private/nautilus-column-chooser.c index 383e89d1c..f0c016964 100644 --- a/libnautilus-private/nautilus-column-chooser.c +++ b/libnautilus-private/nautilus-column-chooser.c @@ -26,8 +26,6 @@ #include "nautilus-column-chooser.h" #include <string.h> -#include <eel/eel-glib-extensions.h> -#include <eel/eel-gtk-macros.h> #include <gtk/gtkalignment.h> #include <gtk/gtkbutton.h> #include <gtk/gtkcellrenderertext.h> @@ -71,19 +69,12 @@ enum { }; static guint signals[LAST_SIGNAL]; -static void nautilus_column_chooser_class_init (NautilusColumnChooserClass *chooser_class); -static void nautilus_column_chooser_init (NautilusColumnChooser *chooser); -static void nautilus_column_chooser_destroy (GtkObject *object); -static void nautilus_column_chooser_finalize (GObject *object); -EEL_CLASS_BOILERPLATE (NautilusColumnChooser, nautilus_column_chooser, GTK_TYPE_HBOX); +G_DEFINE_TYPE(NautilusColumnChooser, nautilus_column_chooser, GTK_TYPE_HBOX); static void nautilus_column_chooser_class_init (NautilusColumnChooserClass *chooser_class) { - G_OBJECT_CLASS (chooser_class)->finalize = nautilus_column_chooser_finalize; - GTK_OBJECT_CLASS (chooser_class)->destroy = nautilus_column_chooser_destroy; - signals[CHANGED] = g_signal_new ("changed", G_TYPE_FROM_CLASS (chooser_class), @@ -498,24 +489,20 @@ nautilus_column_chooser_init (NautilusColumnChooser *chooser) G_CALLBACK (row_deleted_callback), chooser); } -static void -nautilus_column_chooser_destroy (GtkObject *object) -{ - NautilusColumnChooser *chooser; - - chooser = NAUTILUS_COLUMN_CHOOSER (object); -} - -static void -nautilus_column_chooser_finalize (GObject *object) -{ -} - static void set_visible_columns (NautilusColumnChooser *chooser, - GList *visible_columns) + char **visible_columns) { + GHashTable *visible_columns_hash; GtkTreeIter iter; + int i; + + visible_columns_hash = g_hash_table_new (g_str_hash, g_str_equal); + for (i = 0; visible_columns[i] != NULL; ++i) { + g_hash_table_insert (visible_columns_hash, + visible_columns[i], + visible_columns[i]); + } if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (chooser->details->store), &iter)) { @@ -528,7 +515,7 @@ set_visible_columns (NautilusColumnChooser *chooser, COLUMN_NAME, &name, -1); - visible = (eel_g_str_list_index (visible_columns, name) != -1); + visible = (g_hash_table_lookup (visible_columns_hash, name) != NULL); gtk_list_store_set (chooser->details->store, &iter, @@ -537,17 +524,18 @@ set_visible_columns (NautilusColumnChooser *chooser, g_free (name); } while (gtk_tree_model_iter_next (GTK_TREE_MODEL (chooser->details->store), &iter)); - } + } + + g_hash_table_destroy (visible_columns_hash); } -static GList * +static char ** get_column_names (NautilusColumnChooser *chooser, gboolean only_visible) { - - GList *ret; + GPtrArray *ret; GtkTreeIter iter; - - ret = NULL; + + ret = g_ptr_array_new (); if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (chooser->details->store), &iter)) { do { @@ -559,14 +547,15 @@ get_column_names (NautilusColumnChooser *chooser, gboolean only_visible) COLUMN_NAME, &name, -1); if (!only_visible || visible) { - /* give ownership to the list */ - ret = g_list_prepend (ret, name); + /* give ownership to the array */ + g_ptr_array_add (ret, name); } - + } while (gtk_tree_model_iter_next (GTK_TREE_MODEL (chooser->details->store), &iter)); } + g_ptr_array_add (ret, NULL); - return g_list_reverse (ret); + return (char **) g_ptr_array_free (ret, FALSE); } static gboolean @@ -603,7 +592,7 @@ get_column_iter (NautilusColumnChooser *chooser, static void set_column_order (NautilusColumnChooser *chooser, - GList *column_order) + char **column_order) { GList *columns; @@ -646,8 +635,8 @@ set_column_order (NautilusColumnChooser *chooser, void nautilus_column_chooser_set_settings (NautilusColumnChooser *chooser, - GList *visible_columns, - GList *column_order) + char **visible_columns, + char **column_order) { g_return_if_fail (NAUTILUS_IS_COLUMN_CHOOSER (chooser)); g_return_if_fail (visible_columns != NULL); @@ -661,13 +650,13 @@ nautilus_column_chooser_set_settings (NautilusColumnChooser *chooser, void nautilus_column_chooser_get_settings (NautilusColumnChooser *chooser, - GList **visible_columns, - GList **column_order) + char ***visible_columns, + char ***column_order) { g_return_if_fail (NAUTILUS_IS_COLUMN_CHOOSER (chooser)); g_return_if_fail (visible_columns != NULL); g_return_if_fail (column_order != NULL); - + *visible_columns = get_column_names (chooser, TRUE); *column_order = get_column_names (chooser, FALSE); } @@ -678,5 +667,3 @@ nautilus_column_chooser_new (void) return g_object_new (NAUTILUS_TYPE_COLUMN_CHOOSER, NULL); } - - diff --git a/libnautilus-private/nautilus-column-chooser.h b/libnautilus-private/nautilus-column-chooser.h index 677f15280..a1d781f51 100644 --- a/libnautilus-private/nautilus-column-chooser.h +++ b/libnautilus-private/nautilus-column-chooser.h @@ -50,12 +50,11 @@ typedef struct { GType nautilus_column_chooser_get_type (void); GtkWidget *nautilus_column_chooser_new (void); -void nautilus_column_chooser_set_settings (NautilusColumnChooser *chooser, - GList *visible_columns, - GList *column_order); +void nautilus_column_chooser_set_settings (NautilusColumnChooser *chooser, + char **visible_columns, + char **column_order); void nautilus_column_chooser_get_settings (NautilusColumnChooser *chooser, - GList **visible_columns, - GList **column_order); - + char ***visible_columns, + char ***column_order); #endif /* NAUTILUS_COLUMN_CHOOSER_H */ diff --git a/libnautilus-private/nautilus-column-utilities.c b/libnautilus-private/nautilus-column-utilities.c index b467d952c..4aeaf9a47 100644 --- a/libnautilus-private/nautilus-column-utilities.c +++ b/libnautilus-private/nautilus-column-utilities.c @@ -190,18 +190,31 @@ nautilus_column_list_free (GList *columns) } static int -column_compare (NautilusColumn *a, NautilusColumn *b, GList *column_order) +strv_index (char **strv, const char *str) +{ + int i; + + for (i = 0; strv[i] != NULL; ++i) { + if (strcmp (strv[i], str) == 0) + return i; + } + + return -1; +} + +static int +column_compare (NautilusColumn *a, NautilusColumn *b, char **column_order) { int index_a; int index_b; char *name; g_object_get (G_OBJECT (a), "name", &name, NULL); - index_a = eel_g_str_list_index (column_order, name); + index_a = strv_index (column_order, name); g_free (name); g_object_get (G_OBJECT (b), "name", &name, NULL); - index_b = eel_g_str_list_index (column_order, name); + index_b = strv_index (column_order, name); g_free (name); if (index_a == index_b) { @@ -226,8 +239,8 @@ column_compare (NautilusColumn *a, NautilusColumn *b, GList *column_order) } GList * -nautilus_sort_columns (GList *columns, - GList *column_order) +nautilus_sort_columns (GList *columns, + char **column_order) { return g_list_sort_with_data (columns, (GCompareDataFunc)column_compare, diff --git a/libnautilus-private/nautilus-column-utilities.h b/libnautilus-private/nautilus-column-utilities.h index 48611db6c..a8306519a 100644 --- a/libnautilus-private/nautilus-column-utilities.h +++ b/libnautilus-private/nautilus-column-utilities.h @@ -32,7 +32,7 @@ GList *nautilus_column_list_copy (GList *columns); void nautilus_column_list_free (GList *columns); GList *nautilus_sort_columns (GList *columns, - GList *column_order); + char **column_order); #endif /* NAUTILUS_COLUMN_UTILITIES_H */ diff --git a/libnautilus-private/nautilus-global-preferences.c b/libnautilus-private/nautilus-global-preferences.c index 8817c2b84..0ec8fcf51 100644 --- a/libnautilus-private/nautilus-global-preferences.c +++ b/libnautilus-private/nautilus-global-preferences.c @@ -37,7 +37,7 @@ #include <libgnome/gnome-util.h> /* Constants */ -#define STRING_LIST_DEFAULT_TOKENS_DELIMETER "," +#define STRING_ARRAY_DEFAULT_TOKENS_DELIMETER "," #define PREFERENCES_SORT_ORDER_MANUALLY 100 /* Path for gnome-vfs preferences */ @@ -61,15 +61,14 @@ typedef enum PREFERENCE_BOOLEAN = 1, PREFERENCE_INTEGER, PREFERENCE_STRING, - PREFERENCE_STRING_LIST + PREFERENCE_STRING_ARRAY } PreferenceType; /* Enumerations used to qualify some INTEGER preferences */ static EelEnumerationEntry speed_tradeoff_enum_entries[] = { { "always", N_("_Always"), NAUTILUS_SPEED_TRADEOFF_ALWAYS }, { "local_only", N_("_Local File Only"), NAUTILUS_SPEED_TRADEOFF_LOCAL_ONLY }, - { "never", N_("_Never"), NAUTILUS_SPEED_TRADEOFF_NEVER }, - { NULL } + { "never", N_("_Never"), NAUTILUS_SPEED_TRADEOFF_NEVER } }; static EelEnumerationEntry default_zoom_level_enum_entries[] = { @@ -86,8 +85,7 @@ static EelEnumerationEntry default_zoom_level_enum_entries[] = { /* xgettext:no-c-format */ { "larger", N_("200%"), NAUTILUS_ZOOM_LEVEL_LARGER }, /* xgettext:no-c-format */ - { "largest", N_("400%"), NAUTILUS_ZOOM_LEVEL_LARGEST }, - { NULL } + { "largest", N_("400%"), NAUTILUS_ZOOM_LEVEL_LARGEST } }; static EelEnumerationEntry file_size_enum_entries[] = { @@ -97,8 +95,7 @@ static EelEnumerationEntry file_size_enum_entries[] = { { "3145728", N_("3 MB"), 3145728 }, { "5242880", N_("5 MB"), 5242880 }, { "10485760", N_("10 MB"), 10485760 }, - { "104857600", N_("100 MB"), 104857600 }, - { NULL } + { "104857600", N_("100 MB"), 104857600 } }; static EelEnumerationEntry click_policy_enum_entries[] = { @@ -109,8 +106,7 @@ static EelEnumerationEntry click_policy_enum_entries[] = { { "double", N_("Activate items with a _double click"), NAUTILUS_CLICK_POLICY_DOUBLE - }, - { NULL } + } }; static EelEnumerationEntry executable_text_activation_enum_entries[] = { @@ -125,8 +121,7 @@ static EelEnumerationEntry executable_text_activation_enum_entries[] = { { "ask", N_("_Ask each time"), NAUTILUS_EXECUTABLE_TEXT_ASK - }, - { NULL } + } }; static EelEnumerationEntry search_bar_type_enum_entries[] = { @@ -137,14 +132,12 @@ static EelEnumerationEntry search_bar_type_enum_entries[] = { { "search by text and properties", N_("Search for files by file name and file properties"), NAUTILUS_COMPLEX_SEARCH_BAR - }, - { NULL } + } }; static EelEnumerationEntry default_folder_viewer_enum_entries[] = { { "icon_view", N_("Icon View"), NAUTILUS_DEFAULT_FOLDER_VIEWER_ICON_VIEW }, - { "list_view", N_("List View"), NAUTILUS_DEFAULT_FOLDER_VIEWER_LIST_VIEW }, - { NULL } + { "list_view", N_("List View"), NAUTILUS_DEFAULT_FOLDER_VIEWER_LIST_VIEW } }; static EelEnumerationEntry default_icon_view_sort_order_enum_entries[] = { @@ -154,8 +147,7 @@ static EelEnumerationEntry default_icon_view_sort_order_enum_entries[] = { { "size", N_("By Size"), NAUTILUS_FILE_SORT_BY_SIZE }, { "type", N_("By Type"), NAUTILUS_FILE_SORT_BY_TYPE }, { "modification_date", N_("By Modification Date"), NAUTILUS_FILE_SORT_BY_MTIME }, - { "emblems", N_("By Emblems"), NAUTILUS_FILE_SORT_BY_EMBLEMS }, - { NULL } + { "emblems", N_("By Emblems"), NAUTILUS_FILE_SORT_BY_EMBLEMS } }; static EelEnumerationEntry standard_font_size_entries[] = { @@ -167,34 +159,14 @@ static EelEnumerationEntry standard_font_size_entries[] = { { "18", N_("18"), 18 }, { "20", N_("20"), 20 }, { "22", N_("22"), 22 }, - { "24", N_("24"), 24 }, - { NULL } + { "24", N_("24"), 24 } }; /* These are not translated, because the text is not used in the ui */ static EelEnumerationEntry date_format_entries[] = { { "locale", "Locale Default", NAUTILUS_DATE_FORMAT_LOCALE }, { "iso", "ISO Format", NAUTILUS_DATE_FORMAT_ISO }, - { "informal", "Informal", NAUTILUS_DATE_FORMAT_INFORMAL }, - { NULL } -}; - -/* These enumerations are used in the preferences dialog to - * populate widgets and route preferences changes between the - * storage (GConf) and the displayed values. - */ -static EelEnumerationInfo enumerations[] = { - { "click_policy", click_policy_enum_entries }, - { "default_folder_viewer", default_folder_viewer_enum_entries }, - { "default_icon_view_sort_order", default_icon_view_sort_order_enum_entries }, - { "default_zoom_level", default_zoom_level_enum_entries }, - { "executable_text_activation", executable_text_activation_enum_entries }, - { "file_size", file_size_enum_entries }, - { "search_bar_type", search_bar_type_enum_entries }, - { "speed_tradeoff", speed_tradeoff_enum_entries }, - { "standard_font_size", standard_font_size_entries }, - { "date_format", date_format_entries }, - { NULL } + { "informal", "Informal", NAUTILUS_DATE_FORMAT_INFORMAL } }; /* @@ -233,7 +205,7 @@ typedef struct * PREFERENCE_BOOLEAN * PREFERENCE_INTEGER * PREFERENCE_STRING - * PREFERENCE_STRING_LIST + * PREFERENCE_STRING_ARRAY * * 3. fallback_value * Emergency fallback value if our gconf schemas are hosed somehow. @@ -345,7 +317,7 @@ static const PreferenceDefault preference_defaults[] = { "search_bar_type" }, { NAUTILUS_PREFERENCES_ICON_VIEW_CAPTIONS, - PREFERENCE_STRING_LIST, + PREFERENCE_STRING_ARRAY, "size,date_modified,type", NULL, NULL, NULL @@ -563,14 +535,47 @@ global_preferences_register_enumerations (void) { guint i; - /* Register the enumerations */ - eel_enumeration_register (enumerations); + /* Register the enumerations. + * These enumerations are used in the preferences dialog to + * populate widgets and route preferences changes between the + * storage (GConf) and the displayed values. + */ + eel_enumeration_register ("click_policy", + click_policy_enum_entries, + G_N_ELEMENTS (click_policy_enum_entries)); + eel_enumeration_register ("default_folder_viewer", + default_folder_viewer_enum_entries, + G_N_ELEMENTS (default_folder_viewer_enum_entries)); + eel_enumeration_register ("default_icon_view_sort_order", + default_icon_view_sort_order_enum_entries, + G_N_ELEMENTS (default_icon_view_sort_order_enum_entries)); + eel_enumeration_register ("default_zoom_level", + default_zoom_level_enum_entries, + G_N_ELEMENTS (default_zoom_level_enum_entries)); + eel_enumeration_register ("executable_text_activation", + executable_text_activation_enum_entries, + G_N_ELEMENTS (executable_text_activation_enum_entries)); + eel_enumeration_register ("file_size", + file_size_enum_entries, + G_N_ELEMENTS (file_size_enum_entries)); + eel_enumeration_register ("search_bar_type", + search_bar_type_enum_entries, + G_N_ELEMENTS (search_bar_type_enum_entries)); + eel_enumeration_register ("speed_tradeoff", + speed_tradeoff_enum_entries, + G_N_ELEMENTS (speed_tradeoff_enum_entries)); + eel_enumeration_register ("standard_font_size", + standard_font_size_entries, + G_N_ELEMENTS (standard_font_size_entries)); + eel_enumeration_register ("date_format", + date_format_entries, + G_N_ELEMENTS (date_format_entries)); /* Set the enumeration ids for preferences that need them */ for (i = 0; preference_defaults[i].name != NULL; i++) { if (eel_strlen (preference_defaults[i].enumeration_id) > 0) { g_assert (preference_defaults[i].type == PREFERENCE_STRING - || preference_defaults[i].type == PREFERENCE_STRING_LIST + || preference_defaults[i].type == PREFERENCE_STRING_ARRAY || preference_defaults[i].type == PREFERENCE_INTEGER); eel_preferences_set_enumeration_id (preference_defaults[i].name, preference_defaults[i].enumeration_id); @@ -584,11 +589,11 @@ global_preferences_install_one_default (const char *preference_name, const PreferenceDefault *preference_default) { gpointer value = NULL; - EelStringList *string_list_value; - + char **string_array_value; + g_return_if_fail (preference_name != NULL); g_return_if_fail (preference_type >= PREFERENCE_BOOLEAN); - g_return_if_fail (preference_type <= PREFERENCE_STRING_LIST); + g_return_if_fail (preference_type <= PREFERENCE_STRING_ARRAY); g_return_if_fail (preference_default != NULL); /* If a callback is given, use that to fetch the default value */ @@ -614,14 +619,14 @@ global_preferences_install_one_default (const char *preference_name, eel_preferences_set_emergency_fallback_string (preference_name, value); break; - - case PREFERENCE_STRING_LIST: - string_list_value = eel_string_list_new_from_tokens (value, - STRING_LIST_DEFAULT_TOKENS_DELIMETER, - TRUE); - eel_preferences_set_emergency_fallback_string_list (preference_name, - string_list_value); - eel_string_list_free (string_list_value); + + case PREFERENCE_STRING_ARRAY: + string_array_value = g_strsplit (value, + STRING_ARRAY_DEFAULT_TOKENS_DELIMETER, + -1); + eel_preferences_set_emergency_fallback_string_array (preference_name, + string_array_value); + g_strfreev (string_array_value); break; default: diff --git a/src/file-manager/fm-icon-container.c b/src/file-manager/fm-icon-container.c index d4ebad8e7..ab10c6975 100644 --- a/src/file-manager/fm-icon-container.c +++ b/src/file-manager/fm-icon-container.c @@ -23,9 +23,9 @@ */ #include <config.h> +#include <string.h> #include <libgnome/gnome-macros.h> #include <glib/gi18n.h> -#include <eel/eel-string.h> #include <gio/gcontenttype.h> #include <libnautilus-private/nautilus-global-preferences.h> #include <libnautilus-private/nautilus-file-attributes.h> @@ -176,19 +176,18 @@ fm_icon_container_prioritize_thumbnailing (NautilusIconContainer *container, } } - /* * Get the preference for which caption text should appear * beneath icons. */ -static const EelStringList * +static char ** fm_icon_container_get_icon_text_attributes_from_preferences (void) { - static const EelStringList *attributes; + static char **attributes; if (attributes == NULL) { - eel_preferences_add_auto_string_list (NAUTILUS_PREFERENCES_ICON_VIEW_CAPTIONS, - &attributes); + eel_preferences_add_auto_string_array (NAUTILUS_PREFERENCES_ICON_VIEW_CAPTIONS, + &attributes); } /* We don't need to sanity check the attributes list even though it came @@ -211,7 +210,7 @@ fm_icon_container_get_icon_text_attributes_from_preferences (void) * duplicate attributes by making "bad" choices insensitive. * * In the second case, the preferences getter (and also the auto storage) for - * string_list values are always valid members of the enumeration associated + * string_array values are always valid members of the enumeration associated * with the preference. * * So, no more error checking on attributes is needed here and we can return @@ -229,11 +228,11 @@ fm_icon_container_get_icon_text_attributes_from_preferences (void) * @view: FMIconView to query. * **/ -static const EelStringList * +static char ** fm_icon_container_get_icon_text_attribute_names (NautilusIconContainer *container, int *len) { - const EelStringList *attributes; + char **attributes; int piece_count; const int pieces_by_level[] = { @@ -247,11 +246,11 @@ fm_icon_container_get_icon_text_attribute_names (NautilusIconContainer *containe }; piece_count = pieces_by_level[nautilus_icon_container_get_zoom_level (container)]; - + attributes = fm_icon_container_get_icon_text_attributes_from_preferences (); - *len = MIN (piece_count, eel_string_list_get_length (attributes)); - + *len = MIN (piece_count, g_strv_length (attributes)); + return attributes; } @@ -266,8 +265,7 @@ fm_icon_container_get_icon_text (NautilusIconContainer *container, { char *actual_uri; gchar *description; - const EelStringList *attribute_names; - const char *attribute; + char **attribute_names; char *text_array[4]; int i, j, num_attributes; FMIconView *icon_view; @@ -312,18 +310,21 @@ fm_icon_container_get_icon_text (NautilusIconContainer *container, * make sense. */ return; } - + /* Find out what attributes go below each icon. */ - attribute_names = fm_icon_container_get_icon_text_attribute_names (container, &num_attributes); + attribute_names = fm_icon_container_get_icon_text_attribute_names (container, + &num_attributes); /* Get the attributes. */ - for (i = 0, j = 0; i < num_attributes; i++) { - attribute = eel_string_list_peek_nth (attribute_names, i); - if (eel_strcmp (attribute, "none") == 0) { + j = 0; + for (i = 0; i < num_attributes; ++i) + { + if (strcmp (attribute_names[i], "none") == 0) { continue; } + text_array[j++] = - nautilus_file_get_string_attribute_with_default (file, attribute); + nautilus_file_get_string_attribute_with_default (file, attribute_names[i]); } text_array[j] = NULL; @@ -331,7 +332,7 @@ fm_icon_container_get_icon_text (NautilusIconContainer *container, *additional_text = g_strjoinv ("\n", text_array); for (i = 0; i < j; i++) { - g_free(text_array[i]); + g_free (text_array[i]); } } diff --git a/src/file-manager/fm-list-view.c b/src/file-manager/fm-list-view.c index 1664c58a4..673e1892c 100644 --- a/src/file-manager/fm-list-view.c +++ b/src/file-manager/fm-list-view.c @@ -136,8 +136,8 @@ static int click_policy_auto_value; static char * default_sort_order_auto_value; static gboolean default_sort_reversed_auto_value; static NautilusZoomLevel default_zoom_level_auto_value; -static GList * default_visible_columns_auto_value; -static GList * default_column_order_auto_value; +static char ** default_visible_columns_auto_value; +static char ** default_column_order_auto_value; static GdkCursor * hand_cursor = NULL; static GtkTargetList * source_target_list = NULL; @@ -1156,33 +1156,58 @@ move_copy_items_callback (NautilusTreeViewDragDest *dest, } static void -apply_columns_settings (FMListView *list_view, GList *column_order, GList *visible_columns) +apply_columns_settings (FMListView *list_view, + char **column_order, + char **visible_columns) { GList *all_columns; GList *old_view_columns, *view_columns; + GHashTable *visible_columns_hash; GtkTreeViewColumn *prev_view_column; GList *l; + int i; /* prepare ordered list of view columns using column_order and visible_columns */ view_columns = NULL; all_columns = nautilus_get_all_columns (); all_columns = nautilus_sort_columns (all_columns, column_order); + + /* hash table to lookup if a given column should be visible */ + visible_columns_hash = g_hash_table_new_full (g_str_hash, + g_str_equal, + (GDestroyNotify) g_free, + (GDestroyNotify) g_free); + for (i = 0; visible_columns[i] != NULL; ++i) { + g_hash_table_insert (visible_columns_hash, + g_ascii_strdown (visible_columns[i], -1), + g_ascii_strdown (visible_columns[i], -1)); + } + for (l = all_columns; l != NULL; l = l->next) { char *name; + char *lowercase; g_object_get (G_OBJECT (l->data), "name", &name, NULL); - if (g_list_find_custom (visible_columns, name, (GCompareFunc) g_ascii_strcasecmp) != NULL) { + lowercase = g_ascii_strdown (name, -1); + + if (g_hash_table_lookup (visible_columns_hash, lowercase) != NULL) { GtkTreeViewColumn *view_column; view_column = g_hash_table_lookup (list_view->details->columns, name); if (view_column != NULL) { - view_columns = g_list_append (view_columns, view_column); + view_columns = g_list_prepend (view_columns, view_column); } } + g_free (name); + g_free (lowercase); } + + g_hash_table_destroy (visible_columns_hash); nautilus_column_list_free (all_columns); + view_columns = g_list_reverse (view_columns); + /* remove columns that are not present in the configuration */ old_view_columns = gtk_tree_view_get_columns (list_view->details->tree_view); for (l = old_view_columns; l != NULL; l = l->next) { @@ -1418,7 +1443,9 @@ create_and_set_up_tree_view (FMListView *view) /* Apply the default column order and visible columns, to get it * right most of the time. The metadata will be checked when a * folder is loaded */ - apply_columns_settings (view, default_column_order_auto_value, default_visible_columns_auto_value); + apply_columns_settings (view, + default_column_order_auto_value, + default_visible_columns_auto_value); gtk_widget_show (GTK_WIDGET (view->details->tree_view)); gtk_container_add (GTK_CONTAINER (view), GTK_WIDGET (view->details->tree_view)); @@ -1437,12 +1464,15 @@ fm_list_view_add_file (FMDirectoryView *view, NautilusFile *file, NautilusDirect fm_list_model_add_file (model, file, directory); } -static GList * +static char ** get_visible_columns (FMListView *list_view) { NautilusFile *file; GList *visible_columns; - + char **ret; + + ret = NULL; + file = fm_directory_view_get_directory_as_file (FM_DIRECTORY_VIEW (list_view)); visible_columns = nautilus_file_get_metadata_list @@ -1450,19 +1480,31 @@ get_visible_columns (FMListView *list_view) NAUTILUS_METADATA_KEY_LIST_VIEW_VISIBLE_COLUMNS, NAUTILUS_METADATA_SUBKEY_COLUMNS); - if (!visible_columns) { - visible_columns = eel_g_str_list_copy (default_visible_columns_auto_value); + if (visible_columns) { + GPtrArray *res; + GList *l; + + res = g_ptr_array_new (); + for (l = visible_columns; l != NULL; l = l->next) { + g_ptr_array_add (res, l->data); + } + g_ptr_array_add (res, NULL); + + ret = (char **) g_ptr_array_free (res, FALSE); } - return visible_columns; + return ret ? ret : g_strdupv (default_visible_columns_auto_value); } -static GList * +static char ** get_column_order (FMListView *list_view) { NautilusFile *file; GList *column_order; - + char **ret; + + ret = NULL; + file = fm_directory_view_get_directory_as_file (FM_DIRECTORY_VIEW (list_view)); column_order = nautilus_file_get_metadata_list @@ -1470,26 +1512,35 @@ get_column_order (FMListView *list_view) NAUTILUS_METADATA_KEY_LIST_VIEW_COLUMN_ORDER, NAUTILUS_METADATA_SUBKEY_COLUMNS); - if (!column_order) { - column_order = eel_g_str_list_copy (default_column_order_auto_value); + if (column_order) { + GPtrArray *res; + GList *l; + + res = g_ptr_array_new (); + for (l = column_order; l != NULL; l = l->next) { + g_ptr_array_add (res, l->data); + } + g_ptr_array_add (res, NULL); + + ret = (char **) g_ptr_array_free (res, FALSE); } - return column_order; + return ret ? ret : g_strdupv (default_visible_columns_auto_value); } static void set_columns_settings_from_metadata_and_preferences (FMListView *list_view) { - GList *column_order; - GList *visible_columns; + char **column_order; + char **visible_columns; column_order = get_column_order (list_view); visible_columns = get_visible_columns (list_view); apply_columns_settings (list_view, column_order, visible_columns); - eel_g_list_free_deep (column_order); - eel_g_list_free_deep (visible_columns); + g_strfreev (column_order); + g_strfreev (visible_columns); } static void @@ -1886,20 +1937,41 @@ column_chooser_changed_callback (NautilusColumnChooser *chooser, FMListView *view) { NautilusFile *file; - GList *visible_columns; - GList *column_order; - + char **visible_columns; + char **column_order; + GList *list; + int i; + file = fm_directory_view_get_directory_as_file (FM_DIRECTORY_VIEW (view)); nautilus_column_chooser_get_settings (chooser, &visible_columns, &column_order); - nautilus_file_set_metadata_list (file, NAUTILUS_METADATA_KEY_LIST_VIEW_VISIBLE_COLUMNS, NAUTILUS_METADATA_SUBKEY_COLUMNS, visible_columns); - nautilus_file_set_metadata_list (file, NAUTILUS_METADATA_KEY_LIST_VIEW_COLUMN_ORDER, NAUTILUS_METADATA_SUBKEY_COLUMNS, column_order); + list = NULL; + for (i = 0; visible_columns[i] != NULL; ++i) { + list = g_list_prepend (list, visible_columns[i]); + } + list = g_list_reverse (list); + nautilus_file_set_metadata_list (file, + NAUTILUS_METADATA_KEY_LIST_VIEW_VISIBLE_COLUMNS, + NAUTILUS_METADATA_SUBKEY_COLUMNS, + list); + g_list_free (list); + + list = NULL; + for (i = 0; column_order[i] != NULL; ++i) { + list = g_list_prepend (list, column_order[i]); + } + list = g_list_reverse (list); + nautilus_file_set_metadata_list (file, + NAUTILUS_METADATA_KEY_LIST_VIEW_COLUMN_ORDER, + NAUTILUS_METADATA_SUBKEY_COLUMNS, + list); + g_list_free (list); - eel_g_list_free_deep (visible_columns); - eel_g_list_free_deep (column_order); + g_strfreev (visible_columns); + g_strfreev (column_order); set_columns_settings_from_metadata_and_preferences (view); } @@ -1908,8 +1980,8 @@ static void column_chooser_set_from_settings (NautilusColumnChooser *chooser, FMListView *view) { - GList *visible_columns; - GList *column_order; + char **visible_columns; + char **column_order; g_signal_handlers_block_by_func (chooser, G_CALLBACK (column_chooser_changed_callback), view); @@ -1921,9 +1993,9 @@ column_chooser_set_from_settings (NautilusColumnChooser *chooser, visible_columns, column_order); - eel_g_list_free_deep (visible_columns); - eel_g_list_free_deep (column_order); - + g_strfreev (visible_columns); + g_strfreev (column_order); + g_signal_handlers_unblock_by_func (chooser, G_CALLBACK (column_chooser_changed_callback), view); } @@ -2628,10 +2700,10 @@ fm_list_view_class_init (FMListViewClass *class) &default_sort_reversed_auto_value); eel_preferences_add_auto_enum (NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_ZOOM_LEVEL, (int *) &default_zoom_level_auto_value); - eel_preferences_add_auto_string_glist (NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_VISIBLE_COLUMNS, - (const GList **) &default_visible_columns_auto_value); - eel_preferences_add_auto_string_glist (NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_COLUMN_ORDER, - (const GList **) &default_column_order_auto_value); + eel_preferences_add_auto_string_array (NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_VISIBLE_COLUMNS, + &default_visible_columns_auto_value); + eel_preferences_add_auto_string_array (NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_COLUMN_ORDER, + &default_column_order_auto_value); } static const char * diff --git a/src/nautilus-file-management-properties.c b/src/nautilus-file-management-properties.c index 3a205099f..fc493aad4 100644 --- a/src/nautilus-file-management-properties.c +++ b/src/nautilus-file-management-properties.c @@ -266,18 +266,18 @@ static void columns_changed_callback (NautilusColumnChooser *chooser, gpointer callback_data) { - GList *visible_columns; - GList *column_order; - + char **visible_columns; + char **column_order; + nautilus_column_chooser_get_settings (NAUTILUS_COLUMN_CHOOSER (chooser), &visible_columns, &column_order); - eel_preferences_set_string_glist (NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_VISIBLE_COLUMNS, visible_columns); - eel_preferences_set_string_glist (NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_COLUMN_ORDER, column_order); + eel_preferences_set_string_array (NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_VISIBLE_COLUMNS, visible_columns); + eel_preferences_set_string_array (NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_COLUMN_ORDER, column_order); - eel_g_list_free_deep (visible_columns); - eel_g_list_free_deep (column_order); + g_strfreev (visible_columns); + g_strfreev (column_order); } static void @@ -331,13 +331,13 @@ static void icon_captions_changed_callback (GtkComboBox *combo_box, gpointer user_data) { - GList *captions; + GPtrArray *captions; GladeXML *xml; int i; xml = GLADE_XML (user_data); - captions = NULL; + captions = g_ptr_array_new (); for (i = 0; icon_captions_components[i] != NULL; i++) { GtkWidget *combo_box; @@ -353,11 +353,13 @@ icon_captions_changed_callback (GtkComboBox *combo_box, "column_names"); name = g_ptr_array_index (column_names, active); - captions = g_list_prepend (captions, g_strdup (name)); + g_ptr_array_add (captions, name); } - captions = g_list_reverse (captions); - eel_preferences_set_string_glist (NAUTILUS_PREFERENCES_ICON_VIEW_CAPTIONS, captions); - eel_g_list_free_deep (captions); + g_ptr_array_add (captions, NULL); + + eel_preferences_set_string_array (NAUTILUS_PREFERENCES_ICON_VIEW_CAPTIONS, + (char **)captions->pdata); + g_ptr_array_free (captions, TRUE); } static void @@ -395,28 +397,29 @@ update_caption_combo_box (GladeXML *xml, static void update_icon_captions_from_gconf (GladeXML *xml) { - GList *captions; - int i; - GList *l; - char *data; + char **captions; + int i, j; - captions = eel_preferences_get_string_glist (NAUTILUS_PREFERENCES_ICON_VIEW_CAPTIONS); + captions = eel_preferences_get_string_array (NAUTILUS_PREFERENCES_ICON_VIEW_CAPTIONS); - for (l = captions, i = 0; + for (i = 0, j = 0; icon_captions_components[i] != NULL; i++) { - if (l != NULL) { - data = l->data; - l = l->next; + char *data; + + if (captions[j]) { + data = captions[j]; + ++j; } else { data = "none"; } - + update_caption_combo_box (xml, icon_captions_components[i], data); } - eel_g_list_free_deep (captions); + + g_strfreev (captions); } static void @@ -478,19 +481,18 @@ create_date_format_menu (GladeXML *xml_dialog) static void set_columns_from_gconf (NautilusColumnChooser *chooser) { - GList *visible_columns; - GList *column_order; + char **visible_columns; + char **column_order; - visible_columns = eel_preferences_get_string_glist (NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_VISIBLE_COLUMNS); - column_order = eel_preferences_get_string_glist (NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_COLUMN_ORDER); + visible_columns = eel_preferences_get_string_array (NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_VISIBLE_COLUMNS); + column_order = eel_preferences_get_string_array (NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_COLUMN_ORDER); nautilus_column_chooser_set_settings (NAUTILUS_COLUMN_CHOOSER (chooser), visible_columns, column_order); - - eel_g_list_free_deep (visible_columns); - eel_g_list_free_deep (column_order); + g_strfreev (visible_columns); + g_strfreev (column_order); } static void diff --git a/src/nautilus-shell.c b/src/nautilus-shell.c index 4a803b134..18cfa5f5a 100644 --- a/src/nautilus-shell.c +++ b/src/nautilus-shell.c @@ -379,10 +379,10 @@ save_window_states (void) char *window_attributes; int x, y, width, height; char *location; - GList *states; + GPtrArray *states; int screen_num = -1; - states = NULL; + states = g_ptr_array_new (); windows = nautilus_application_get_window_list (); for (node = windows; node; node = g_list_next (node)) { g_assert (node->data != NULL); @@ -407,23 +407,21 @@ save_window_states (void) screen_num); g_free (location); - states = g_list_prepend (states, window_attributes); + g_ptr_array_add (states, window_attributes); } + g_ptr_array_add (states, NULL); if (eel_preferences_key_is_writable (START_STATE_CONFIG)) { - states = g_list_reverse (states); - eel_preferences_set_string_glist (START_STATE_CONFIG, states); + eel_preferences_set_string_array (START_STATE_CONFIG, + (char **) states->pdata); } - eel_g_list_free_deep (states); - g_list_free (states); + g_ptr_array_free (states, TRUE); } static void -restore_one_window_callback (const char *attributes, - gpointer callback_data) +restore_one_window (const char *attributes, NautilusShell *shell) { - NautilusShell *shell; char **attrs; int attrs_len; int x; @@ -435,9 +433,7 @@ restore_one_window_callback (const char *attributes, GdkScreen *screen = NULL; g_return_if_fail (!eel_str_is_empty (attributes)); - g_return_if_fail (NAUTILUS_IS_SHELL (callback_data)); - - shell = NAUTILUS_SHELL (callback_data); + g_return_if_fail (NAUTILUS_IS_SHELL (shell)); attrs = g_strsplit (attributes, ",", -1); attrs_len = g_strv_length (attrs); @@ -505,18 +501,27 @@ restore_one_window_callback (const char *attributes, static gboolean restore_window_states (NautilusShell *shell) { - GList *states; + char **states; gboolean result; + int i; + + result = FALSE; + + states = eel_preferences_get_string_array (START_STATE_CONFIG); + if (!states) { + return result; + } + + for (i = 0; states[i] != NULL; ++i) { + result = TRUE; + restore_one_window (states[i], shell); + } - states = eel_preferences_get_string_glist (START_STATE_CONFIG); - result = g_list_length (states) > 0; - g_list_foreach (states, (GFunc) restore_one_window_callback, shell); if (eel_preferences_key_is_writable (START_STATE_CONFIG)) { - eel_preferences_set_string_glist (START_STATE_CONFIG, NULL); + eel_preferences_set_string_array (START_STATE_CONFIG, NULL); } - eel_g_list_free_deep (states); - g_list_free (states); + g_strfreev (states); return result; } diff --git a/test/test-nautilus-preferences-change.c b/test/test-nautilus-preferences-change.c deleted file mode 100644 index b34317751..000000000 --- a/test/test-nautilus-preferences-change.c +++ /dev/null @@ -1,121 +0,0 @@ -#include "test.h" - -#include <eel/eel-string-picker.h> -#include <libnautilus-private/nautilus-global-preferences.h> -#include <unistd.h> - -static void -fruits_changed_callback (gpointer callback_data) -{ - g_print ("Something underneath 'fruits' changed, dunno what\n"); -} - -static void -int_picker_changed_callback (EelStringPicker *string_picker, - gpointer callback_data) -{ - char *selected_string; - int new_value; - - g_return_if_fail (EEL_IS_STRING_PICKER (string_picker)); - g_return_if_fail (callback_data != NULL); - - selected_string = eel_string_picker_get_selected_string (string_picker); - - new_value = eel_string_picker_get_index_for_string (string_picker, selected_string); - - eel_preferences_set_integer ((const char *) callback_data, new_value); - - g_free (selected_string); -} - -static GtkWidget * -picker_new (const char *name, - const EelStringList *entries) -{ - GtkWidget *string_picker; - - g_return_val_if_fail (name != NULL, NULL); - g_return_val_if_fail (entries != NULL, NULL); - - string_picker = eel_string_picker_new (); - eel_caption_set_title_label (EEL_CAPTION (string_picker), name); - g_signal_connect (string_picker, "changed", - G_CALLBACK (int_picker_changed_callback), (gpointer) name); - - eel_string_picker_set_string_list (EEL_STRING_PICKER (string_picker), entries); - eel_string_picker_set_selected_string_index (EEL_STRING_PICKER (string_picker), - eel_preferences_get_integer (name)); - - return string_picker; -} - -int -main (int argc, char *argv[]) -{ - GtkWidget *window; - GtkWidget *green_picker; - GtkWidget *yellow_picker; - GtkWidget *red_picker; - GtkWidget *fruits_apple_picker; - GtkWidget *fruits_orange_picker; - GtkWidget *fruits_pear_picker; - - GtkWidget *vbox; - - EelStringList *user_level_entries; - EelStringList *color_entries; - EelStringList *fruits_entries; - - test_init (&argc, &argv); - - nautilus_global_preferences_init (); - - user_level_entries = eel_string_list_new_from_tokens ("Beginner,Intermediate,Advanced", ",", TRUE); - color_entries = eel_string_list_new_from_tokens ("0,1,2,3,4,5,6,7,8,9,10", ",", TRUE); - fruits_entries = eel_string_list_new_from_tokens ("0,1,2,3", ",", TRUE); - - eel_preferences_set_emergency_fallback_integer ("green", 3); - - eel_preferences_set_emergency_fallback_integer ("yellow", 9); - - eel_preferences_set_emergency_fallback_integer ("red", 7); - - eel_preferences_set_emergency_fallback_integer ("fruits/apple", 1); - eel_preferences_set_emergency_fallback_integer ("fruits/orange", 2); - eel_preferences_set_emergency_fallback_integer ("fruits/pear", 3); - - /* sleep (10); */ - - window = test_window_new (NULL, 4); - test_window_set_title_with_pid (GTK_WINDOW (window), "Preferences Change"); - - vbox = gtk_vbox_new (FALSE, 2); - gtk_container_add (GTK_CONTAINER (window), vbox); - - green_picker = picker_new ("green", color_entries); - yellow_picker = picker_new ("yellow", color_entries); - red_picker = picker_new ("red", color_entries); - fruits_apple_picker = picker_new ("fruits/apple", fruits_entries); - fruits_orange_picker = picker_new ("fruits/orange", fruits_entries); - fruits_pear_picker = picker_new ("fruits/pear", fruits_entries); - - gtk_box_pack_start (GTK_BOX (vbox), green_picker, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (vbox), yellow_picker, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (vbox), red_picker, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (vbox), fruits_apple_picker, FALSE, FALSE, 20); - gtk_box_pack_start (GTK_BOX (vbox), fruits_orange_picker, FALSE, FALSE, 20); - gtk_box_pack_start (GTK_BOX (vbox), fruits_pear_picker, FALSE, FALSE, 20); - - eel_string_list_free (user_level_entries); - eel_string_list_free (color_entries); - eel_string_list_free (fruits_entries); - - eel_preferences_add_callback ("fruits", fruits_changed_callback, NULL); - - gtk_widget_show_all (window); - - gtk_main (); - - return 0; -} |