summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorey Berla <corey@berla.me>2023-01-21 21:02:27 -0800
committerCorey Berla <corey@berla.me>2023-05-04 21:32:59 +0000
commit16dc1a33d7e1854b5765e33ffa8a3589fd9a1ef3 (patch)
tree542b93e925ebf52f968d09df972864635238c024
parentc3f4940b708f62edf57939cb11e53656cdf5fd81 (diff)
downloadnautilus-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.
-rw-r--r--src/nautilus-column-chooser.c60
-rw-r--r--src/nautilus-column-chooser.h6
-rw-r--r--src/nautilus-column-utilities.c91
-rw-r--r--src/nautilus-column-utilities.h8
-rw-r--r--src/nautilus-list-view.c194
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;
}