From aac0aeac68aab6d85ebd8b4d5b46cf0e5ba38c8b Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 9 Nov 2013 19:01:27 -0500 Subject: [PATCH] Filter out duplicate application shortcuts The file chooser used to do this, the places sidebar still needs to learn it. https://bugzilla.gnome.org/show_bug.cgi?id=711636 --- gtk/gtkplacessidebar.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/gtk/gtkplacessidebar.c b/gtk/gtkplacessidebar.c index 6baf841dd1..eac94b8202 100644 --- a/gtk/gtkplacessidebar.c +++ b/gtk/gtkplacessidebar.c @@ -674,6 +674,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) { @@ -689,6 +721,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",