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>
This commit is contained in:
Federico Mena Quintero 2011-09-07 17:55:21 -05:00
parent 554bb2e18a
commit 1093e1433e
2 changed files with 46 additions and 41 deletions

View File

@ -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);
}
}
}

View File

@ -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__ */