summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;
}