forked from AuroraMiddleware/gtk
file chooser: Use access time for recent files
Use access time for sorting the recent files, and show it in the list instead of mtime.
This commit is contained in:
parent
33b5c26f41
commit
412e33da16
@ -304,9 +304,12 @@ struct _GtkFileChooserWidgetPrivate {
|
||||
GtkTreeViewColumn *list_name_column;
|
||||
GtkCellRenderer *list_name_renderer;
|
||||
GtkCellRenderer *list_pixbuf_renderer;
|
||||
GtkTreeViewColumn *list_mtime_column;
|
||||
GtkTreeViewColumn *list_time_column;
|
||||
GtkCellRenderer *list_time_renderer;
|
||||
GtkTreeViewColumn *list_size_column;
|
||||
GtkCellRenderer *list_size_renderer;
|
||||
GtkTreeViewColumn *list_location_column;
|
||||
GtkCellRenderer *list_location_renderer;
|
||||
|
||||
guint location_changed_id;
|
||||
|
||||
@ -362,19 +365,20 @@ static guint signals[LAST_SIGNAL] = { 0 };
|
||||
|
||||
#define MODEL_ATTRIBUTES "standard::name,standard::type,standard::display-name," \
|
||||
"standard::is-hidden,standard::is-backup,standard::size," \
|
||||
"standard::content-type,time::modified,standard::target-uri"
|
||||
"standard::content-type,time::modified,time::access," \
|
||||
"standard::target-uri"
|
||||
enum {
|
||||
/* the first 3 must be these due to settings caching sort column */
|
||||
MODEL_COL_NAME,
|
||||
MODEL_COL_SIZE,
|
||||
MODEL_COL_MTIME,
|
||||
MODEL_COL_TIME,
|
||||
MODEL_COL_FILE,
|
||||
MODEL_COL_NAME_COLLATED,
|
||||
MODEL_COL_IS_FOLDER,
|
||||
MODEL_COL_IS_SENSITIVE,
|
||||
MODEL_COL_SURFACE,
|
||||
MODEL_COL_SIZE_TEXT,
|
||||
MODEL_COL_MTIME_TEXT,
|
||||
MODEL_COL_TIME_TEXT,
|
||||
MODEL_COL_LOCATION_TEXT,
|
||||
MODEL_COL_LOCATION_DIST,
|
||||
MODEL_COL_ELLIPSIZE,
|
||||
@ -386,14 +390,14 @@ enum {
|
||||
MODEL_COL_NUM_COLUMNS, \
|
||||
G_TYPE_STRING, /* MODEL_COL_NAME */ \
|
||||
G_TYPE_INT64, /* MODEL_COL_SIZE */ \
|
||||
G_TYPE_LONG, /* MODEL_COL_MTIME */ \
|
||||
G_TYPE_LONG, /* MODEL_COL_TIME */ \
|
||||
G_TYPE_FILE, /* MODEL_COL_FILE */ \
|
||||
G_TYPE_STRING, /* MODEL_COL_NAME_COLLATED */ \
|
||||
G_TYPE_BOOLEAN, /* MODEL_COL_IS_FOLDER */ \
|
||||
G_TYPE_BOOLEAN, /* MODEL_COL_IS_SENSITIVE */ \
|
||||
CAIRO_GOBJECT_TYPE_SURFACE, /* MODEL_COL_SURFACE */ \
|
||||
G_TYPE_STRING, /* MODEL_COL_SIZE_TEXT */ \
|
||||
G_TYPE_STRING, /* MODEL_COL_MTIME_TEXT */ \
|
||||
G_TYPE_STRING, /* MODEL_COL_TIME_TEXT */ \
|
||||
G_TYPE_STRING, /* MODEL_COL_LOCATION_TEXT */ \
|
||||
G_TYPE_INT, /* MODEL_COL_LOCATION_DIST */ \
|
||||
PANGO_TYPE_ELLIPSIZE_MODE /* MODEL_COL_ELLIPSIZE */
|
||||
@ -1986,7 +1990,7 @@ file_list_set_sort_column_ids (GtkFileChooserWidget *impl)
|
||||
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, MODEL_COL_NAME);
|
||||
gtk_tree_view_column_set_sort_column_id (priv->list_mtime_column, MODEL_COL_MTIME);
|
||||
gtk_tree_view_column_set_sort_column_id (priv->list_time_column, MODEL_COL_TIME);
|
||||
gtk_tree_view_column_set_sort_column_id (priv->list_size_column, MODEL_COL_SIZE);
|
||||
gtk_tree_view_column_set_sort_column_id (priv->list_location_column, MODEL_COL_LOCATION_TEXT);
|
||||
}
|
||||
@ -2629,6 +2633,7 @@ operation_mode_set_enter_location (GtkFileChooserWidget *impl)
|
||||
gtk_widget_set_sensitive (priv->filter_combo, TRUE);
|
||||
location_mode_set (impl, LOCATION_MODE_FILENAME_ENTRY);
|
||||
gtk_tree_view_column_set_visible (priv->list_location_column, FALSE);
|
||||
gtk_tree_view_column_set_title (priv->list_time_column, _("Modified"));
|
||||
}
|
||||
|
||||
static void
|
||||
@ -2642,6 +2647,7 @@ operation_mode_set_browse (GtkFileChooserWidget *impl)
|
||||
location_bar_update (impl);
|
||||
gtk_widget_set_sensitive (priv->filter_combo, TRUE);
|
||||
gtk_tree_view_column_set_visible (priv->list_location_column, FALSE);
|
||||
gtk_tree_view_column_set_title (priv->list_time_column, _("Modified"));
|
||||
}
|
||||
|
||||
static void
|
||||
@ -2658,8 +2664,8 @@ operation_mode_set_search (GtkFileChooserWidget *impl)
|
||||
search_setup_widgets (impl);
|
||||
gtk_entry_grab_focus_without_selecting (GTK_ENTRY (priv->search_entry));
|
||||
gtk_widget_set_sensitive (priv->filter_combo, FALSE);
|
||||
|
||||
gtk_tree_view_column_set_visible (priv->list_location_column, TRUE);
|
||||
gtk_tree_view_column_set_title (priv->list_time_column, _("Modified"));
|
||||
}
|
||||
|
||||
static void
|
||||
@ -2678,6 +2684,7 @@ operation_mode_set_recent (GtkFileChooserWidget *impl)
|
||||
g_object_unref (file);
|
||||
gtk_widget_set_sensitive (priv->filter_combo, TRUE);
|
||||
gtk_tree_view_column_set_visible (priv->list_location_column, TRUE);
|
||||
gtk_tree_view_column_set_title (priv->list_time_column, _("Accessed"));
|
||||
}
|
||||
|
||||
static void
|
||||
@ -3568,20 +3575,20 @@ size_sort_func (GtkTreeModel *model,
|
||||
}
|
||||
}
|
||||
|
||||
/* Sort callback for the mtime column */
|
||||
/* Sort callback for the time column */
|
||||
static gint
|
||||
mtime_sort_func (GtkTreeModel *model,
|
||||
GtkTreeIter *a,
|
||||
GtkTreeIter *b,
|
||||
gpointer user_data)
|
||||
time_sort_func (GtkTreeModel *model,
|
||||
GtkTreeIter *a,
|
||||
GtkTreeIter *b,
|
||||
gpointer user_data)
|
||||
{
|
||||
COMPARE_DIRECTORIES;
|
||||
else
|
||||
{
|
||||
glong ta, tb;
|
||||
|
||||
ta = g_value_get_long (_gtk_file_system_model_get_value (fs_model, a, MODEL_COL_MTIME));
|
||||
tb = g_value_get_long (_gtk_file_system_model_get_value (fs_model, b, MODEL_COL_MTIME));
|
||||
ta = g_value_get_long (_gtk_file_system_model_get_value (fs_model, a, MODEL_COL_TIME));
|
||||
tb = g_value_get_long (_gtk_file_system_model_get_value (fs_model, b, MODEL_COL_TIME));
|
||||
|
||||
return ta < tb ? -1 : (ta == tb ? 0 : 1);
|
||||
}
|
||||
@ -4050,7 +4057,7 @@ string_replace (const gchar *input,
|
||||
|
||||
static char *
|
||||
my_g_format_time_for_display (GtkFileChooserWidget *impl,
|
||||
glong secs)
|
||||
glong secs)
|
||||
{
|
||||
GDateTime *now, *time;
|
||||
GTimeSpan time_diff;
|
||||
@ -4262,19 +4269,22 @@ file_system_model_set (GtkFileSystemModel *model,
|
||||
else
|
||||
g_value_take_string (value, g_format_size (g_file_info_get_size (info)));
|
||||
break;
|
||||
case MODEL_COL_MTIME:
|
||||
case MODEL_COL_MTIME_TEXT:
|
||||
case MODEL_COL_TIME:
|
||||
case MODEL_COL_TIME_TEXT:
|
||||
{
|
||||
GTimeVal tv;
|
||||
glong time;
|
||||
if (info == NULL)
|
||||
break;
|
||||
g_file_info_get_modification_time (info, &tv);
|
||||
if (column == MODEL_COL_MTIME)
|
||||
g_value_set_long (value, tv.tv_sec);
|
||||
else if (tv.tv_sec == 0)
|
||||
if (priv->operation_mode == OPERATION_MODE_RECENT)
|
||||
time = (glong) g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_ACCESS);
|
||||
else
|
||||
time = (glong) g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_MODIFIED);
|
||||
if (column == MODEL_COL_TIME)
|
||||
g_value_set_long (value, time);
|
||||
else if (time == 0)
|
||||
g_value_set_static_string (value, _("Unknown"));
|
||||
else
|
||||
g_value_take_string (value, my_g_format_time_for_display (impl, tv.tv_sec));
|
||||
g_value_take_string (value, my_g_format_time_for_display (impl, time));
|
||||
break;
|
||||
}
|
||||
case MODEL_COL_ELLIPSIZE:
|
||||
@ -4393,7 +4403,7 @@ set_list_model (GtkFileChooserWidget *impl,
|
||||
profile_msg (" set sort function", NULL);
|
||||
gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (priv->browse_files_model), MODEL_COL_NAME, name_sort_func, impl, NULL);
|
||||
gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (priv->browse_files_model), MODEL_COL_SIZE, size_sort_func, impl, NULL);
|
||||
gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (priv->browse_files_model), MODEL_COL_MTIME, mtime_sort_func, impl, NULL);
|
||||
gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (priv->browse_files_model), MODEL_COL_TIME, time_sort_func, impl, NULL);
|
||||
gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (priv->browse_files_model), MODEL_COL_LOCATION_TEXT, location_sort_func, impl, NULL);
|
||||
gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (priv->browse_files_model), NULL, NULL, NULL);
|
||||
set_sort_column (impl);
|
||||
@ -6473,8 +6483,8 @@ search_setup_model (GtkFileChooserWidget *impl)
|
||||
name_sort_func,
|
||||
impl, NULL);
|
||||
gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (priv->search_model),
|
||||
MODEL_COL_MTIME,
|
||||
mtime_sort_func,
|
||||
MODEL_COL_TIME,
|
||||
time_sort_func,
|
||||
impl, NULL);
|
||||
gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (priv->search_model),
|
||||
MODEL_COL_SIZE,
|
||||
@ -6676,8 +6686,8 @@ recent_setup_model (GtkFileChooserWidget *impl)
|
||||
size_sort_func,
|
||||
impl, NULL);
|
||||
gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (priv->recent_model),
|
||||
MODEL_COL_MTIME,
|
||||
mtime_sort_func,
|
||||
MODEL_COL_TIME,
|
||||
time_sort_func,
|
||||
impl, NULL);
|
||||
gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (priv->recent_model),
|
||||
MODEL_COL_LOCATION_TEXT,
|
||||
@ -6702,7 +6712,7 @@ recent_idle_cleanup (gpointer data)
|
||||
gtk_tree_view_set_model (GTK_TREE_VIEW (priv->browse_files_tree_view),
|
||||
GTK_TREE_MODEL (priv->recent_model));
|
||||
file_list_set_sort_column_ids (impl);
|
||||
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (priv->recent_model), MODEL_COL_MTIME, GTK_SORT_DESCENDING);
|
||||
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (priv->recent_model), MODEL_COL_TIME, GTK_SORT_DESCENDING);
|
||||
|
||||
set_busy_cursor (impl, FALSE);
|
||||
|
||||
@ -7147,72 +7157,41 @@ static void
|
||||
update_cell_renderer_attributes (GtkFileChooserWidget *impl)
|
||||
{
|
||||
GtkFileChooserWidgetPrivate *priv = impl->priv;
|
||||
GtkTreeViewColumn *column;
|
||||
GtkCellRenderer *renderer;
|
||||
GList *walk, *list;
|
||||
|
||||
/* Keep the following column numbers in sync with create_file_list() */
|
||||
gtk_tree_view_column_set_attributes (priv->list_name_column,
|
||||
priv->list_pixbuf_renderer,
|
||||
"surface", MODEL_COL_SURFACE,
|
||||
"sensitive", MODEL_COL_IS_SENSITIVE,
|
||||
NULL);
|
||||
gtk_tree_view_column_set_attributes (priv->list_name_column,
|
||||
priv->list_name_renderer,
|
||||
"text", MODEL_COL_NAME,
|
||||
"ellipsize", MODEL_COL_ELLIPSIZE,
|
||||
"sensitive", MODEL_COL_IS_SENSITIVE,
|
||||
NULL);
|
||||
|
||||
/* name */
|
||||
column = gtk_tree_view_get_column (GTK_TREE_VIEW (priv->browse_files_tree_view), 0);
|
||||
list = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (column));
|
||||
for (walk = list; walk; walk = walk->next)
|
||||
{
|
||||
renderer = walk->data;
|
||||
if (GTK_IS_CELL_RENDERER_PIXBUF (renderer))
|
||||
{
|
||||
gtk_tree_view_column_set_attributes (column, renderer,
|
||||
"surface", MODEL_COL_SURFACE,
|
||||
NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_tree_view_column_set_attributes (column, renderer,
|
||||
"text", MODEL_COL_NAME,
|
||||
"ellipsize", MODEL_COL_ELLIPSIZE,
|
||||
NULL);
|
||||
}
|
||||
|
||||
gtk_tree_view_column_add_attribute (column, renderer, "sensitive", MODEL_COL_IS_SENSITIVE);
|
||||
}
|
||||
g_list_free (list);
|
||||
|
||||
/* size */
|
||||
column = gtk_tree_view_get_column (GTK_TREE_VIEW (priv->browse_files_tree_view), 1);
|
||||
list = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (column));
|
||||
renderer = list->data;
|
||||
gtk_tree_view_column_set_attributes (column, renderer,
|
||||
gtk_tree_view_column_set_attributes (priv->list_size_column,
|
||||
priv->list_size_renderer,
|
||||
"text", MODEL_COL_SIZE_TEXT,
|
||||
"sensitive", MODEL_COL_IS_SENSITIVE,
|
||||
NULL);
|
||||
|
||||
gtk_tree_view_column_add_attribute (column, renderer, "sensitive", MODEL_COL_IS_SENSITIVE);
|
||||
g_list_free (list);
|
||||
|
||||
/* mtime */
|
||||
column = gtk_tree_view_get_column (GTK_TREE_VIEW (priv->browse_files_tree_view), 2);
|
||||
list = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (column));
|
||||
renderer = list->data;
|
||||
gtk_tree_view_column_set_attributes (column, renderer,
|
||||
"text", MODEL_COL_MTIME_TEXT,
|
||||
gtk_tree_view_column_set_attributes (priv->list_time_column,
|
||||
priv->list_time_renderer,
|
||||
"text", MODEL_COL_TIME_TEXT,
|
||||
"sensitive", MODEL_COL_IS_SENSITIVE,
|
||||
NULL);
|
||||
gtk_tree_view_column_add_attribute (column, renderer, "sensitive", MODEL_COL_IS_SENSITIVE);
|
||||
g_list_free (list);
|
||||
|
||||
/* location */
|
||||
column = gtk_tree_view_get_column (GTK_TREE_VIEW (priv->browse_files_tree_view), 3);
|
||||
list = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (column));
|
||||
renderer = list->data;
|
||||
g_object_set (renderer,
|
||||
g_object_set (priv->list_location_renderer,
|
||||
"ellipsize", PANGO_ELLIPSIZE_START,
|
||||
"width-chars", 15,
|
||||
"max-width-chars", 30,
|
||||
NULL);
|
||||
gtk_tree_view_column_set_attributes (column, renderer,
|
||||
gtk_tree_view_column_set_attributes (priv->list_location_column,
|
||||
priv->list_location_renderer,
|
||||
"text", MODEL_COL_LOCATION_TEXT,
|
||||
"sensitive", MODEL_COL_IS_SENSITIVE,
|
||||
NULL);
|
||||
g_list_free (list);
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
@ -7762,9 +7741,12 @@ gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class)
|
||||
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, list_name_column);
|
||||
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, list_pixbuf_renderer);
|
||||
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, list_name_renderer);
|
||||
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, list_mtime_column);
|
||||
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, list_time_column);
|
||||
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, list_time_renderer);
|
||||
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, list_size_column);
|
||||
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);
|
||||
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);
|
||||
|
@ -219,7 +219,8 @@ visit_directory (GFile *dir, SearchThreadData *data)
|
||||
G_FILE_ATTRIBUTE_STANDARD_SIZE ","
|
||||
G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE ","
|
||||
G_FILE_ATTRIBUTE_STANDARD_TARGET_URI ","
|
||||
G_FILE_ATTRIBUTE_TIME_MODIFIED,
|
||||
G_FILE_ATTRIBUTE_TIME_MODIFIED ","
|
||||
G_FILE_ATTRIBUTE_TIME_ACCESS,
|
||||
G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
|
||||
data->cancellable, NULL);
|
||||
if (enumerator == NULL)
|
||||
|
@ -199,15 +199,6 @@
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn" id="list_mtime_column">
|
||||
<property name="resizable">True</property>
|
||||
<property name="title" translatable="yes">Modified</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="list_mtime_renderer"/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn" id="list_location_column">
|
||||
<property name="resizable">True</property>
|
||||
@ -218,6 +209,15 @@
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn" id="list_time_column">
|
||||
<property name="resizable">True</property>
|
||||
<property name="title" translatable="yes">Modified</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="list_time_renderer"/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
|
Loading…
Reference in New Issue
Block a user