[gtk+/places-sidebar] Implement the Alt-number quick bookmark shortcuts



commit c26293eacdd936582fc2fc617b8f00df4aa12a0b
Author: Federico Mena Quintero <federico gnome org>
Date:   Mon Dec 10 16:00:42 2012 -0600

    Implement the Alt-number quick bookmark shortcuts
    
    Signed-off-by: Federico Mena Quintero <federico gnome org>

 gtk/gtkfilechooserdefault.c |   23 +++++++----------------
 gtk/gtkplacessidebar.c      |   39 +++++++++++++++++++++++++++++++++++++++
 gtk/gtkplacessidebar.h      |    2 ++
 3 files changed, 48 insertions(+), 16 deletions(-)
---
diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c
index cd86086..f0986d1 100644
--- a/gtk/gtkfilechooserdefault.c
+++ b/gtk/gtkfilechooserdefault.c
@@ -7560,24 +7560,15 @@ static void
 quick_bookmark_handler (GtkFileChooserDefault *impl,
 			gint bookmark_index)
 {
-#if REMOVE_FOR_PLACES_SIDEBAR
-  int bookmark_pos;
-  GtkTreePath *path;
-
-  if (bookmark_index < 0 || bookmark_index >= impl->num_bookmarks)
-    return;
-
-  bookmark_pos = shortcuts_get_index (impl, SHORTCUTS_BOOKMARKS) + bookmark_index;
+  GFile *file;
 
-  path = gtk_tree_path_new_from_indices (bookmark_pos, -1);
+  file = gtk_places_sidebar_get_nth_bookmark (GTK_PLACES_SIDEBAR (impl->places_sidebar), bookmark_index);
 
-  gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (impl->browse_shortcuts_tree_view),
-				path, NULL,
-				FALSE, 0.0, 0.0);
-  gtk_tree_path_free (path);
-
-  switch_to_shortcut (impl, bookmark_pos);
-#endif
+  if (file)
+    {
+      change_folder_and_display_error (impl, file, FALSE);
+      g_object_unref (file);
+    }
 }
 
 static void
diff --git a/gtk/gtkplacessidebar.c b/gtk/gtkplacessidebar.c
index 8f98d97..320f3b3 100644
--- a/gtk/gtkplacessidebar.c
+++ b/gtk/gtkplacessidebar.c
@@ -4165,3 +4165,42 @@ gtk_places_sidebar_list_shortcuts (GtkPlacesSidebar *sidebar)
 
 	return g_slist_copy_deep (sidebar->shortcuts, (GCopyFunc) g_object_ref, NULL);
 }
+
+GFile *
+gtk_places_sidebar_get_nth_bookmark (GtkPlacesSidebar *sidebar, int n)
+{
+	GtkTreeIter iter;
+	int k;
+	GFile *file;
+
+	g_return_val_if_fail (GTK_IS_PLACES_SIDEBAR (sidebar), NULL);
+
+	file = NULL;
+
+	if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (sidebar->store), &iter)) {
+		k = 0;
+
+		do {
+			PlaceType place_type;
+			char *uri;
+
+			gtk_tree_model_get (GTK_TREE_MODEL (sidebar->store), &iter,
+					    PLACES_SIDEBAR_COLUMN_ROW_TYPE, &place_type,
+					    PLACES_SIDEBAR_COLUMN_URI, &uri,
+					    -1);
+
+			if (place_type == PLACES_BOOKMARK) {
+				if (k == n) {
+					file = g_file_new_for_uri (uri);
+					g_free (uri);
+					break;
+				}
+
+				g_free (uri);
+				k++;
+			}
+		} while (gtk_tree_model_iter_next (GTK_TREE_MODEL (sidebar->store), &iter));
+	}
+
+	return file;
+}
diff --git a/gtk/gtkplacessidebar.h b/gtk/gtkplacessidebar.h
index c9eb5da..72b185c 100644
--- a/gtk/gtkplacessidebar.h
+++ b/gtk/gtkplacessidebar.h
@@ -76,6 +76,8 @@ gboolean gtk_places_sidebar_add_shortcut (GtkPlacesSidebar *sidebar, GFile *loca
 gboolean gtk_places_sidebar_remove_shortcut (GtkPlacesSidebar *sidebar, GFile *location, GError **error);
 GSList *gtk_places_sidebar_list_shortcuts (GtkPlacesSidebar *sidebar);
 
+GFile *gtk_places_sidebar_get_nth_bookmark (GtkPlacesSidebar *sidebar, int n);
+
 G_END_DECLS
 
 #endif /* __GTK_PLACES_SIDEBAR_H__ */



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