diff options
-rw-r--r-- | src/nautilus-column-chooser.c | 60 | ||||
-rw-r--r-- | src/nautilus-column-chooser.h | 6 | ||||
-rw-r--r-- | src/nautilus-column-utilities.c | 91 | ||||
-rw-r--r-- | src/nautilus-column-utilities.h | 8 | ||||
-rw-r--r-- | src/nautilus-list-view.c | 194 |
5 files changed, 132 insertions, 227 deletions
diff --git a/src/nautilus-column-chooser.c b/src/nautilus-column-chooser.c index 00e902e02..afd46572b 100644 --- a/src/nautilus-column-chooser.c +++ b/src/nautilus-column-chooser.c @@ -93,7 +93,10 @@ get_column_names (NautilusColumnChooser *chooser, static void list_changed (NautilusColumnChooser *chooser) { - g_signal_emit (chooser, signals[CHANGED], 0); + g_auto (GStrv) column_order = get_column_names (chooser, FALSE); + g_auto (GStrv) visible_columns = get_column_names (chooser, TRUE); + + g_signal_emit (chooser, signals[CHANGED], 0, column_order, visible_columns); } static void @@ -123,14 +126,6 @@ nautilus_column_chooser_set_property (GObject *object, } static void -use_default_clicked_callback (GtkWidget *button, - gpointer user_data) -{ - g_signal_emit (NAUTILUS_COLUMN_CHOOSER (user_data), - signals[USE_DEFAULT], 0); -} - -static void notify_row_switch_cb (GObject *object, GParamSpec *pspec, gpointer user_data) @@ -336,38 +331,33 @@ set_visible_columns (NautilusColumnChooser *chooser, } } -void -nautilus_column_chooser_set_settings (NautilusColumnChooser *chooser, - char **visible_columns, - char **column_order) +static void +use_default_clicked_callback (GtkWidget *button, + gpointer user_data) { - g_return_if_fail (NAUTILUS_IS_COLUMN_CHOOSER (chooser)); - g_return_if_fail (visible_columns != NULL); - g_return_if_fail (column_order != NULL); - - set_visible_columns (chooser, visible_columns); - set_column_order (chooser, column_order); + NautilusColumnChooser *chooser = user_data; + g_auto (GStrv) default_columns = NULL; + g_auto (GStrv) default_order = NULL; - list_changed (chooser); -} + nautilus_column_save_metadata (chooser->file, NULL, NULL); -void -nautilus_column_chooser_get_settings (NautilusColumnChooser *chooser, - 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); + /* set view values ourselves, as new metadata could not have been + * updated yet. + */ + default_columns = nautilus_column_get_default_visible_columns (chooser->file); + default_order = nautilus_column_get_default_column_order (chooser->file); + set_visible_columns (chooser, default_columns); + set_column_order (chooser, default_order); - *visible_columns = get_column_names (chooser, TRUE); - *column_order = get_column_names (chooser, FALSE); + list_changed (chooser); } static void populate_list (NautilusColumnChooser *chooser) { GList *columns = nautilus_get_columns_for_file (chooser->file); + g_auto (GStrv) visible_columns = nautilus_column_get_visible_columns (chooser->file); + g_auto (GStrv) column_order = nautilus_column_get_column_order (chooser->file); g_list_store_remove_all (G_LIST_STORE (chooser->model)); @@ -385,6 +375,9 @@ populate_list (NautilusColumnChooser *chooser) g_list_store_append (G_LIST_STORE (chooser->model), l->data); } + set_visible_columns (chooser, visible_columns); + set_column_order (chooser, column_order); + nautilus_column_list_free (columns); } @@ -440,8 +433,9 @@ nautilus_column_chooser_class_init (NautilusColumnChooserClass *chooser_class) G_TYPE_FROM_CLASS (chooser_class), G_SIGNAL_RUN_LAST, 0, NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); + g_cclosure_marshal_generic, + G_TYPE_NONE, + 2, G_TYPE_STRV, G_TYPE_STRV); signals[USE_DEFAULT] = g_signal_new ("use-default", diff --git a/src/nautilus-column-chooser.h b/src/nautilus-column-chooser.h index 93581f5d4..f28067eb5 100644 --- a/src/nautilus-column-chooser.h +++ b/src/nautilus-column-chooser.h @@ -32,9 +32,3 @@ G_DECLARE_FINAL_TYPE (NautilusColumnChooser, nautilus_column_chooser, NAUTILUS, COLUMN_CHOOSER, AdwWindow); GtkWidget *nautilus_column_chooser_new (NautilusFile *file); -void nautilus_column_chooser_set_settings (NautilusColumnChooser *chooser, - char **visible_columns, - char **column_order); -void nautilus_column_chooser_get_settings (NautilusColumnChooser *chooser, - char ***visible_columns, - char ***column_order); diff --git a/src/nautilus-column-utilities.c b/src/nautilus-column-utilities.c index d65c432b3..e3000a2b3 100644 --- a/src/nautilus-column-utilities.c +++ b/src/nautilus-column-utilities.c @@ -25,6 +25,9 @@ #include <string.h> #include <glib/gi18n.h> #include <nautilus-extension.h> +#include "nautilus-file.h" +#include "nautilus-global-preferences.h" +#include "nautilus-metadata.h" #include "nautilus-module.h" static const char *default_column_order[] = @@ -46,6 +49,16 @@ static const char *default_column_order[] = NULL }; +static const char *default_columns_for_recent[] = +{ + "name", "size", "recency", NULL +}; + +static const char *default_columns_for_trash[] = +{ + "name", "size", "trashed_on", NULL +}; + static GList * get_builtin_columns (void) { @@ -413,3 +426,81 @@ nautilus_sort_columns (GList *columns, (GCompareDataFunc) column_compare, column_order); } + +void +nautilus_column_save_metadata (NautilusFile *file, + GStrv column_order, + GStrv visible_columns) +{ + nautilus_file_set_metadata_list (file, + NAUTILUS_METADATA_KEY_LIST_VIEW_VISIBLE_COLUMNS, + visible_columns); + nautilus_file_set_metadata_list (file, + NAUTILUS_METADATA_KEY_LIST_VIEW_COLUMN_ORDER, + column_order); +} + +GStrv +nautilus_column_get_default_visible_columns (NautilusFile *file) +{ + if (nautilus_file_is_in_trash (file)) + { + return g_strdupv ((gchar **) default_columns_for_trash); + } + + if (nautilus_file_is_in_recent (file)) + { + return g_strdupv ((gchar **) default_columns_for_recent); + } + + return g_settings_get_strv (nautilus_list_view_preferences, + NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_VISIBLE_COLUMNS); +} + +GStrv +nautilus_column_get_visible_columns (NautilusFile *file) +{ + g_autofree gchar **visible_columns = NULL; + + visible_columns = nautilus_file_get_metadata_list (file, + NAUTILUS_METADATA_KEY_LIST_VIEW_VISIBLE_COLUMNS); + if (visible_columns == NULL || visible_columns[0] == NULL) + { + return nautilus_column_get_default_visible_columns (file); + } + + return g_steal_pointer (&visible_columns); +} + +GStrv +nautilus_column_get_default_column_order (NautilusFile *file) +{ + if (nautilus_file_is_in_trash (file)) + { + return g_strdupv ((gchar **) default_columns_for_trash); + } + + if (nautilus_file_is_in_recent (file)) + { + return g_strdupv ((gchar **) default_columns_for_recent); + } + + return g_settings_get_strv (nautilus_list_view_preferences, + NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_COLUMN_ORDER); +} + +GStrv +nautilus_column_get_column_order (NautilusFile *file) +{ + g_autofree gchar **column_order = NULL; + + column_order = nautilus_file_get_metadata_list (file, + NAUTILUS_METADATA_KEY_LIST_VIEW_COLUMN_ORDER); + + if (column_order != NULL && column_order[0] != NULL) + { + return g_steal_pointer (&column_order); + } + + return nautilus_column_get_default_column_order (file); +} diff --git a/src/nautilus-column-utilities.h b/src/nautilus-column-utilities.h index 56a363f80..5a29efafe 100644 --- a/src/nautilus-column-utilities.h +++ b/src/nautilus-column-utilities.h @@ -32,3 +32,11 @@ void nautilus_column_list_free (GList *columns); GList *nautilus_sort_columns (GList *columns, char **column_order); +void nautilus_column_save_metadata (NautilusFile *file, + GStrv column_order, + GStrv visible_column); + +GStrv nautilus_column_get_default_visible_columns (NautilusFile *file); +GStrv nautilus_column_get_visible_columns (NautilusFile *file); +GStrv nautilus_column_get_default_column_order (NautilusFile *file); +GStrv nautilus_column_get_column_order (NautilusFile *file); diff --git a/src/nautilus-list-view.c b/src/nautilus-list-view.c index 3b5f250ef..5802b7d33 100644 --- a/src/nautilus-list-view.c +++ b/src/nautilus-list-view.c @@ -53,16 +53,6 @@ struct _NautilusListView G_DEFINE_TYPE (NautilusListView, nautilus_list_view, NAUTILUS_TYPE_LIST_BASE) -static const char *default_columns_for_recent[] = -{ - "name", "size", "recency", NULL -}; - -static const char *default_columns_for_trash[] = -{ - "name", "size", "trashed_on", NULL -}; - static NautilusViewItem * get_view_item (GtkColumnViewCell *cell) { @@ -298,89 +288,12 @@ sort_directories_func (gconstpointer a, return GTK_ORDERING_EQUAL; } -static char ** -get_default_visible_columns (NautilusListView *self) -{ - NautilusFile *file; - - file = nautilus_files_view_get_directory_as_file (NAUTILUS_FILES_VIEW (self)); - - if (nautilus_file_is_in_trash (file)) - { - return g_strdupv ((gchar **) default_columns_for_trash); - } - - if (nautilus_file_is_in_recent (file)) - { - return g_strdupv ((gchar **) default_columns_for_recent); - } - - return g_settings_get_strv (nautilus_list_view_preferences, - NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_VISIBLE_COLUMNS); -} - -static char ** -get_visible_columns (NautilusListView *self) -{ - NautilusFile *file; - g_autofree gchar **visible_columns = NULL; - - file = nautilus_files_view_get_directory_as_file (NAUTILUS_FILES_VIEW (self)); - - visible_columns = nautilus_file_get_metadata_list (file, - NAUTILUS_METADATA_KEY_LIST_VIEW_VISIBLE_COLUMNS); - if (visible_columns == NULL || visible_columns[0] == NULL) - { - return get_default_visible_columns (self); - } - - return g_steal_pointer (&visible_columns); -} - -static char ** -get_default_column_order (NautilusListView *self) -{ - NautilusFile *file; - - file = nautilus_files_view_get_directory_as_file (NAUTILUS_FILES_VIEW (self)); - - if (nautilus_file_is_in_trash (file)) - { - return g_strdupv ((gchar **) default_columns_for_trash); - } - - if (nautilus_file_is_in_recent (file)) - { - return g_strdupv ((gchar **) default_columns_for_recent); - } - - return g_settings_get_strv (nautilus_list_view_preferences, - NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_COLUMN_ORDER); -} - -static char ** -get_column_order (NautilusListView *self) -{ - NautilusFile *file; - g_autofree gchar **column_order = NULL; - - file = nautilus_files_view_get_directory_as_file (NAUTILUS_FILES_VIEW (self)); - - column_order = nautilus_file_get_metadata_list (file, - NAUTILUS_METADATA_KEY_LIST_VIEW_COLUMN_ORDER); - - if (column_order != NULL && column_order[0] != NULL) - { - return g_steal_pointer (&column_order); - } - - return get_default_column_order (self); -} static void update_columns_settings_from_metadata_and_preferences (NautilusListView *self) { - g_auto (GStrv) column_order = get_column_order (self); - g_auto (GStrv) visible_columns = get_visible_columns (self); + NautilusFile *file = nautilus_files_view_get_directory_as_file (NAUTILUS_FILES_VIEW (self)); + g_auto (GStrv) column_order = nautilus_column_get_column_order (file); + g_auto (GStrv) visible_columns = nautilus_column_get_visible_columns (file); apply_columns_settings (self, column_order, visible_columns); } @@ -450,95 +363,6 @@ create_view_ui (NautilusListView *self) return GTK_COLUMN_VIEW (widget); } -static void -column_chooser_changed_callback (NautilusColumnChooser *chooser, - NautilusListView *view) -{ - NautilusFile *file; - char **visible_columns; - char **column_order; - - file = nautilus_files_view_get_directory_as_file (NAUTILUS_FILES_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, - visible_columns); - nautilus_file_set_metadata_list (file, - NAUTILUS_METADATA_KEY_LIST_VIEW_COLUMN_ORDER, - column_order); - - apply_columns_settings (view, column_order, visible_columns); - - g_strfreev (visible_columns); - g_strfreev (column_order); -} - -static void -column_chooser_set_from_arrays (NautilusColumnChooser *chooser, - NautilusListView *view, - char **visible_columns, - char **column_order) -{ - g_signal_handlers_block_by_func - (chooser, G_CALLBACK (column_chooser_changed_callback), view); - - nautilus_column_chooser_set_settings (chooser, - visible_columns, - column_order); - - g_signal_handlers_unblock_by_func - (chooser, G_CALLBACK (column_chooser_changed_callback), view); -} - -static void -column_chooser_set_from_settings (NautilusColumnChooser *chooser, - NautilusListView *view) -{ - char **visible_columns; - char **column_order; - - visible_columns = get_visible_columns (view); - column_order = get_column_order (view); - - column_chooser_set_from_arrays (chooser, view, - visible_columns, column_order); - - g_strfreev (visible_columns); - g_strfreev (column_order); -} - -static void -column_chooser_use_default_callback (NautilusColumnChooser *chooser, - NautilusListView *view) -{ - NautilusFile *file; - char **default_columns; - char **default_order; - - file = nautilus_files_view_get_directory_as_file - (NAUTILUS_FILES_VIEW (view)); - - nautilus_file_set_metadata_list (file, NAUTILUS_METADATA_KEY_LIST_VIEW_COLUMN_ORDER, NULL); - nautilus_file_set_metadata_list (file, NAUTILUS_METADATA_KEY_LIST_VIEW_VISIBLE_COLUMNS, NULL); - - /* set view values ourselves, as new metadata could not have been - * updated yet. - */ - default_columns = get_default_visible_columns (view); - default_order = get_default_column_order (view); - - apply_columns_settings (view, default_order, default_columns); - column_chooser_set_from_arrays (chooser, view, - default_columns, default_order); - - g_strfreev (default_columns); - g_strfreev (default_order); -} - static GtkWidget * create_column_editor (NautilusListView *view) { @@ -550,15 +374,9 @@ create_column_editor (NautilusListView *view) gtk_window_set_transient_for (GTK_WINDOW (column_chooser), GTK_WINDOW (gtk_widget_get_root (GTK_WIDGET (view)))); - g_signal_connect (column_chooser, "changed", - G_CALLBACK (column_chooser_changed_callback), - view); - g_signal_connect (column_chooser, "use-default", - G_CALLBACK (column_chooser_use_default_callback), - view); - - column_chooser_set_from_settings - (NAUTILUS_COLUMN_CHOOSER (column_chooser), view); + g_signal_connect_swapped (column_chooser, "changed", + G_CALLBACK (apply_columns_settings), + view); return column_chooser; } |