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
This commit is contained in:
		@ -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",
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user