From: Matthias Clasen Date: Sat, 27 Jun 2015 05:07:32 +0000 (-0400) Subject: file chooser: Make location column work better X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~24^2~9196 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=0f9b87cfeb77e9fb9b9d3511dcf8c6bf6ea86e4e;p=gtk4.git file chooser: Make location column work better The location column did not work for search results in recent://. Fix that by looking at the target uri in this case. Show the location column in recent mode. And make it more similar to nautilus by showing the full path if it is not below $HOME. --- diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c index 84d794ad9d..05393cabcb 100644 --- a/gtk/gtkfilechooserwidget.c +++ b/gtk/gtkfilechooserwidget.c @@ -361,7 +361,7 @@ 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::content-type,time::modified,standard::target-uri" enum { /* the first 3 must be these due to settings caching sort column */ MODEL_COL_NAME, @@ -2612,7 +2612,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); + gtk_tree_view_column_set_visible (priv->list_location_column, TRUE); } static void @@ -4192,9 +4192,23 @@ file_system_model_set (GtkFileSystemModel *model, else dir_location = NULL; - if (dir_location && g_file_equal (home_location, dir_location)) + if (dir_location && file_is_recent_uri (dir_location)) + { + const char *target_uri; + GFile *target; + + target_uri = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_TARGET_URI); + target = g_file_new_for_uri (target_uri); + g_object_unref (dir_location); + dir_location = g_file_get_parent (target); + g_object_unref (target); + } + + if (!dir_location) + location = g_strdup (""); + else if (g_file_equal (home_location, dir_location)) location = g_strdup (_("Home")); - else if (dir_location && g_file_has_prefix (dir_location, home_location)) + else if (g_file_has_prefix (dir_location, home_location)) { gchar *relative_path; @@ -4204,7 +4218,7 @@ file_system_model_set (GtkFileSystemModel *model, g_free (relative_path); } else - location = g_strdup (""); + location = g_file_get_path (dir_location); g_value_take_string (value, location); diff --git a/gtk/gtksearchenginesimple.c b/gtk/gtksearchenginesimple.c index bb064b97d0..ee12ae3197 100644 --- a/gtk/gtksearchenginesimple.c +++ b/gtk/gtksearchenginesimple.c @@ -218,6 +218,7 @@ visit_directory (GFile *dir, SearchThreadData *data) G_FILE_ATTRIBUTE_STANDARD_IS_BACKUP "," G_FILE_ATTRIBUTE_STANDARD_SIZE "," G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE "," + G_FILE_ATTRIBUTE_STANDARD_TARGET_URI "," G_FILE_ATTRIBUTE_TIME_MODIFIED, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, data->cancellable, NULL);