diff options
author | Corey Berla <corey@berla.me> | 2023-01-21 21:02:27 -0800 |
---|---|---|
committer | Corey Berla <corey@berla.me> | 2023-05-04 21:32:59 +0000 |
commit | 16dc1a33d7e1854b5765e33ffa8a3589fd9a1ef3 (patch) | |
tree | 542b93e925ebf52f968d09df972864635238c024 /src | |
parent | c3f4940b708f62edf57939cb11e53656cdf5fd81 (diff) | |
download | nautilus-16dc1a33d7e1854b5765e33ffa8a3589fd9a1ef3.tar.gz |
column-chooser: Move operations from listview to column-chooser
There's this complicated back and forth between the listview and
the column chooser. Work happens in both and it gets confusing
and creates unnecessary complexity. It also will cause problems
in a future commit where we may want to revert changes that were
made but the list-view doesn't know about that.
Have the column-chooser load in all of the information, and set
the information. The list-view is merely notified of the changes
for display purposes.
Diffstat (limited to 'src')
-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; } |