[gtk+/gtk-3-10] Filter out duplicate application shortcuts



commit aac0aeac68aab6d85ebd8b4d5b46cf0e5ba38c8b
Author: Matthias Clasen <mclasen redhat com>
Date:   Sat Nov 9 19:01:27 2013 -0500

    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 files changed, 35 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtkplacessidebar.c b/gtk/gtkplacessidebar.c
index 6baf841..eac94b8 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",


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]