forked from AuroraMiddleware/gtk
file chooser: Add a location column for search
In search, we show files from differnt locations, and it makes sense to show where they come from. This makes the file chooser more similar to nautilus, too.
This commit is contained in:
parent
61012f3efe
commit
2c5ea0dd45
@ -293,6 +293,7 @@ struct _GtkFileChooserWidgetPrivate {
|
||||
GtkCellRenderer *list_pixbuf_renderer;
|
||||
GtkTreeViewColumn *list_mtime_column;
|
||||
GtkTreeViewColumn *list_size_column;
|
||||
GtkTreeViewColumn *list_location_column;
|
||||
|
||||
guint location_changed_id;
|
||||
|
||||
@ -364,6 +365,7 @@ enum {
|
||||
MODEL_COL_SURFACE,
|
||||
MODEL_COL_SIZE_TEXT,
|
||||
MODEL_COL_MTIME_TEXT,
|
||||
MODEL_COL_LOCATION_TEXT,
|
||||
MODEL_COL_ELLIPSIZE,
|
||||
MODEL_COL_NUM_COLUMNS
|
||||
};
|
||||
@ -381,6 +383,7 @@ enum {
|
||||
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_LOCATION_TEXT */ \
|
||||
PANGO_TYPE_ELLIPSIZE_MODE /* MODEL_COL_ELLIPSIZE */
|
||||
|
||||
/* Identifiers for target types */
|
||||
@ -1914,6 +1917,7 @@ file_list_set_sort_column_ids (GtkFileChooserWidget *impl)
|
||||
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_size_column, MODEL_COL_SIZE);
|
||||
gtk_tree_view_column_set_sort_column_id (priv->list_location_column, MODEL_COL_LOCATION_TEXT);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@ -2517,6 +2521,7 @@ operation_mode_set_enter_location (GtkFileChooserWidget *impl)
|
||||
location_bar_update (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);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -2527,6 +2532,7 @@ operation_mode_set_browse (GtkFileChooserWidget *impl)
|
||||
gtk_stack_set_visible_child_name (GTK_STACK (priv->browse_header_stack), "pathbar");
|
||||
location_bar_update (impl);
|
||||
gtk_widget_set_sensitive (priv->filter_combo, TRUE);
|
||||
gtk_tree_view_column_set_visible (priv->list_location_column, FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -2540,8 +2546,10 @@ operation_mode_set_search (GtkFileChooserWidget *impl)
|
||||
location_bar_update (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_places_sidebar_set_location (GTK_PLACES_SIDEBAR (priv->places_sidebar), NULL);
|
||||
gtk_widget_set_sensitive (priv->filter_combo, FALSE);
|
||||
|
||||
gtk_tree_view_column_set_visible (priv->list_location_column, TRUE);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -2557,6 +2565,7 @@ operation_mode_set_recent (GtkFileChooserWidget *impl)
|
||||
gtk_places_sidebar_set_location (GTK_PLACES_SIDEBAR (priv->places_sidebar), file);
|
||||
g_object_unref (file);
|
||||
gtk_widget_set_sensitive (priv->filter_combo, TRUE);
|
||||
gtk_tree_view_column_set_visible (priv->list_location_column, FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -4063,6 +4072,35 @@ file_system_model_set (GtkFileSystemModel *model,
|
||||
case MODEL_COL_ELLIPSIZE:
|
||||
g_value_set_enum (value, info ? PANGO_ELLIPSIZE_END : PANGO_ELLIPSIZE_NONE);
|
||||
break;
|
||||
case MODEL_COL_LOCATION_TEXT:
|
||||
{
|
||||
GFile *home_location;
|
||||
GFile *dir_location;
|
||||
gchar *location;
|
||||
|
||||
home_location = g_file_new_for_path (g_get_home_dir ());
|
||||
dir_location = g_file_get_parent (file);
|
||||
|
||||
if (g_file_equal (home_location, dir_location))
|
||||
location = g_strdup (_("Home"));
|
||||
else if (g_file_has_prefix (dir_location, home_location))
|
||||
{
|
||||
gchar *relative_path;
|
||||
|
||||
relative_path = g_file_get_relative_path (home_location, dir_location);
|
||||
location = g_filename_display_name (relative_path);
|
||||
|
||||
g_free (relative_path);
|
||||
}
|
||||
else
|
||||
location = g_strdup ("");
|
||||
|
||||
g_value_take_string (value, location);
|
||||
|
||||
g_object_unref (dir_location);
|
||||
g_object_unref (home_location);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
break;
|
||||
@ -6887,6 +6925,18 @@ update_cell_renderer_attributes (GtkFileChooserWidget *impl)
|
||||
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, "ellipsize", PANGO_ELLIPSIZE_START, NULL);
|
||||
gtk_tree_view_column_set_attributes (column, renderer,
|
||||
"text", MODEL_COL_LOCATION_TEXT,
|
||||
"sensitive", MODEL_COL_IS_SENSITIVE,
|
||||
NULL);
|
||||
g_list_free (list);
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
@ -7433,6 +7483,7 @@ gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class)
|
||||
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_size_column);
|
||||
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, list_location_column);
|
||||
|
||||
/* And a *lot* of callbacks to bind ... */
|
||||
gtk_widget_class_bind_template_callback (widget_class, browse_files_key_press_event_cb);
|
||||
|
@ -228,6 +228,16 @@
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn" id="list_location_column">
|
||||
<property name="resizable">True</property>
|
||||
<property name="visible">False</property>
|
||||
<property name="title" translatable="yes">Location</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="list_location_renderer"/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
|
@ -3,4 +3,5 @@ N_("Files");
|
||||
N_("Name");
|
||||
N_("Size");
|
||||
N_("Modified");
|
||||
N_("Location");
|
||||
N_("Select which types of files are shown");
|
||||
|
Loading…
Reference in New Issue
Block a user