diff --git a/gtk/gtkplacessidebar.c b/gtk/gtkplacessidebar.c index ab1db3691f..7401aa3331 100644 --- a/gtk/gtkplacessidebar.c +++ b/gtk/gtkplacessidebar.c @@ -671,6 +671,38 @@ should_show_file (GtkPlacesSidebar *sidebar, return FALSE; } +static gboolean +file_is_shown (GtkPlacesSidebar *sidebar, + GFile *file) +{ + GtkTreeIter iter; + gchar *uri; + + if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (sidebar->store), &iter)) + return FALSE; + + do + { + gtk_tree_model_get (GTK_TREE_MODEL (sidebar->store), &iter, + PLACES_SIDEBAR_COLUMN_URI, &uri, + -1); + if (uri) + { + GFile *other; + gboolean found; + other = g_file_new_for_uri (uri); + g_free (uri); + found = g_file_equal (file, other); + g_object_unref (other); + if (found) + return TRUE; + } + } + while (gtk_tree_model_iter_next (sidebar->store, &iter)); + + return FALSE; +} + static void add_application_shortcuts (GtkPlacesSidebar *sidebar) { @@ -686,6 +718,9 @@ add_application_shortcuts (GtkPlacesSidebar *sidebar) if (!should_show_file (sidebar, file)) continue; + if (file_is_shown (sidebar, file)) + continue; + /* FIXME: we are getting file info synchronously. We may want to do it async at some point. */ info = g_file_query_info (file, "standard::display-name,standard::symbolic-icon",