[gtk+/places-sidebar] Add gtk_places_sidebar_set_current_uri()



commit be6e89fd584969e5db59073cc6459fd15a9f5b27
Author: Federico Mena Quintero <federico gnome org>
Date:   Wed Sep 7 17:55:21 2011 -0500

    Add gtk_places_sidebar_set_current_uri()
    
    And remove the code that updated the current URI automatically based
    on a NautilusWindow.
    
    Signed-off-by: Federico Mena Quintero <federico gnome org>

 gtk/gtkplacessidebar.c |   83 +++++++++++++++++++++++++-----------------------
 gtk/gtkplacessidebar.h |    4 ++-
 2 files changed, 46 insertions(+), 41 deletions(-)
---
diff --git a/gtk/gtkplacessidebar.c b/gtk/gtkplacessidebar.c
index a0880eb..4ee7838 100644
--- a/gtk/gtkplacessidebar.c
+++ b/gtk/gtkplacessidebar.c
@@ -970,42 +970,6 @@ desktop_setting_changed_callback (gpointer user_data)
 	update_places (sidebar);
 }
 
-static void
-loading_uri_callback (NautilusWindow *window,
-		      char *location,
-		      GtkPlacesSidebar *sidebar)
-{
-	GtkTreeSelection *selection;
-	GtkTreeIter 	 iter;
-	gboolean 	 valid;
-	char  		 *uri;
-
-        if (strcmp (sidebar->uri, location) != 0) {
-		g_free (sidebar->uri);
-                sidebar->uri = g_strdup (location);
-
-		/* set selection if any place matches location */
-		selection = gtk_tree_view_get_selection (sidebar->tree_view);
-		gtk_tree_selection_unselect_all (selection);
-  		valid = gtk_tree_model_get_iter_first (sidebar->filter_model, &iter);
-
-		while (valid) {
-			gtk_tree_model_get (sidebar->filter_model, &iter,
-		 		       	    PLACES_SIDEBAR_COLUMN_URI, &uri,
-					    -1);
-			if (uri != NULL) {
-				if (strcmp (uri, location) == 0) {
-					g_free (uri);
-					gtk_tree_selection_select_iter (selection, &iter);
-					break;
-				}
-				g_free (uri);
-			}
-        	 	valid = gtk_tree_model_iter_next (sidebar->filter_model, &iter);
-		}
-    	}
-}
-
 /* Computes the appropriate row and position for dropping */
 static gboolean
 compute_drop_position (GtkTreeView *tree_view,
@@ -3340,10 +3304,6 @@ gtk_places_sidebar_set_parent_window (GtkPlacesSidebar *sidebar,
 					  G_CALLBACK (update_places),
 					  sidebar);
 
-	g_signal_connect_object (window, "loading_uri",
-				 G_CALLBACK (loading_uri_callback),
-				 sidebar, 0);
-
 	g_signal_connect_swapped (nautilus_preferences, "changed::" NAUTILUS_PREFERENCES_ALWAYS_USE_BROWSER,
 				  G_CALLBACK (bookmarks_popup_menu_detach_cb), sidebar);
 
@@ -3428,3 +3388,46 @@ nautilus_shortcuts_model_filter_new (GtkPlacesSidebar *sidebar,
 
 	return GTK_TREE_MODEL (model);
 }
+
+/**
+ * gtk_places_sidebar_set_current_uri:
+ * @sidebar: a places sidebar
+ * @uri: URI to select, or #NULL for no current path
+ *
+ * Sets the URI that is being shown in the widgets surrounding the @sidebar.  In turn,
+ * it will highlight that URI if it is being shown in the list of places, or it will
+ * unhighlight everything if the URI is not among the places in the list.
+ */
+void
+gtk_places_sidebar_set_current_uri (GtkPlacesSidebar *sidebar, const char *uri)
+{
+	GtkTreeSelection *selection;
+	GtkTreeIter 	 iter;
+	gboolean 	 valid;
+	char  		 *iter_uri;
+
+        if (strcmp (sidebar->uri, uri) != 0) {
+		g_free (sidebar->uri);
+                sidebar->uri = g_strdup (uri);
+
+		/* set selection if any place matches the uri */
+		selection = gtk_tree_view_get_selection (sidebar->tree_view);
+		gtk_tree_selection_unselect_all (selection);
+  		valid = gtk_tree_model_get_iter_first (sidebar->filter_model, &iter);
+
+		while (valid) {
+			gtk_tree_model_get (sidebar->filter_model, &iter,
+		 		       	    PLACES_SIDEBAR_COLUMN_URI, &iter_uri,
+					    -1);
+			if (iter_uri != NULL) {
+				if (strcmp (iter_uri, uri) == 0) {
+					g_free (iter_uri);
+					gtk_tree_selection_select_iter (selection, &iter);
+					break;
+				}
+				g_free (iter_uri);
+			}
+        	 	valid = gtk_tree_model_iter_next (sidebar->filter_model, &iter);
+		}
+    	}
+}
diff --git a/gtk/gtkplacessidebar.h b/gtk/gtkplacessidebar.h
index 2e5aee5..57057f8 100644
--- a/gtk/gtkplacessidebar.h
+++ b/gtk/gtkplacessidebar.h
@@ -41,10 +41,12 @@
 typedef struct _GtkPlacesSidebar GtkPlacesSidebar;
 typedef struct _GtkPlacesSidebarClass GtkPlacesSidebarClass;
 
-
 GType gtk_places_sidebar_get_type (void);
 GtkWidget *gtk_places_sidebar_new (void);
 
+/* FIXME: add an "uri" property so this can be set via g_object_set() */
+void gtk_places_sidebar_set_current_uri (GtkPlacesSidebar *sidebar, const char *uri);
+
 G_END_DECLS
 
 #endif /* __GTK_PLACES_SIDEBAR_H__ */



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