summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authordudemanguy2018-04-20 12:06:11 -0500
committerdudemanguy2018-04-20 12:06:11 -0500
commit66d453208029688d9c94c366fbdac6da5bbdc036 (patch)
tree29e1d8a1fb097e795514e284dbd0339303b2d59e
parentb414b0bae119770389b18072476bf18283d7e874 (diff)
downloadaur-66d453208029688d9c94c366fbdac6da5bbdc036.tar.gz
fix tree view columns and icon view popover
-rw-r--r--.SRCINFO4
-rw-r--r--PKGBUILD4
-rw-r--r--gtk3-filechooser-icon-view.patch374
3 files changed, 265 insertions, 117 deletions
diff --git a/.SRCINFO b/.SRCINFO
index b75d562dcac5..58a0b81ccb71 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,7 +1,7 @@
pkgbase = gtk3-patched-filechooser-icon-view
pkgdesc = GTK3 patched with dudemanguy's fork of wfr's filechooser-icon-view patch.
pkgver = 3.22.30
- pkgrel = 1
+ pkgrel = 2
url = https://gist.github.com/Dudemanguy911/c172394e30e1e7d0f477ad15c719bc71
install = gtk3.install
arch = x86_64
@@ -52,7 +52,7 @@ pkgbase = gtk3-patched-filechooser-icon-view
sha256sums = SKIP
sha256sums = 01fc1d81dc82c4a052ac6e25bf9a04e7647267cc3017bc91f9ce3e63e5eb9202
sha256sums = de46e5514ff39a7a65e01e485e874775ab1c0ad20b8e94ada43f4a6af1370845
- sha256sums = aa25ef34086e1b47a647006fa3946328b15f82ba16dac2ab37ceed0693c5425c
+ sha256sums = 3cb0c1ee424f9d9bff8e97c18ba2d4680606ee4beee1e409fbee4b0dbad6c86e
pkgname = gtk3-patched-filechooser-icon-view
diff --git a/PKGBUILD b/PKGBUILD
index 81a588631a8d..6fe5a2688706 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -5,7 +5,7 @@
pkgname=gtk3-patched-filechooser-icon-view
pkgver=3.22.30
-pkgrel=1
+pkgrel=2
pkgdesc="GTK3 patched with dudemanguy's fork of wfr's filechooser-icon-view patch."
arch=(x86_64)
url="https://gist.github.com/Dudemanguy911/c172394e30e1e7d0f477ad15c719bc71"
@@ -30,7 +30,7 @@ source=("git+https://gitlab.gnome.org/GNOME/gtk.git#commit=$_commit"
sha256sums=('SKIP'
'01fc1d81dc82c4a052ac6e25bf9a04e7647267cc3017bc91f9ce3e63e5eb9202'
'de46e5514ff39a7a65e01e485e874775ab1c0ad20b8e94ada43f4a6af1370845'
- 'aa25ef34086e1b47a647006fa3946328b15f82ba16dac2ab37ceed0693c5425c')
+ '3cb0c1ee424f9d9bff8e97c18ba2d4680606ee4beee1e409fbee4b0dbad6c86e')
pkgver() {
cd gtk
git describe --tags | sed 's/-/+/g'
diff --git a/gtk3-filechooser-icon-view.patch b/gtk3-filechooser-icon-view.patch
index d809823a338e..2f95ead87439 100644
--- a/gtk3-filechooser-icon-view.patch
+++ b/gtk3-filechooser-icon-view.patch
@@ -18,7 +18,7 @@ index 0094beb299..433a623963 100644
#define SETTINGS_KEY_SHOW_SIZE_COLUMN "show-size-column"
#define SETTINGS_KEY_SORT_COLUMN "sort-column"
diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c
-index 09a119049c..abf53f1b9d 100644
+index d1dd2f0059..cfbc18d715 100644
--- a/gtk/gtkfilechooserwidget.c
+++ b/gtk/gtkfilechooserwidget.c
@@ -1,4 +1,4 @@
@@ -40,15 +40,15 @@ index 09a119049c..abf53f1b9d 100644
#include "gtkpaned.h"
#include "gtkpathbar.h"
#include "gtkplacessidebar.h"
-@@ -80,6 +82,7 @@
- #include "gtkdebug.h"
+@@ -79,6 +81,7 @@
+ #include "gtkgesturelongpress.h"
#include <cairo-gobject.h>
+#include <math.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
-@@ -197,6 +200,11 @@ typedef enum {
+@@ -196,6 +199,11 @@ typedef enum {
STARTUP_MODE_CWD
} StartupMode;
@@ -60,7 +60,7 @@ index 09a119049c..abf53f1b9d 100644
typedef enum {
CLOCK_FORMAT_24,
CLOCK_FORMAT_12
-@@ -221,8 +229,12 @@ struct _GtkFileChooserWidgetPrivate {
+@@ -220,8 +228,12 @@ struct _GtkFileChooserWidgetPrivate {
GtkWidget *browse_header_revealer;
GtkWidget *browse_header_stack;
GtkWidget *browse_files_stack;
@@ -74,7 +74,7 @@ index 09a119049c..abf53f1b9d 100644
GtkWidget *remote_warning_bar;
GtkWidget *browse_files_popover;
-@@ -253,6 +265,7 @@ struct _GtkFileChooserWidgetPrivate {
+@@ -252,6 +264,7 @@ struct _GtkFileChooserWidgetPrivate {
GtkGesture *long_press_gesture;
@@ -82,7 +82,7 @@ index 09a119049c..abf53f1b9d 100644
GtkFileSystemModel *browse_files_model;
char *browse_files_last_selected_name;
-@@ -337,10 +350,17 @@ struct _GtkFileChooserWidgetPrivate {
+@@ -336,10 +349,17 @@ struct _GtkFileChooserWidgetPrivate {
guint location_changed_id;
gulong settings_signal_id;
@@ -101,7 +101,7 @@ index 09a119049c..abf53f1b9d 100644
gulong toplevel_set_focus_id;
GtkWidget *toplevel_last_focus_widget;
-@@ -403,7 +423,8 @@ enum {
+@@ -402,7 +422,8 @@ enum {
MODEL_COL_NAME_COLLATED,
MODEL_COL_IS_FOLDER,
MODEL_COL_IS_SENSITIVE,
@@ -111,7 +111,7 @@ index 09a119049c..abf53f1b9d 100644
MODEL_COL_SIZE_TEXT,
MODEL_COL_DATE_TEXT,
MODEL_COL_TIME_TEXT,
-@@ -422,7 +443,8 @@ enum {
+@@ -421,7 +442,8 @@ enum {
G_TYPE_STRING, /* MODEL_COL_NAME_COLLATED */ \
G_TYPE_BOOLEAN, /* MODEL_COL_IS_FOLDER */ \
G_TYPE_BOOLEAN, /* MODEL_COL_IS_SENSITIVE */ \
@@ -121,7 +121,7 @@ index 09a119049c..abf53f1b9d 100644
G_TYPE_STRING, /* MODEL_COL_SIZE_TEXT */ \
G_TYPE_STRING, /* MODEL_COL_DATE_TEXT */ \
G_TYPE_STRING, /* MODEL_COL_TIME_TEXT */ \
-@@ -432,7 +454,10 @@ enum {
+@@ -431,7 +453,10 @@ enum {
#define DEFAULT_RECENT_FILES_LIMIT 50
/* Icon size for if we can't get it from the theme */
@@ -133,7 +133,7 @@ index 09a119049c..abf53f1b9d 100644
#define PREVIEW_HBOX_SPACING 12
#define NUM_LINES 45
-@@ -553,7 +578,7 @@ static gboolean list_select_func (GtkTreeSelection *selection,
+@@ -552,7 +577,7 @@ static gboolean list_select_func (GtkTreeSelection *selection,
gboolean path_currently_selected,
gpointer data);
@@ -142,7 +142,7 @@ index 09a119049c..abf53f1b9d 100644
GtkFileChooserWidget *impl);
static void list_row_activated (GtkTreeView *tree_view,
GtkTreePath *path,
-@@ -561,6 +586,13 @@ static void list_row_activated (GtkTreeView *tree_view,
+@@ -560,6 +585,13 @@ static void list_row_activated (GtkTreeView *tree_view,
GtkFileChooserWidget *impl);
static void list_cursor_changed (GtkTreeView *treeview,
GtkFileChooserWidget *impl);
@@ -156,7 +156,7 @@ index 09a119049c..abf53f1b9d 100644
static void path_bar_clicked (GtkPathBar *path_bar,
GFile *file,
-@@ -573,6 +605,13 @@ static void update_cell_renderer_attributes (GtkFileChooserWidget *impl);
+@@ -572,6 +604,13 @@ static void update_cell_renderer_attributes (GtkFileChooserWidget *impl);
static void load_remove_timer (GtkFileChooserWidget *impl, LoadState new_load_state);
static void browse_files_center_selected_row (GtkFileChooserWidget *impl);
@@ -170,7 +170,7 @@ index 09a119049c..abf53f1b9d 100644
static void location_switch_to_path_bar (GtkFileChooserWidget *impl);
static void stop_loading_and_clear_list_model (GtkFileChooserWidget *impl,
-@@ -602,13 +641,33 @@ static gboolean recent_should_respond (GtkFileChooserWidget *impl);
+@@ -601,13 +640,33 @@ static gboolean recent_should_respond (GtkFileChooserWidget *impl);
static void set_file_system_backend (GtkFileChooserWidget *impl);
static void unset_file_system_backend (GtkFileChooserWidget *impl);
@@ -205,7 +205,7 @@ index 09a119049c..abf53f1b9d 100644
G_DEFINE_TYPE_WITH_CODE (GtkFileChooserWidget, gtk_file_chooser_widget, GTK_TYPE_BOX,
G_ADD_PRIVATE (GtkFileChooserWidget)
-@@ -937,7 +996,7 @@ update_preview_widget_visibility (GtkFileChooserWidget *impl)
+@@ -936,7 +995,7 @@ update_preview_widget_visibility (GtkFileChooserWidget *impl)
}
}
@@ -214,7 +214,7 @@ index 09a119049c..abf53f1b9d 100644
gtk_widget_show (priv->preview_box);
else
gtk_widget_hide (priv->preview_box);
-@@ -1205,19 +1264,17 @@ selection_check (GtkFileChooserWidget *impl,
+@@ -1204,19 +1263,17 @@ selection_check (GtkFileChooserWidget *impl,
gboolean *all_files,
gboolean *all_folders)
{
@@ -238,7 +238,7 @@ index 09a119049c..abf53f1b9d 100644
g_assert (closure.num_selected == 0 || !(closure.all_files && closure.all_folders));
-@@ -1339,7 +1396,7 @@ browse_files_key_press_event_cb (GtkWidget *widget,
+@@ -1338,7 +1395,7 @@ browse_files_key_press_event_cb (GtkWidget *widget,
return TRUE;
}
@@ -247,7 +247,7 @@ index 09a119049c..abf53f1b9d 100644
{
if (gtk_widget_child_focus (priv->places_sidebar, GTK_DIR_LEFT))
return TRUE;
-@@ -1442,12 +1499,8 @@ add_to_shortcuts_cb (GSimpleAction *action,
+@@ -1441,12 +1498,8 @@ add_to_shortcuts_cb (GSimpleAction *action,
gpointer data)
{
GtkFileChooserWidget *impl = data;
@@ -261,7 +261,76 @@ index 09a119049c..abf53f1b9d 100644
add_bookmark_foreach_cb,
impl);
}
-@@ -2332,9 +2385,9 @@ file_list_show_popover (GtkFileChooserWidget *impl,
+@@ -2262,26 +2315,51 @@ file_list_build_popover (GtkFileChooserWidget *impl)
+ if (priv->browse_files_popover)
+ return;
+
+- priv->browse_files_popover = gtk_popover_new (priv->browse_files_tree_view);
+- box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+- g_object_set (box, "margin", 10, NULL);
+- gtk_widget_show (box);
+- gtk_container_add (GTK_CONTAINER (priv->browse_files_popover), box);
++ if (priv->view_mode == VIEW_MODE_LIST)
++ {
++ priv->browse_files_popover = gtk_popover_new (priv->browse_files_tree_view);
++ box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
++ g_object_set (box, "margin", 10, NULL);
++ gtk_widget_show (box);
++ gtk_container_add (GTK_CONTAINER (priv->browse_files_popover), box);
++
++ priv->visit_file_item = add_button (box, _("_Visit File"), "item.visit");
++ priv->open_folder_item = add_button (box, _("_Open With File Manager"), "item.open");
++ priv->copy_file_location_item = add_button (box, _("_Copy Location"), "item.copy-location");
++ priv->add_shortcut_item = add_button (box, _("_Add to Bookmarks"), "item.add-shortcut");
++ priv->rename_file_item = add_button (box, _("_Rename"), "item.rename");
++ priv->delete_file_item = add_button (box, _("_Delete"), "item.delete");
++ priv->trash_file_item = add_button (box, _("_Move to Trash"), "item.trash");
++
++ append_separator (box);
++
++ priv->hidden_files_item = add_button (box, _("Show _Hidden Files"), "item.toggle-show-hidden");
++ priv->size_column_item = add_button (box, _("Show _Size Column"), "item.toggle-show-size");
++ priv->show_time_item = add_button (box, _("Show _Time"), "item.toggle-show-time");
++ priv->sort_directories_item = add_button (box, _("Sort _Folders before Files"), "item.toggle-sort-dirs-first");
++ }
+
+- priv->visit_file_item = add_button (box, _("_Visit File"), "item.visit");
+- priv->open_folder_item = add_button (box, _("_Open With File Manager"), "item.open");
+- priv->copy_file_location_item = add_button (box, _("_Copy Location"), "item.copy-location");
+- priv->add_shortcut_item = add_button (box, _("_Add to Bookmarks"), "item.add-shortcut");
+- priv->rename_file_item = add_button (box, _("_Rename"), "item.rename");
+- priv->delete_file_item = add_button (box, _("_Delete"), "item.delete");
+- priv->trash_file_item = add_button (box, _("_Move to Trash"), "item.trash");
++ if (priv->view_mode == VIEW_MODE_ICON)
++ {
++ priv->browse_files_popover = gtk_popover_new (priv->browse_files_tree_view);
++ box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
++ g_object_set (box, "margin", 10, NULL);
++ gtk_widget_show (box);
++ gtk_container_add (GTK_CONTAINER (priv->browse_files_popover), box);
++
++ priv->visit_file_item = add_button (box, _("_Visit File"), "item.visit");
++ priv->open_folder_item = add_button (box, _("_Open With File Manager"), "item.open");
++ priv->copy_file_location_item = add_button (box, _("_Copy Location"), "item.copy-location");
++ priv->add_shortcut_item = add_button (box, _("_Add to Bookmarks"), "item.add-shortcut");
++ priv->rename_file_item = add_button (box, _("_Rename"), "item.rename");
++ priv->delete_file_item = add_button (box, _("_Delete"), "item.delete");
++ priv->trash_file_item = add_button (box, _("_Move to Trash"), "item.trash");
+
+- append_separator (box);
++ append_separator (box);
+
+- priv->hidden_files_item = add_button (box, _("Show _Hidden Files"), "item.toggle-show-hidden");
+- priv->size_column_item = add_button (box, _("Show _Size Column"), "item.toggle-show-size");
+- priv->show_time_item = add_button (box, _("Show _Time"), "item.toggle-show-time");
+- priv->sort_directories_item = add_button (box, _("Sort _Folders before Files"), "item.toggle-sort-dirs-first");
++ priv->hidden_files_item = add_button (box, _("Show _Hidden Files"), "item.toggle-show-hidden");
++ priv->sort_directories_item = add_button (box, _("Sort _Folders before Files"), "item.toggle-sort-dirs-first");
++ }
+ }
+
+ /* Updates the popover for the file list, creating it if necessary */
+@@ -2331,9 +2409,9 @@ file_list_show_popover (GtkFileChooserWidget *impl,
{
GtkFileChooserWidgetPrivate *priv = impl->priv;
GdkRectangle rect;
@@ -272,7 +341,7 @@ index 09a119049c..abf53f1b9d 100644
GtkTreePath *path;
-@@ -2342,15 +2395,16 @@ file_list_show_popover (GtkFileChooserWidget *impl,
+@@ -2341,15 +2419,16 @@ file_list_show_popover (GtkFileChooserWidget *impl,
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->browse_files_tree_view));
list = gtk_tree_selection_get_selected_rows (selection, &model);
@@ -287,14 +356,21 @@ index 09a119049c..abf53f1b9d 100644
+ gtk_tree_view_convert_bin_window_to_widget_coords (GTK_TREE_VIEW (priv->browse_files_tree_view),
+ rect.x, rect.y, &rect.x, &rect.y);
-- rect.x = CLAMP (x - 20, 0, gtk_widget_get_allocated_width (priv->browse_files_tree_view) - 40);
+ rect.x = CLAMP (x - 20, 0, gtk_widget_get_allocated_width (priv->browse_files_tree_view) - 40);
- rect.width = 40;
-+ rect.x = CLAMP (x - 20, 0, gtk_widget_get_allocated_width (priv->browse_files_icon_view) - 40);
+ rect.width = 40;
g_list_free_full (list, (GDestroyNotify) gtk_tree_path_free);
}
-@@ -2446,7 +2500,7 @@ list_button_press_event_cb (GtkWidget *widget,
+@@ -2386,7 +2465,6 @@ list_button_press_event_cb (GtkWidget *widget,
+ GdkEventButton *event,
+ GtkFileChooserWidget *impl)
+ {
+- GtkFileChooserWidgetPrivate *priv = impl->priv;
+ static gboolean in_press = FALSE;
+
+ if (in_press)
+@@ -2396,7 +2474,7 @@ list_button_press_event_cb (GtkWidget *widget,
return FALSE;
in_press = TRUE;
@@ -303,7 +379,7 @@ index 09a119049c..abf53f1b9d 100644
in_press = FALSE;
file_list_show_popover (impl, event->x, event->y);
-@@ -2477,12 +2531,15 @@ file_list_set_sort_column_ids (GtkFileChooserWidget *impl)
+@@ -2427,12 +2505,15 @@ file_list_set_sort_column_ids (GtkFileChooserWidget *impl)
{
GtkFileChooserWidgetPrivate *priv = impl->priv;
@@ -324,7 +400,7 @@ index 09a119049c..abf53f1b9d 100644
}
static gboolean
-@@ -2505,11 +2562,22 @@ file_list_query_tooltip_cb (GtkWidget *widget,
+@@ -2455,11 +2536,22 @@ file_list_query_tooltip_cb (GtkWidget *widget,
return FALSE;
@@ -352,7 +428,7 @@ index 09a119049c..abf53f1b9d 100644
gtk_tree_model_get (model, &iter,
MODEL_COL_FILE, &file,
-@@ -2523,10 +2591,18 @@ file_list_query_tooltip_cb (GtkWidget *widget,
+@@ -2473,10 +2565,18 @@ file_list_query_tooltip_cb (GtkWidget *widget,
filename = g_file_get_path (file);
gtk_tooltip_set_text (tooltip, filename);
@@ -375,7 +451,7 @@ index 09a119049c..abf53f1b9d 100644
g_free (filename);
g_object_unref (file);
gtk_tree_path_free (path);
-@@ -2542,8 +2618,8 @@ set_icon_cell_renderer_fixed_size (GtkFileChooserWidget *impl)
+@@ -2492,8 +2592,8 @@ set_icon_cell_renderer_fixed_size (GtkFileChooserWidget *impl)
gtk_cell_renderer_get_padding (priv->list_pixbuf_renderer, &xpad, &ypad);
gtk_cell_renderer_set_fixed_size (priv->list_pixbuf_renderer,
@@ -386,7 +462,7 @@ index 09a119049c..abf53f1b9d 100644
}
static gboolean
-@@ -2827,7 +2903,7 @@ location_mode_set (GtkFileChooserWidget *impl,
+@@ -2777,7 +2877,7 @@ location_mode_set (GtkFileChooserWidget *impl,
location_switch_to_path_bar (impl);
if (switch_to_file_list)
@@ -395,7 +471,7 @@ index 09a119049c..abf53f1b9d 100644
break;
-@@ -2898,6 +2974,117 @@ location_toggle_popup_handler (GtkFileChooserWidget *impl)
+@@ -2848,6 +2948,118 @@ location_toggle_popup_handler (GtkFileChooserWidget *impl)
}
}
@@ -421,6 +497,7 @@ index 09a119049c..abf53f1b9d 100644
+ GtkFileChooserWidgetPrivate *priv = impl->priv;
+ GtkWidget *old_view = NULL;
+ ViewMode old_view_mode = priv->view_mode;
++ priv->browse_files_popover = NULL;
+
+ if (old_view_mode == view_mode)
+ return;
@@ -513,7 +590,7 @@ index 09a119049c..abf53f1b9d 100644
static void
gtk_file_chooser_widget_constructed (GObject *object)
{
-@@ -2933,7 +3120,6 @@ set_extra_widget (GtkFileChooserWidget *impl,
+@@ -2883,7 +3095,6 @@ set_extra_widget (GtkFileChooserWidget *impl,
if (extra_widget)
{
g_object_ref (extra_widget);
@@ -521,7 +598,7 @@ index 09a119049c..abf53f1b9d 100644
gtk_widget_show (extra_widget);
}
-@@ -3006,18 +3192,11 @@ set_select_multiple (GtkFileChooserWidget *impl,
+@@ -2956,18 +3167,11 @@ set_select_multiple (GtkFileChooserWidget *impl,
gboolean property_notify)
{
GtkFileChooserWidgetPrivate *priv = impl->priv;
@@ -541,7 +618,7 @@ index 09a119049c..abf53f1b9d 100644
priv->select_multiple = select_multiple;
g_object_notify (G_OBJECT (impl), "select-multiple");
-@@ -3144,6 +3323,7 @@ operation_mode_set_enter_location (GtkFileChooserWidget *impl)
+@@ -3094,6 +3298,7 @@ operation_mode_set_enter_location (GtkFileChooserWidget *impl)
gtk_stack_set_visible_child_name (GTK_STACK (priv->browse_header_stack), "location");
gtk_revealer_set_reveal_child (GTK_REVEALER (priv->browse_header_revealer), TRUE);
location_bar_update (impl);
@@ -549,7 +626,7 @@ index 09a119049c..abf53f1b9d 100644
gtk_widget_set_sensitive (priv->filter_combo, TRUE);
location_mode_set (impl, LOCATION_MODE_FILENAME_ENTRY);
}
-@@ -3173,7 +3353,7 @@ operation_mode_set_search (GtkFileChooserWidget *impl)
+@@ -3123,7 +3328,7 @@ operation_mode_set_search (GtkFileChooserWidget *impl)
visible_widget = gtk_stack_get_visible_child (GTK_STACK (priv->browse_files_stack));
if (visible_widget != priv->places_view &&
@@ -558,7 +635,7 @@ index 09a119049c..abf53f1b9d 100644
{
gtk_stack_set_visible_child_name (GTK_STACK (priv->browse_files_stack), "list");
}
-@@ -3298,6 +3478,12 @@ update_appearance (GtkFileChooserWidget *impl)
+@@ -3248,6 +3453,12 @@ update_appearance (GtkFileChooserWidget *impl)
location_mode_set (impl, priv->location_mode);
}
@@ -571,7 +648,7 @@ index 09a119049c..abf53f1b9d 100644
if (priv->location_entry)
_gtk_file_chooser_entry_set_action (GTK_FILE_CHOOSER_ENTRY (priv->location_entry), priv->action);
-@@ -3306,7 +3492,7 @@ update_appearance (GtkFileChooserWidget *impl)
+@@ -3256,7 +3467,7 @@ update_appearance (GtkFileChooserWidget *impl)
/* This *is* needed; we need to redraw the file list because the "sensitivity"
* of files may change depending whether we are in a file or folder-only mode.
*/
@@ -580,7 +657,7 @@ index 09a119049c..abf53f1b9d 100644
emit_default_size_changed (impl);
}
-@@ -3739,14 +3925,28 @@ change_icon_theme (GtkFileChooserWidget *impl)
+@@ -3686,14 +3897,28 @@ change_icon_theme (GtkFileChooserWidget *impl)
profile_start ("start", NULL);
if (gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &width, &height))
@@ -613,7 +690,7 @@ index 09a119049c..abf53f1b9d 100644
gtk_widget_queue_resize (priv->browse_files_tree_view);
profile_end ("end", NULL);
-@@ -3847,7 +4047,7 @@ set_sort_column (GtkFileChooserWidget *impl)
+@@ -3794,7 +4019,7 @@ set_sort_column (GtkFileChooserWidget *impl)
GtkFileChooserWidgetPrivate *priv = impl->priv;
GtkTreeSortable *sortable;
@@ -622,7 +699,7 @@ index 09a119049c..abf53f1b9d 100644
/* can happen when we're still populating the model */
if (sortable == NULL)
-@@ -3862,11 +4062,12 @@ static void
+@@ -3809,11 +4034,12 @@ static void
settings_load (GtkFileChooserWidget *impl)
{
GtkFileChooserWidgetPrivate *priv = impl->priv;
@@ -636,7 +713,7 @@ index 09a119049c..abf53f1b9d 100644
GtkSortType sort_order;
StartupMode startup_mode;
gint sidebar_width;
-@@ -3874,6 +4075,8 @@ settings_load (GtkFileChooserWidget *impl)
+@@ -3821,6 +4047,8 @@ settings_load (GtkFileChooserWidget *impl)
settings = _gtk_file_chooser_get_settings_for_widget (GTK_WIDGET (impl));
@@ -645,7 +722,7 @@ index 09a119049c..abf53f1b9d 100644
show_hidden = g_settings_get_boolean (settings, SETTINGS_KEY_SHOW_HIDDEN);
show_size_column = g_settings_get_boolean (settings, SETTINGS_KEY_SHOW_SIZE_COLUMN);
sort_column = g_settings_get_enum (settings, SETTINGS_KEY_SORT_COLUMN);
-@@ -3883,10 +4086,16 @@ settings_load (GtkFileChooserWidget *impl)
+@@ -3830,10 +4058,16 @@ settings_load (GtkFileChooserWidget *impl)
sort_directories_first = g_settings_get_boolean (settings, SETTINGS_KEY_SORT_DIRECTORIES_FIRST);
date_format = g_settings_get_enum (settings, SETTINGS_KEY_DATE_FORMAT);
@@ -663,7 +740,7 @@ index 09a119049c..abf53f1b9d 100644
priv->sort_column = sort_column;
priv->sort_order = sort_order;
-@@ -3914,6 +4123,8 @@ settings_save (GtkFileChooserWidget *impl)
+@@ -3861,6 +4095,8 @@ settings_save (GtkFileChooserWidget *impl)
/* All the other state */
g_settings_set_enum (settings, SETTINGS_KEY_LOCATION_MODE, priv->location_mode);
@@ -672,7 +749,7 @@ index 09a119049c..abf53f1b9d 100644
g_settings_set_boolean (settings, SETTINGS_KEY_SHOW_HIDDEN,
gtk_file_chooser_get_show_hidden (GTK_FILE_CHOOSER (impl)));
g_settings_set_boolean (settings, SETTINGS_KEY_SHOW_SIZE_COLUMN, priv->show_size_column);
-@@ -4388,10 +4599,14 @@ load_set_model (GtkFileChooserWidget *impl)
+@@ -4335,10 +4571,14 @@ load_set_model (GtkFileChooserWidget *impl)
g_assert (priv->browse_files_model != NULL);
profile_msg (" gtk_tree_view_set_model start", NULL);
@@ -691,7 +768,7 @@ index 09a119049c..abf53f1b9d 100644
set_sort_column (impl);
profile_msg (" gtk_tree_view_set_model end", NULL);
priv->list_sort_ascending = TRUE;
-@@ -4471,7 +4686,7 @@ browse_files_select_first_row (GtkFileChooserWidget *impl)
+@@ -4418,7 +4658,7 @@ browse_files_select_first_row (GtkFileChooserWidget *impl)
GtkTreeIter dummy_iter;
GtkTreeModel *tree_model;
@@ -700,7 +777,7 @@ index 09a119049c..abf53f1b9d 100644
if (!tree_model)
return;
-@@ -4490,8 +4705,7 @@ browse_files_select_first_row (GtkFileChooserWidget *impl)
+@@ -4437,8 +4677,7 @@ browse_files_select_first_row (GtkFileChooserWidget *impl)
*/
priv->auto_selecting_first_row = TRUE;
@@ -710,7 +787,7 @@ index 09a119049c..abf53f1b9d 100644
priv->auto_selecting_first_row = FALSE;
}
gtk_tree_path_free (path);
-@@ -4517,7 +4731,13 @@ center_selected_row_foreach_cb (GtkTreeModel *model,
+@@ -4464,7 +4703,13 @@ center_selected_row_foreach_cb (GtkTreeModel *model,
if (closure->already_centered)
return;
@@ -725,7 +802,7 @@ index 09a119049c..abf53f1b9d 100644
closure->already_centered = TRUE;
}
-@@ -4525,15 +4745,12 @@ center_selected_row_foreach_cb (GtkTreeModel *model,
+@@ -4472,15 +4717,12 @@ center_selected_row_foreach_cb (GtkTreeModel *model,
static void
browse_files_center_selected_row (GtkFileChooserWidget *impl)
{
@@ -742,7 +819,7 @@ index 09a119049c..abf53f1b9d 100644
}
static gboolean
-@@ -4541,7 +4758,6 @@ show_and_select_files (GtkFileChooserWidget *impl,
+@@ -4488,7 +4730,6 @@ show_and_select_files (GtkFileChooserWidget *impl,
GSList *files)
{
GtkFileChooserWidgetPrivate *priv = impl->priv;
@@ -750,7 +827,7 @@ index 09a119049c..abf53f1b9d 100644
GtkFileSystemModel *fsmodel;
gboolean enabled_hidden, removed_filters;
gboolean selected_a_file;
-@@ -4550,8 +4766,7 @@ show_and_select_files (GtkFileChooserWidget *impl,
+@@ -4497,8 +4738,7 @@ show_and_select_files (GtkFileChooserWidget *impl,
g_assert (priv->load_state == LOAD_FINISHED);
g_assert (priv->browse_files_model != NULL);
@@ -760,7 +837,7 @@ index 09a119049c..abf53f1b9d 100644
g_assert (fsmodel == priv->browse_files_model);
-@@ -4606,11 +4821,10 @@ show_and_select_files (GtkFileChooserWidget *impl,
+@@ -4553,11 +4793,10 @@ show_and_select_files (GtkFileChooserWidget *impl,
{
GtkTreePath *path;
@@ -774,7 +851,7 @@ index 09a119049c..abf53f1b9d 100644
gtk_tree_path_free (path);
selected_a_file = TRUE;
-@@ -4731,12 +4945,14 @@ stop_loading_and_clear_list_model (GtkFileChooserWidget *impl,
+@@ -4678,12 +4917,14 @@ stop_loading_and_clear_list_model (GtkFileChooserWidget *impl,
{
GtkFileChooserWidgetPrivate *priv = impl->priv;
@@ -790,7 +867,7 @@ index 09a119049c..abf53f1b9d 100644
}
/* Replace 'target' with 'replacement' in the input string. */
-@@ -4914,6 +5130,18 @@ file_system_model_got_thumbnail (GObject *object,
+@@ -4861,6 +5102,18 @@ file_system_model_got_thumbnail (GObject *object,
gdk_threads_leave ();
}
@@ -809,7 +886,7 @@ index 09a119049c..abf53f1b9d 100644
static gboolean
file_system_model_set (GtkFileSystemModel *model,
GFile *file,
-@@ -4973,12 +5201,15 @@ file_system_model_set (GtkFileSystemModel *model,
+@@ -4920,12 +5173,15 @@ file_system_model_set (GtkFileSystemModel *model,
else
g_value_set_boolean (value, TRUE);
break;
@@ -827,7 +904,7 @@ index 09a119049c..abf53f1b9d 100644
}
else
{
-@@ -5032,6 +5263,76 @@ file_system_model_set (GtkFileSystemModel *model,
+@@ -4979,6 +5235,76 @@ file_system_model_set (GtkFileSystemModel *model,
else
g_value_set_boxed (value, NULL);
break;
@@ -904,7 +981,7 @@ index 09a119049c..abf53f1b9d 100644
case MODEL_COL_SIZE:
g_value_set_int64 (value, info ? g_file_info_get_size (info) : 0);
break;
-@@ -5214,7 +5515,6 @@ static void
+@@ -5161,7 +5487,6 @@ static void
update_chooser_entry (GtkFileChooserWidget *impl)
{
GtkFileChooserWidgetPrivate *priv = impl->priv;
@@ -912,7 +989,7 @@ index 09a119049c..abf53f1b9d 100644
struct update_chooser_entry_selected_foreach_closure closure;
/* no need to update the file chooser's entry if there's no entry */
-@@ -5231,9 +5531,8 @@ update_chooser_entry (GtkFileChooserWidget *impl)
+@@ -5178,9 +5503,8 @@ update_chooser_entry (GtkFileChooserWidget *impl)
g_assert (priv->location_entry != NULL);
@@ -923,7 +1000,7 @@ index 09a119049c..abf53f1b9d 100644
if (closure.num_selected == 0)
{
-@@ -5730,19 +6029,15 @@ gtk_file_chooser_widget_unselect_file (GtkFileChooser *chooser,
+@@ -5677,19 +6001,15 @@ gtk_file_chooser_widget_unselect_file (GtkFileChooser *chooser,
{
GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser);
GtkFileChooserWidgetPrivate *priv = impl->priv;
@@ -947,7 +1024,7 @@ index 09a119049c..abf53f1b9d 100644
}
static gboolean
-@@ -5753,12 +6048,9 @@ maybe_select (GtkTreeModel *model,
+@@ -5700,12 +6020,9 @@ maybe_select (GtkTreeModel *model,
{
GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (data);
GtkFileChooserWidgetPrivate *priv = impl->priv;
@@ -960,7 +1037,7 @@ index 09a119049c..abf53f1b9d 100644
gtk_tree_model_get (model, iter,
MODEL_COL_IS_FOLDER, &is_folder,
MODEL_COL_IS_SENSITIVE, &is_sensitive,
-@@ -5767,9 +6059,9 @@ maybe_select (GtkTreeModel *model,
+@@ -5714,9 +6031,9 @@ maybe_select (GtkTreeModel *model,
if (is_sensitive &&
((is_folder && priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) ||
(!is_folder && priv->action == GTK_FILE_CHOOSER_ACTION_OPEN)))
@@ -972,7 +1049,7 @@ index 09a119049c..abf53f1b9d 100644
return FALSE;
}
-@@ -5785,8 +6077,15 @@ gtk_file_chooser_widget_select_all (GtkFileChooser *chooser)
+@@ -5732,8 +6049,15 @@ gtk_file_chooser_widget_select_all (GtkFileChooser *chooser)
{
GtkTreeSelection *selection;
@@ -990,7 +1067,7 @@ index 09a119049c..abf53f1b9d 100644
return;
}
-@@ -5799,10 +6098,7 @@ static void
+@@ -5746,10 +6070,7 @@ static void
gtk_file_chooser_widget_unselect_all (GtkFileChooser *chooser)
{
GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser);
@@ -1002,7 +1079,7 @@ index 09a119049c..abf53f1b9d 100644
pending_select_files_free (impl);
}
-@@ -5958,15 +6254,13 @@ gtk_file_chooser_widget_get_files (GtkFileChooser *chooser)
+@@ -5905,15 +6226,13 @@ gtk_file_chooser_widget_get_files (GtkFileChooser *chooser)
current_focus = NULL;
file_list_seen = FALSE;
@@ -1021,7 +1098,7 @@ index 09a119049c..abf53f1b9d 100644
/* If there is no selection in the file list, we probably have this situation:
*
-@@ -6000,7 +6294,7 @@ gtk_file_chooser_widget_get_files (GtkFileChooser *chooser)
+@@ -5947,7 +6266,7 @@ gtk_file_chooser_widget_get_files (GtkFileChooser *chooser)
else
return NULL;
}
@@ -1030,7 +1107,7 @@ index 09a119049c..abf53f1b9d 100644
goto file_list;
else if (priv->location_entry && priv->toplevel_last_focus_widget == priv->location_entry)
goto file_entry;
-@@ -6278,8 +6572,6 @@ switch_folder_foreach_cb (GtkTreeModel *model,
+@@ -6225,8 +6544,6 @@ switch_folder_foreach_cb (GtkTreeModel *model,
static void
switch_to_selected_folder (GtkFileChooserWidget *impl)
{
@@ -1039,7 +1116,7 @@ index 09a119049c..abf53f1b9d 100644
struct switch_folder_closure closure;
/* We do this with foreach() rather than get_selected() as we may be in
-@@ -6290,8 +6582,7 @@ switch_to_selected_folder (GtkFileChooserWidget *impl)
+@@ -6237,8 +6554,7 @@ switch_to_selected_folder (GtkFileChooserWidget *impl)
closure.file = NULL;
closure.num_selected = 0;
@@ -1049,7 +1126,7 @@ index 09a119049c..abf53f1b9d 100644
g_assert (closure.file && closure.num_selected == 1);
-@@ -6309,19 +6600,33 @@ get_selected_file_info_from_file_list (GtkFileChooserWidget *impl,
+@@ -6256,19 +6572,33 @@ get_selected_file_info_from_file_list (GtkFileChooserWidget *impl,
GtkTreeSelection *selection;
GtkTreeIter iter;
GFileInfo *info;
@@ -1091,7 +1168,7 @@ index 09a119049c..abf53f1b9d 100644
return info;
}
-@@ -6814,7 +7119,7 @@ gtk_file_chooser_widget_should_respond (GtkFileChooserEmbed *chooser_embed)
+@@ -6761,7 +7091,7 @@ gtk_file_chooser_widget_should_respond (GtkFileChooserEmbed *chooser_embed)
current_focus = gtk_window_get_focus (GTK_WINDOW (toplevel));
@@ -1100,7 +1177,7 @@ index 09a119049c..abf53f1b9d 100644
{
/* The following array encodes what we do based on the priv->action and the
* number of files selected.
-@@ -7061,7 +7366,7 @@ gtk_file_chooser_widget_initial_focus (GtkFileChooserEmbed *chooser_embed)
+@@ -7008,7 +7338,7 @@ gtk_file_chooser_widget_initial_focus (GtkFileChooserEmbed *chooser_embed)
{
if (priv->location_mode == LOCATION_MODE_PATH_BAR
|| priv->operation_mode == OPERATION_MODE_RECENT)
@@ -1109,7 +1186,7 @@ index 09a119049c..abf53f1b9d 100644
else
widget = priv->location_entry;
}
-@@ -7099,45 +7404,24 @@ selected_foreach_get_file_cb (GtkTreeModel *model,
+@@ -7046,45 +7376,24 @@ selected_foreach_get_file_cb (GtkTreeModel *model,
static GSList *
get_selected_files (GtkFileChooserWidget *impl)
{
@@ -1157,7 +1234,7 @@ index 09a119049c..abf53f1b9d 100644
result = g_slist_reverse (result);
return result;
-@@ -7208,6 +7492,7 @@ search_engine_finished_cb (GtkSearchEngine *engine,
+@@ -7155,6 +7464,7 @@ search_engine_finished_cb (GtkSearchEngine *engine,
gtk_stack_set_visible_child_name (GTK_STACK (priv->browse_files_stack), "empty");
gtk_entry_grab_focus_without_selecting (GTK_ENTRY (priv->search_entry));
}
@@ -1165,7 +1242,7 @@ index 09a119049c..abf53f1b9d 100644
}
static void
-@@ -7233,7 +7518,7 @@ search_clear_model (GtkFileChooserWidget *impl,
+@@ -7180,7 +7490,7 @@ search_clear_model (GtkFileChooserWidget *impl,
if (remove &&
gtk_tree_view_get_model (GTK_TREE_VIEW (priv->browse_files_tree_view)) == GTK_TREE_MODEL (priv->search_model))
@@ -1174,7 +1251,7 @@ index 09a119049c..abf53f1b9d 100644
g_clear_object (&priv->search_model);
}
-@@ -7442,7 +7727,7 @@ recent_clear_model (GtkFileChooserWidget *impl,
+@@ -7389,7 +7699,7 @@ recent_clear_model (GtkFileChooserWidget *impl,
return;
if (remove)
@@ -1183,7 +1260,7 @@ index 09a119049c..abf53f1b9d 100644
g_set_object (&priv->recent_model, NULL);
}
-@@ -7495,8 +7780,7 @@ recent_idle_cleanup (gpointer data)
+@@ -7442,8 +7752,7 @@ recent_idle_cleanup (gpointer data)
GtkFileChooserWidget *impl = load_data->impl;
GtkFileChooserWidgetPrivate *priv = impl->priv;
@@ -1193,7 +1270,7 @@ index 09a119049c..abf53f1b9d 100644
gtk_tree_view_set_search_column (GTK_TREE_VIEW (priv->browse_files_tree_view), -1);
gtk_tree_view_column_set_sort_column_id (priv->list_name_column, -1);
-@@ -7623,12 +7907,10 @@ static gboolean
+@@ -7570,12 +7879,10 @@ static gboolean
recent_should_respond (GtkFileChooserWidget *impl)
{
GtkFileChooserWidgetPrivate *priv = impl->priv;
@@ -1207,7 +1284,7 @@ index 09a119049c..abf53f1b9d 100644
}
static void
-@@ -7688,29 +7970,41 @@ check_preview_change (GtkFileChooserWidget *impl)
+@@ -7635,29 +7942,41 @@ check_preview_change (GtkFileChooserWidget *impl)
GtkTreeModel *model;
GtkTreeSelection *selection;
@@ -1265,7 +1342,7 @@ index 09a119049c..abf53f1b9d 100644
{
GtkTreeIter iter;
-@@ -7794,15 +8088,13 @@ list_select_func (GtkTreeSelection *selection,
+@@ -7741,15 +8060,13 @@ list_select_func (GtkTreeSelection *selection,
return TRUE;
}
@@ -1284,7 +1361,7 @@ index 09a119049c..abf53f1b9d 100644
if (priv->location_entry)
update_chooser_entry (impl);
-@@ -7826,16 +8118,35 @@ list_row_activated (GtkTreeView *tree_view,
+@@ -7773,16 +8090,35 @@ list_row_activated (GtkTreeView *tree_view,
GtkTreePath *path,
GtkTreeViewColumn *column,
GtkFileChooserWidget *impl)
@@ -1323,7 +1400,7 @@ index 09a119049c..abf53f1b9d 100644
if (!gtk_tree_model_get_iter (model, &iter, path))
return;
-@@ -7855,7 +8166,7 @@ list_row_activated (GtkTreeView *tree_view,
+@@ -7802,7 +8138,7 @@ list_row_activated (GtkTreeView *tree_view,
priv->action == GTK_FILE_CHOOSER_ACTION_SAVE)
g_signal_emit_by_name (impl, "file-activated");
@@ -1332,7 +1409,7 @@ index 09a119049c..abf53f1b9d 100644
if (file)
g_object_unref (file);
-@@ -7886,10 +8197,13 @@ static void
+@@ -7833,10 +8169,13 @@ static void
update_cell_renderer_attributes (GtkFileChooserWidget *impl)
{
GtkFileChooserWidgetPrivate *priv = impl->priv;
@@ -1347,7 +1424,7 @@ index 09a119049c..abf53f1b9d 100644
"sensitive", MODEL_COL_IS_SENSITIVE,
NULL);
gtk_tree_view_column_set_attributes (priv->list_name_column,
-@@ -8465,16 +8779,20 @@ gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class)
+@@ -8412,16 +8751,20 @@ gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class)
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, browse_widgets_hpaned);
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, browse_files_stack);
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, places_sidebar);
@@ -1369,7 +1446,7 @@ index 09a119049c..abf53f1b9d 100644
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, preview_box);
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, extra_align);
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, extra_and_filters);
-@@ -8491,6 +8809,7 @@ gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class)
+@@ -8438,6 +8781,7 @@ gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class)
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, list_size_renderer);
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, list_location_column);
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, list_location_renderer);
@@ -1377,7 +1454,7 @@ index 09a119049c..abf53f1b9d 100644
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, new_folder_name_entry);
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, new_folder_create_button);
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, new_folder_error_label);
-@@ -8500,6 +8819,7 @@ gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class)
+@@ -8447,6 +8791,7 @@ gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class)
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, rename_file_error_label);
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, rename_file_popover);
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, remote_warning_bar);
@@ -1385,7 +1462,7 @@ index 09a119049c..abf53f1b9d 100644
/* And a *lot* of callbacks to bind ... */
gtk_widget_class_bind_template_callback (widget_class, browse_files_key_press_event_cb);
-@@ -8514,6 +8834,10 @@ gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class)
+@@ -8461,6 +8806,10 @@ gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class)
gtk_widget_class_bind_template_callback (widget_class, file_list_drag_end_cb);
gtk_widget_class_bind_template_callback (widget_class, list_selection_changed);
gtk_widget_class_bind_template_callback (widget_class, list_cursor_changed);
@@ -1396,7 +1473,7 @@ index 09a119049c..abf53f1b9d 100644
gtk_widget_class_bind_template_callback (widget_class, filter_combo_changed);
gtk_widget_class_bind_template_callback (widget_class, path_bar_clicked);
gtk_widget_class_bind_template_callback (widget_class, places_sidebar_open_location_cb);
-@@ -8560,6 +8884,18 @@ post_process_ui (GtkFileChooserWidget *impl)
+@@ -8507,6 +8856,18 @@ post_process_ui (GtkFileChooserWidget *impl)
GDK_ACTION_COPY | GDK_ACTION_MOVE);
gtk_drag_dest_add_uri_targets (impl->priv->browse_files_tree_view);
@@ -1415,7 +1492,7 @@ index 09a119049c..abf53f1b9d 100644
/* File browser treemodel columns are shared between GtkFileChooser implementations,
* so we don't set cell renderer attributes in GtkBuilder, but rather keep that
* in code.
-@@ -8591,6 +8927,8 @@ post_process_ui (GtkFileChooserWidget *impl)
+@@ -8538,6 +8899,8 @@ post_process_ui (GtkFileChooserWidget *impl)
* that priv->icon_size be already setup.
*/
set_icon_cell_renderer_fixed_size (impl);
@@ -1424,7 +1501,7 @@ index 09a119049c..abf53f1b9d 100644
gtk_popover_set_default_widget (GTK_POPOVER (impl->priv->new_folder_popover), impl->priv->new_folder_create_button);
gtk_popover_set_default_widget (GTK_POPOVER (impl->priv->rename_file_popover), impl->priv->rename_file_rename_button);
-@@ -8636,7 +8974,8 @@ gtk_file_chooser_widget_init (GtkFileChooserWidget *impl)
+@@ -8583,7 +8946,8 @@ gtk_file_chooser_widget_init (GtkFileChooserWidget *impl)
priv->select_multiple = FALSE;
priv->show_hidden = FALSE;
priv->show_size_column = TRUE;
@@ -1434,7 +1511,7 @@ index 09a119049c..abf53f1b9d 100644
priv->load_state = LOAD_EMPTY;
priv->reload_state = RELOAD_EMPTY;
priv->pending_select_files = NULL;
-@@ -8647,6 +8986,7 @@ gtk_file_chooser_widget_init (GtkFileChooserWidget *impl)
+@@ -8594,6 +8958,7 @@ gtk_file_chooser_widget_init (GtkFileChooserWidget *impl)
priv->recent_manager = gtk_recent_manager_get_default ();
priv->create_folders = TRUE;
priv->auto_selecting_first_row = FALSE;
@@ -1442,7 +1519,7 @@ index 09a119049c..abf53f1b9d 100644
/* Ensure GTK+ private types used by the template
* definition before calling gtk_widget_init_template()
-@@ -8694,6 +9034,258 @@ gtk_file_chooser_widget_new (GtkFileChooserAction action)
+@@ -8641,6 +9006,258 @@ gtk_file_chooser_widget_new (GtkFileChooserAction action)
NULL);
}
@@ -1701,7 +1778,7 @@ index 09a119049c..abf53f1b9d 100644
static void
gtk_file_chooser_widget_add_choice (GtkFileChooser *chooser,
const char *id,
-@@ -8746,7 +9338,7 @@ gtk_file_chooser_widget_add_choice (GtkFileChooser *chooser,
+@@ -8693,7 +9310,7 @@ gtk_file_chooser_widget_add_choice (GtkFileChooser *chooser,
widget = check;
}
@@ -1710,7 +1787,7 @@ index 09a119049c..abf53f1b9d 100644
gtk_container_add (GTK_CONTAINER (priv->choice_box), widget);
}
-@@ -8813,4 +9405,3 @@ gtk_file_chooser_widget_get_choice (GtkFileChooser *chooser,
+@@ -8760,4 +9377,3 @@ gtk_file_chooser_widget_get_choice (GtkFileChooser *chooser,
return NULL;
}
@@ -1753,7 +1830,7 @@ index c3753f2f6a..e35a9c7cb0 100644
<default>false</default>
<summary>Show hidden files</summary>
diff --git a/gtk/ui/gtkfilechooserwidget.ui b/gtk/ui/gtkfilechooserwidget.ui
-index ef227bdc70..5d1f6d9d33 100644
+index ef227bdc70..ee8d0e82f0 100644
--- a/gtk/ui/gtkfilechooserwidget.ui
+++ b/gtk/ui/gtkfilechooserwidget.ui
@@ -8,6 +8,56 @@
@@ -1813,7 +1890,7 @@ index ef227bdc70..5d1f6d9d33 100644
<child>
<object class="GtkPaned" id="browse_widgets_hpaned">
<property name="visible">1</property>
-@@ -155,49 +205,50 @@
+@@ -155,98 +205,160 @@
<property name="visible">1</property>
<property name="orientation">vertical</property>
<child>
@@ -1856,9 +1933,6 @@ index ef227bdc70..5d1f6d9d33 100644
- <property name="title" translatable="yes">Name</property>
- <property name="resizable">1</property>
- <property name="expand">1</property>
-- <child>
-- <object class="GtkCellRendererPixbuf" id="list_pixbuf_renderer">
-- <property name="xpad">6</property>
+ <object class="GtkTreeView" id="browse_files_tree_view">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
@@ -1876,12 +1950,11 @@ index ef227bdc70..5d1f6d9d33 100644
+ <child internal-child="selection">
+ <object class="GtkTreeSelection" id="treeview-selection2">
+ <signal name="changed" handler="list_selection_changed" swapped="no"/>
- </object>
- </child>
++ </object>
++ </child>
<child>
-- <object class="GtkCellRendererText" id="list_name_renderer">
-- <property name="width-chars">10</property>
-- <property name="ellipsize">end</property>
+- <object class="GtkCellRendererPixbuf" id="list_pixbuf_renderer">
+- <property name="xpad">6</property>
+ <object class="GtkTreeViewColumn" id="list_name_column">
+ <property name="resizable">True</property>
+ <property name="title" translatable="yes">Name</property>
@@ -1899,11 +1972,79 @@ index ef227bdc70..5d1f6d9d33 100644
+ </child>
</object>
</child>
+ <child>
+- <object class="GtkCellRendererText" id="list_name_renderer">
+- <property name="width-chars">10</property>
+- <property name="ellipsize">end</property>
++ <object class="GtkTreeViewColumn" id="list_location_column">
++ <property name="title" translatable="yes">Location</property>
++ <property name="resizable">1</property>
++ <property name="visible">0</property>
++ <property name="expand">1</property>
++ <child>
++ <object class="GtkCellRendererText" id="list_location_renderer">
++ <property name="xalign">0</property>
++ <property name="width-chars">10</property>
++ <property name="ellipsize">start</property>
++ <property name="xpad">6</property>
++ </object>
++ </child>
+ </object>
+ </child>
+- </object>
+- </child>
+- <child>
+- <object class="GtkTreeViewColumn" id="list_location_column">
+- <property name="title" translatable="yes">Location</property>
+- <property name="resizable">1</property>
+- <property name="visible">0</property>
+- <property name="expand">1</property>
+ <child>
+- <object class="GtkCellRendererText" id="list_location_renderer">
+- <property name="xalign">0</property>
+- <property name="width-chars">10</property>
+- <property name="ellipsize">start</property>
+- <property name="xpad">6</property>
++ <object class="GtkTreeViewColumn" id="list_size_column">
++ <property name="title" translatable="yes">Size</property>
++ <property name="sizing">fixed</property>
++ <child>
++ <object class="GtkCellRendererText" id="list_size_renderer">
++ <property name="xalign">0</property>
++ <property name="xpad">6</property>
++ </object>
++ </child>
+ </object>
+ </child>
+- </object>
+- </child>
+- <child>
+- <object class="GtkTreeViewColumn" id="list_size_column">
+- <property name="title" translatable="yes">Size</property>
+- <property name="sizing">fixed</property>
+ <child>
+- <object class="GtkCellRendererText" id="list_size_renderer">
+- <property name="xalign">0</property>
+- <property name="xpad">6</property>
++ <object class="GtkTreeViewColumn" id="list_time_column">
++ <property name="title" translatable="yes">Modified</property>
++ <property name="sizing">fixed</property>
++ <child>
++ <object class="GtkCellRendererText" id="list_date_renderer">
++ <property name="xpad">6</property>
++ </object>
++ </child>
++ <child>
++ <object class="GtkCellRendererText" id="list_time_renderer">
++ <property name="xpad">6</property>
++ </object>
++ </child>
+ </object>
+ </child>
</object>
-@@ -248,6 +299,67 @@
</child>
- </object>
- </child>
++ </object>
++ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="label_list_view">
+ <property name="visible">True</property>
@@ -1920,7 +2061,10 @@ index ef227bdc70..5d1f6d9d33 100644
+ <property name="can_focus">True</property>
+ <property name="shadow_type">in</property>
+ <property name="hscrollbar-policy">GTK_POLICY_AUTOMATIC</property>
-+ <child>
+ <child>
+- <object class="GtkTreeViewColumn" id="list_time_column">
+- <property name="title" translatable="yes">Modified</property>
+- <property name="sizing">fixed</property>
+ <object class="GtkIconView" id="browse_files_icon_view">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
@@ -1934,16 +2078,21 @@ index ef227bdc70..5d1f6d9d33 100644
+ <signal name="popup-menu" handler="list_popup_menu_cb" swapped="no"/>
+ <signal name="query-tooltip" handler="file_list_query_tooltip_cb" swapped="no"/>
+ <signal name="selection-changed" handler="list_selection_changed" swapped="no"/>
-+ <child>
+ <child>
+- <object class="GtkCellRendererText" id="list_date_renderer">
+- <property name="xpad">6</property>
+ <object class="GtkCellRendererText" id="list_icon_renderer">
-+ </object>
-+ </child>
-+ <child>
+ </object>
+ </child>
+ <child>
+- <object class="GtkCellRendererText" id="list_time_renderer">
+- <property name="xpad">6</property>
+- </object>
+ <object class="GtkCellRendererPixbuf" id="icon_view_pixbuf_renderer"/>
-+ </child>
-+ </object>
-+ </child>
-+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
@@ -1964,10 +2113,9 @@ index ef227bdc70..5d1f6d9d33 100644
+ </child>
+ <child type="tab">
+ <placeholder/>
-+ </child>
+ </child>
</object>
<packing>
- <property name="expand">1</property>
@@ -365,7 +477,7 @@
</object>
<packing>