Merge branch 'wip/corey/file-chooser-columns' into 'main'

File Chooser Move Column Visible to Column Header Menu

See merge request GNOME/gtk!6377
This commit is contained in:
Matthias Clasen
2023-09-16 14:27:52 +00:00

View File

@@ -328,8 +328,6 @@ struct _GtkFileChooserWidget
guint sort_directories_first : 1;
guint show_time : 1;
guint shortcuts_current_folder_active : 1;
guint show_size_column : 1;
guint show_type_column : 1;
guint create_folders : 1;
guint auto_selecting_first_row : 1;
guint browse_files_interaction_frozen : 1;
@@ -1421,36 +1419,6 @@ change_show_hidden_state (GSimpleAction *action,
set_show_hidden (impl, g_variant_get_boolean (state));
}
/* Callback used when the "Show Size Column" menu item is toggled */
static void
change_show_size_state (GSimpleAction *action,
GVariant *state,
gpointer data)
{
GtkFileChooserWidget *impl = data;
g_simple_action_set_state (action, state);
impl->show_size_column = g_variant_get_boolean (state);
gtk_column_view_column_set_visible (impl->column_view_size_column,
impl->show_size_column);
}
/* Callback used when the "Show Type Column" menu item is toggled */
static void
change_show_type_state (GSimpleAction *action,
GVariant *state,
gpointer data)
{
GtkFileChooserWidget *impl = data;
g_simple_action_set_state (action, state);
impl->show_type_column = g_variant_get_boolean (state);
gtk_column_view_column_set_visible (impl->column_view_type_column,
impl->show_type_column);
}
static void
change_sort_directories_first_state (GSimpleAction *action,
GVariant *state,
@@ -1774,8 +1742,6 @@ static GActionEntry entries[] = {
{ "trash", trash_file_cb, NULL, NULL, NULL },
{ "popup-file-list-menu", popup_file_list_menu, "(udd)", NULL, NULL },
{ "toggle-show-hidden", NULL, NULL, "false", change_show_hidden_state },
{ "toggle-show-size", NULL, NULL, "false", change_show_size_state },
{ "toggle-show-type", NULL, NULL, "false", change_show_type_state },
{ "toggle-show-time", NULL, NULL, "false", change_show_time_state },
{ "toggle-sort-dirs-first", NULL, NULL, "false", change_sort_directories_first_state },
{ "toggle-view", toggle_view_cb, NULL, NULL, NULL },
@@ -1829,21 +1795,6 @@ file_list_build_popover (GtkFileChooserWidget *impl)
g_menu_append_item (section, item);
g_object_unref (item);
item = g_menu_item_new (_("Show _Size Column"), "item.toggle-show-size");
g_menu_item_set_attribute (item, "hidden-when", "s", "action-disabled");
g_menu_append_item (section, item);
g_object_unref (item);
item = g_menu_item_new (_("Show T_ype Column"), "item.toggle-show-type");
g_menu_item_set_attribute (item, "hidden-when", "s", "action-disabled");
g_menu_append_item (section, item);
g_object_unref (item);
item = g_menu_item_new (_("Show _Time"), "item.toggle-show-time");
g_menu_item_set_attribute (item, "hidden-when", "s", "action-disabled");
g_menu_append_item (section, item);
g_object_unref (item);
item = g_menu_item_new (_("Sort _Folders Before Files"), "item.toggle-sort-dirs-first");
g_menu_append_item (section, item);
g_object_unref (item);
@@ -1892,16 +1843,7 @@ file_list_update_popover (GtkFileChooserWidget *impl)
action = g_action_map_lookup_action (G_ACTION_MAP (impl->item_actions), "toggle-show-hidden");
g_simple_action_set_state (G_SIMPLE_ACTION (action), g_variant_new_boolean (impl->show_hidden));
action = g_action_map_lookup_action (G_ACTION_MAP (impl->item_actions), "toggle-show-size");
g_simple_action_set_enabled (G_SIMPLE_ACTION (action), (impl->view_type == VIEW_TYPE_LIST));
g_simple_action_set_state (G_SIMPLE_ACTION (action), g_variant_new_boolean (impl->show_size_column));
action = g_action_map_lookup_action (G_ACTION_MAP (impl->item_actions), "toggle-show-type");
g_simple_action_set_enabled (G_SIMPLE_ACTION (action), (impl->view_type == VIEW_TYPE_LIST));
g_simple_action_set_state (G_SIMPLE_ACTION (action), g_variant_new_boolean (impl->show_type_column));
action = g_action_map_lookup_action (G_ACTION_MAP (impl->item_actions), "toggle-show-time");
g_simple_action_set_enabled (G_SIMPLE_ACTION (action), (impl->view_type == VIEW_TYPE_LIST));
g_simple_action_set_state (G_SIMPLE_ACTION (action), g_variant_new_boolean (impl->show_time));
action = g_action_map_lookup_action (G_ACTION_MAP (impl->item_actions), "toggle-sort-dirs-first");
@@ -3178,8 +3120,6 @@ static void
settings_load (GtkFileChooserWidget *impl)
{
gboolean show_hidden;
gboolean show_size_column;
gboolean show_type_column;
gboolean sort_directories_first;
DateFormat date_format;
TypeFormat type_format;
@@ -3193,8 +3133,6 @@ settings_load (GtkFileChooserWidget *impl)
settings = _gtk_file_chooser_get_settings_for_widget (GTK_WIDGET (impl));
show_hidden = g_settings_get_boolean (settings, SETTINGS_KEY_SHOW_HIDDEN);
show_size_column = g_settings_get_boolean (settings, SETTINGS_KEY_SHOW_SIZE_COLUMN);
show_type_column = g_settings_get_boolean (settings, SETTINGS_KEY_SHOW_TYPE_COLUMN);
sort_column = g_settings_get_enum (settings, SETTINGS_KEY_SORT_COLUMN);
sort_order = g_settings_get_enum (settings, SETTINGS_KEY_SORT_ORDER);
sidebar_width = g_settings_get_int (settings, SETTINGS_KEY_SIDEBAR_WIDTH);
@@ -3206,10 +3144,8 @@ settings_load (GtkFileChooserWidget *impl)
set_show_hidden (impl, show_hidden);
impl->show_size_column = show_size_column;
gtk_column_view_column_set_visible (impl->column_view_size_column, show_size_column);
impl->show_type_column = show_type_column;
gtk_column_view_column_set_visible (impl->column_view_type_column, show_type_column);
g_settings_bind (settings, SETTINGS_KEY_SHOW_SIZE_COLUMN, impl->column_view_size_column, "visible", G_SETTINGS_BIND_DEFAULT);
g_settings_bind (settings, SETTINGS_KEY_SHOW_TYPE_COLUMN, impl->column_view_type_column, "visible", G_SETTINGS_BIND_DEFAULT);
impl->sort_column = sort_column;
impl->sort_order = sort_order;
@@ -3248,8 +3184,6 @@ settings_save (GtkFileChooserWidget *impl)
g_settings_set_enum (settings, SETTINGS_KEY_LOCATION_MODE, impl->location_mode);
g_settings_set_boolean (settings, SETTINGS_KEY_SHOW_HIDDEN, impl->show_hidden);
g_settings_set_boolean (settings, SETTINGS_KEY_SHOW_SIZE_COLUMN, impl->show_size_column);
g_settings_set_boolean (settings, SETTINGS_KEY_SHOW_TYPE_COLUMN, impl->show_type_column);
g_settings_set_boolean (settings, SETTINGS_KEY_SORT_DIRECTORIES_FIRST, impl->sort_directories_first);
g_settings_set_enum (settings, SETTINGS_KEY_SORT_COLUMN, impl->sort_column);
g_settings_set_enum (settings, SETTINGS_KEY_SORT_ORDER, impl->sort_order);
@@ -6868,6 +6802,7 @@ post_process_ui (GtkFileChooserWidget *impl)
GtkShortcutTrigger *trigger;
GtkShortcutAction *action;
GtkShortcut *shortcut;
GAction *gaction;
target = gtk_drop_target_new (GDK_TYPE_FILE_LIST, GDK_ACTION_COPY | GDK_ACTION_MOVE);
g_signal_connect (target, "drop", G_CALLBACK (file_list_drag_drop_cb), impl);
@@ -6884,6 +6819,12 @@ post_process_ui (GtkFileChooserWidget *impl)
g_action_map_add_action_entries (G_ACTION_MAP (impl->item_actions),
entries, G_N_ELEMENTS (entries),
impl);
gaction = G_ACTION (g_property_action_new ("toggle-show-size", impl->column_view_size_column, "visible"));
g_action_map_add_action (G_ACTION_MAP (impl->item_actions), gaction);
g_object_unref (gaction);
gaction = G_ACTION (g_property_action_new ("toggle-show-type", impl->column_view_type_column, "visible"));
g_action_map_add_action (G_ACTION_MAP (impl->item_actions), gaction);
g_object_unref (gaction);
gtk_widget_insert_action_group (GTK_WIDGET (impl),
"item",
impl->item_actions);
@@ -7403,6 +7344,22 @@ setup_columns (GtkColumnView *view,
GtkFileChooserWidget *impl)
{
GtkListItemFactory *factory;
GMenu *menu;
GMenuItem *item;
menu = g_menu_new ();
item = g_menu_item_new (_("_Size"), "item.toggle-show-size");
g_menu_append_item (menu, item);
g_object_unref (item);
item = g_menu_item_new (_("T_ype"), "item.toggle-show-type");
g_menu_append_item (menu, item);
g_object_unref (item);
item = g_menu_item_new (_("_Time"), "item.toggle-show-time");
g_menu_append_item (menu, item);
g_object_unref (item);
factory = gtk_signal_list_item_factory_new ();
g_signal_connect_swapped (factory, "bind", G_CALLBACK (bind_name_cell), impl);
@@ -7410,6 +7367,7 @@ setup_columns (GtkColumnView *view,
gtk_column_view_column_set_expand (impl->column_view_name_column, TRUE);
gtk_column_view_column_set_resizable (impl->column_view_name_column, TRUE);
gtk_column_view_append_column (view, impl->column_view_name_column);
gtk_column_view_column_set_header_menu (impl->column_view_name_column, G_MENU_MODEL (menu));
factory = gtk_signal_list_item_factory_new ();
g_signal_connect_swapped (factory, "bind", G_CALLBACK (bind_location_cell), impl);
@@ -7418,22 +7376,28 @@ setup_columns (GtkColumnView *view,
gtk_column_view_column_set_resizable (impl->column_view_location_column, TRUE);
gtk_column_view_column_set_visible (impl->column_view_location_column, FALSE);
gtk_column_view_append_column (view, impl->column_view_location_column);
gtk_column_view_column_set_header_menu (impl->column_view_location_column, G_MENU_MODEL (menu));
factory = gtk_signal_list_item_factory_new ();
g_signal_connect_swapped (factory, "bind", G_CALLBACK (bind_size_cell), impl);
impl->column_view_size_column = gtk_column_view_column_new (_("Size"), factory);
gtk_column_view_append_column (view, impl->column_view_size_column);
gtk_column_view_column_set_header_menu (impl->column_view_size_column, G_MENU_MODEL (menu));
factory = gtk_signal_list_item_factory_new ();
g_signal_connect_swapped (factory, "bind", G_CALLBACK (bind_type_cell), impl);
impl->column_view_type_column = gtk_column_view_column_new (_("Type"), factory);
gtk_column_view_column_set_resizable (impl->column_view_type_column, TRUE);
gtk_column_view_append_column (view, impl->column_view_type_column);
gtk_column_view_column_set_header_menu (impl->column_view_type_column, G_MENU_MODEL (menu));
factory = gtk_signal_list_item_factory_new ();
g_signal_connect_swapped (factory, "bind", G_CALLBACK (bind_time_cell), impl);
impl->column_view_time_column = gtk_column_view_column_new (_("Modified"), factory);
gtk_column_view_append_column (view, impl->column_view_time_column);
gtk_column_view_column_set_header_menu (impl->column_view_time_column, G_MENU_MODEL (menu));
g_object_unref (menu);
}
static void
@@ -7454,8 +7418,6 @@ gtk_file_chooser_widget_init (GtkFileChooserWidget *impl)
impl->select_multiple = FALSE;
impl->sort_directories_first = FALSE;
impl->show_hidden = FALSE;
impl->show_size_column = TRUE;
impl->show_type_column = TRUE;
impl->type_format = TYPE_FORMAT_MIME;
impl->load_state = LOAD_EMPTY;
impl->reload_state = RELOAD_EMPTY;