file chooser: Make location column work better
authorMatthias Clasen <mclasen@redhat.com>
Sat, 27 Jun 2015 05:07:32 +0000 (01:07 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 4 Jul 2015 04:29:24 +0000 (00:29 -0400)
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.

gtk/gtkfilechooserwidget.c
gtk/gtksearchenginesimple.c

index 84d794ad9df3e5403249c7c6c808814203ca5d18..05393cabcbdfdd234931b48bfa0cf705ead1a033 100644 (file)
@@ -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);
 
index bb064b97d0a8811e37c45acf5f7dabd4c9bcdec4..ee12ae3197f9ec12edf9d603ad650e71edf8ecd2 100644 (file)
@@ -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);