[gedit] Fix filebrowser plugin to use GFile instead of uris.



commit 44d5f89c3302d3f539349659b7742780e298776f
Author: Ignacio Casal Quinteiro <icq gnome org>
Date:   Thu Apr 1 15:19:33 2010 +0200

    Fix filebrowser plugin to use GFile instead of uris.

 plugins/filebrowser/gedit-file-bookmarks-store.c   |   15 ++-
 plugins/filebrowser/gedit-file-bookmarks-store.h   |    2 +-
 .../filebrowser/gedit-file-browser-marshal.list    |    2 +-
 plugins/filebrowser/gedit-file-browser-messages.c  |  105 +++++++--------
 plugins/filebrowser/gedit-file-browser-plugin.c    |  141 +++++++++----------
 plugins/filebrowser/gedit-file-browser-store.c     |  141 ++++++++------------
 plugins/filebrowser/gedit-file-browser-store.h     |   24 ++--
 plugins/filebrowser/gedit-file-browser-utils.c     |   15 +--
 plugins/filebrowser/gedit-file-browser-utils.h     |    1 -
 plugins/filebrowser/gedit-file-browser-view.c      |   80 ++++-------
 plugins/filebrowser/gedit-file-browser-widget.c    |  139 ++++++++------------
 plugins/filebrowser/gedit-file-browser-widget.h    |   10 +-
 plugins/quickopen/quickopen/windowhelper.py        |    9 +-
 13 files changed, 287 insertions(+), 397 deletions(-)
---
diff --git a/plugins/filebrowser/gedit-file-bookmarks-store.c b/plugins/filebrowser/gedit-file-bookmarks-store.c
index 37c5d78..eaec8d4 100644
--- a/plugins/filebrowser/gedit-file-bookmarks-store.c
+++ b/plugins/filebrowser/gedit-file-bookmarks-store.c
@@ -509,6 +509,7 @@ init_bookmarks (GeditFileBookmarksStore * model)
 
 		for (line = lines; *line; ++line) {
 			if (**line) {
+				GFile *location;
 				gchar *pos;
 				gchar *name;
 
@@ -524,9 +525,11 @@ init_bookmarks (GeditFileBookmarksStore * model)
 
 				/* the bookmarks file should contain valid
 				 * URIs, but paranoia is good */
-				if (gedit_utils_is_valid_uri (*line)) {
+				location = g_file_new_for_uri (*line);
+				if (gedit_utils_is_valid_location (location)) {
 					added |= add_bookmark (model, name, *line);
 				}
+				g_object_unref (location);
 			}
 		}
 
@@ -781,14 +784,14 @@ gedit_file_bookmarks_store_new (void)
 	return model;
 }
 
-gchar *
-gedit_file_bookmarks_store_get_uri (GeditFileBookmarksStore * model,
-				    GtkTreeIter * iter)
+GFile *
+gedit_file_bookmarks_store_get_location (GeditFileBookmarksStore * model,
+					 GtkTreeIter * iter)
 {
 	GObject * obj;
 	GFile * file = NULL;
 	guint flags;
-	gchar * ret = NULL;
+	GFile * ret = NULL;
 	gboolean isfs;
 	
 	g_return_val_if_fail (GEDIT_IS_FILE_BOOKMARKS_STORE (model), NULL);
@@ -819,7 +822,7 @@ gedit_file_bookmarks_store_get_uri (GeditFileBookmarksStore * model,
 	
 	if (file)
 	{
-		ret = g_file_get_uri (file);
+		ret = g_file_dup (file);
 		g_object_unref (file);
 	}
 	
diff --git a/plugins/filebrowser/gedit-file-bookmarks-store.h b/plugins/filebrowser/gedit-file-bookmarks-store.h
index bd20911..d0152c1 100644
--- a/plugins/filebrowser/gedit-file-bookmarks-store.h
+++ b/plugins/filebrowser/gedit-file-bookmarks-store.h
@@ -80,7 +80,7 @@ GType gedit_file_bookmarks_store_get_type               (void) G_GNUC_CONST;
 GType gedit_file_bookmarks_store_register_type          (GTypeModule * module);
 
 GeditFileBookmarksStore *gedit_file_bookmarks_store_new (void);
-gchar *gedit_file_bookmarks_store_get_uri               (GeditFileBookmarksStore * model,
+GFile *gedit_file_bookmarks_store_get_location          (GeditFileBookmarksStore * model,
 					                 GtkTreeIter * iter);
 void gedit_file_bookmarks_store_refresh                 (GeditFileBookmarksStore * model);
 
diff --git a/plugins/filebrowser/gedit-file-browser-marshal.list b/plugins/filebrowser/gedit-file-browser-marshal.list
index 5fa72c8..9b24776 100644
--- a/plugins/filebrowser/gedit-file-browser-marshal.list
+++ b/plugins/filebrowser/gedit-file-browser-marshal.list
@@ -1,5 +1,5 @@
 VOID:UINT,STRING
-VOID:STRING,STRING
+VOID:OBJECT,OBJECT
 BOOL:OBJECT,POINTER
 BOOL:POINTER
 BOOL:VOID
diff --git a/plugins/filebrowser/gedit-file-browser-messages.c b/plugins/filebrowser/gedit-file-browser-messages.c
index b587edf..7258950 100644
--- a/plugins/filebrowser/gedit-file-browser-messages.c
+++ b/plugins/filebrowser/gedit-file-browser-messages.c
@@ -178,13 +178,16 @@ message_get_root_cb (GeditMessageBus *bus,
 		     WindowData      *data)
 {
 	GeditFileBrowserStore *store;
-	gchar *uri;
+	GFile *location;
 	
 	store = gedit_file_browser_widget_get_browser_store (data->widget);
-	uri = gedit_file_browser_store_get_virtual_root (store);
-	
-	gedit_message_set (message, "uri", uri, NULL);
-	g_free (uri);
+	location = gedit_file_browser_store_get_virtual_root (store);
+
+	if (location)
+	{
+		gedit_message_set (message, "location", location, NULL);
+		g_object_unref (location);
+	}
 }
 
 static void
@@ -192,10 +195,10 @@ message_set_root_cb (GeditMessageBus *bus,
 		     GeditMessage    *message,
 		     WindowData      *data)
 {
-	gchar *root = NULL;
-	gchar *virtual = NULL;
+	GFile *root;
+	GFile *virtual = NULL;
 	
-	gedit_message_get (message, "uri", &root, NULL);
+	gedit_message_get (message, "location", &root, NULL);
 	
 	if (!root)
 		return;
@@ -207,9 +210,6 @@ message_set_root_cb (GeditMessageBus *bus,
 		gedit_file_browser_widget_set_root_and_virtual_root (data->widget, root, virtual);
 	else
 		gedit_file_browser_widget_set_root (data->widget, root, TRUE);
-	
-	g_free (root);
-	g_free (virtual);
 }
 
 static void
@@ -278,23 +278,30 @@ message_set_emblem_cb (GeditMessageBus *bus,
 
 static gchar *
 item_id (const gchar *path,
-	 const gchar *uri)
+	 GFile *location)
 {
-	return g_strconcat (path, "::", uri, NULL);
+	gchar *uri;
+	gchar *id;
+
+	uri = g_file_get_uri (location);
+	id = g_strconcat (path, "::", uri, NULL);
+	g_free (uri);
+
+	return id;
 }
 
 static gchar *
 track_row (WindowData            *data,
 	   GeditFileBrowserStore *store,
 	   GtkTreePath           *path,
-	   const gchar		 *uri)
+	   GFile		 *location)
 {
 	GtkTreeRowReference *ref;
 	gchar *id;
 	gchar *pathstr;
 	
 	pathstr = gtk_tree_path_to_string (path);
-	id = item_id (pathstr, uri);
+	id = item_id (pathstr, location);
 	
 	ref = gtk_tree_row_reference_new (GTK_TREE_MODEL (store), path);
 	g_hash_table_insert (data->row_tracking, g_strdup (id), ref);
@@ -311,28 +318,28 @@ set_item_message (WindowData   *data,
 		  GeditMessage *message)
 {
 	GeditFileBrowserStore *store;
-	gchar *uri = NULL;
+	GFile *location;
 	guint flags = 0;
 	gchar *track_id;
 	
 	store = gedit_file_browser_widget_get_browser_store (data->widget);
 	
 	gtk_tree_model_get (GTK_TREE_MODEL (store), iter,
-			    GEDIT_FILE_BROWSER_STORE_COLUMN_URI, &uri,
+			    GEDIT_FILE_BROWSER_STORE_COLUMN_LOCATION, &location,
 			    GEDIT_FILE_BROWSER_STORE_COLUMN_FLAGS, &flags,
 			    -1);
 	
-	if (!uri)
+	if (!location)
 		return;
 
 	if (path && gtk_tree_path_get_depth (path) != 0)
-		track_id = track_row (data, store, path, uri);
+		track_id = track_row (data, store, path, location);
 	else
 		track_id = NULL;
 
 	gedit_message_set (message,
 			   "id", track_id,
-			   "uri", uri,
+			   "location", location,
 			   NULL);
 	
 	if (gedit_message_has_key (message, "is_directory"))
@@ -342,7 +349,6 @@ set_item_message (WindowData   *data,
 				   NULL);
 	}			   
 
-	g_free (uri);
 	g_free (track_id);
 }
 
@@ -353,19 +359,18 @@ custom_message_filter_func (GeditFileBrowserWidget *widget,
 			    FilterData             *data)
 {
 	WindowData *wdata = get_window_data (data->window);
-	gchar *uri = NULL;
+	GFile *location;
 	guint flags = 0;
 	gboolean filter = FALSE;
 	GtkTreePath *path;
 	
 	gtk_tree_model_get (GTK_TREE_MODEL (store), iter, 
-			    GEDIT_FILE_BROWSER_STORE_COLUMN_URI, &uri,
+			    GEDIT_FILE_BROWSER_STORE_COLUMN_LOCATION, &location,
 			    GEDIT_FILE_BROWSER_STORE_COLUMN_FLAGS, &flags,
 			    -1);
 	
-	if (!uri || FILE_IS_DUMMY (flags))
+	if (!location || FILE_IS_DUMMY (flags))
 	{
-		g_free (uri);
 		return FALSE;
 	}
 	
@@ -420,7 +425,7 @@ message_add_filter_cb (GeditMessageBus *bus,
 	
 	// Check if the message type has the correct arguments
 	if (gedit_message_type_lookup (message_type, "id") != G_TYPE_STRING ||
-	    gedit_message_type_lookup (message_type, "uri") != G_TYPE_STRING ||
+	    gedit_message_type_lookup (message_type, "location") != G_TYPE_FILE ||
 	    gedit_message_type_lookup (message_type, "is_directory") != G_TYPE_BOOLEAN ||
 	    gedit_message_type_lookup (message_type, "filter") != G_TYPE_BOOLEAN)
 	{
@@ -429,7 +434,7 @@ message_add_filter_cb (GeditMessageBus *bus,
 	
 	cbmessage = gedit_message_type_instantiate (message_type,
 						    "id", NULL,
-						    "uri", NULL,
+						    "location", NULL,
 						    "is_directory", FALSE,
 						    "filter", FALSE,
 						    NULL);
@@ -647,13 +652,13 @@ register_methods (GeditWindow            *window,
 	gedit_message_bus_register (bus, 
 				    MESSAGE_OBJECT_PATH, "get_root", 
 				    1,
-				    "uri", G_TYPE_STRING,
+				    "location", G_TYPE_FILE,
 				    NULL);
  
 	gedit_message_bus_register (bus, 
 				    MESSAGE_OBJECT_PATH, "set_root", 
 				    1, 
-				    "uri", G_TYPE_STRING,
+				    "location", G_TYPE_FILE,
 				    "virtual", G_TYPE_STRING,
 				    NULL);
 				    
@@ -749,11 +754,9 @@ store_row_inserted (GeditFileBrowserStore *store,
 		    GtkTreeIter           *iter,
 		    MessageCacheData      *data)
 {
-	gchar *uri = NULL;
 	guint flags = 0;
 
 	gtk_tree_model_get (GTK_TREE_MODEL (store), iter, 
-			    GEDIT_FILE_BROWSER_STORE_COLUMN_URI, &uri,
 			    GEDIT_FILE_BROWSER_STORE_COLUMN_FLAGS, &flags,
 			    -1);
 	
@@ -764,8 +767,6 @@ store_row_inserted (GeditFileBrowserStore *store,
 		set_item_message (wdata, iter, path, data->message);
 		gedit_message_bus_send_message_sync (wdata->bus, data->message);
 	}
-	
-	g_free (uri);
 }
 
 static void
@@ -774,14 +775,12 @@ store_row_deleted (GeditFileBrowserStore *store,
 		   MessageCacheData      *data)
 {
 	GtkTreeIter iter;
-	gchar *uri = NULL;
 	guint flags = 0;
 	
 	if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, path))
 		return;
 	
-	gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, 
-			    GEDIT_FILE_BROWSER_STORE_COLUMN_URI, &uri,
+	gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
 			    GEDIT_FILE_BROWSER_STORE_COLUMN_FLAGS, &flags,
 			    -1);
 	
@@ -792,8 +791,6 @@ store_row_deleted (GeditFileBrowserStore *store,
 		set_item_message (wdata, &iter, path, data->message);
 		gedit_message_bus_send_message_sync (wdata->bus, data->message);
 	}
-	
-	g_free (uri);
 }
 
 static void
@@ -802,20 +799,20 @@ store_virtual_root_changed (GeditFileBrowserStore *store,
 			    MessageCacheData      *data)
 {
 	WindowData *wdata = get_window_data (data->window);
-	gchar *uri;
+	GFile *vroot;
 	
-	uri = gedit_file_browser_store_get_virtual_root (store);
+	vroot = gedit_file_browser_store_get_virtual_root (store);
 	
-	if (!uri)
+	if (!vroot)
 		return;
 	
 	gedit_message_set (data->message,
-			   "uri", uri,
+			   "location", vroot,
 			   NULL);
 			   
 	gedit_message_bus_send_message_sync (wdata->bus, data->message);
 	
-	g_free (uri);
+	g_object_unref (vroot);
 }
 
 static void
@@ -870,28 +867,28 @@ register_signals (GeditWindow            *window,
 				    MESSAGE_OBJECT_PATH, "root_changed",
 				    0,
 				    "id", G_TYPE_STRING,
-				    "uri", G_TYPE_STRING,
+				    "location", G_TYPE_FILE,
 				    NULL);
 	
 	begin_loading_type = gedit_message_bus_register (bus,
 				    MESSAGE_OBJECT_PATH, "begin_loading",
 				    0,
 				    "id", G_TYPE_STRING,
-				    "uri", G_TYPE_STRING,
+				    "location", G_TYPE_FILE,
 				    NULL);
 
 	end_loading_type = gedit_message_bus_register (bus,
 				    MESSAGE_OBJECT_PATH, "end_loading",
 				    0,
 				    "id", G_TYPE_STRING,
-				    "uri", G_TYPE_STRING,
+				    "location", G_TYPE_FILE,
 				    NULL);
 
 	inserted_type = gedit_message_bus_register (bus,
 						    MESSAGE_OBJECT_PATH, "inserted",
 						    0,
 						    "id", G_TYPE_STRING,
-						    "uri", G_TYPE_STRING,
+						    "location", G_TYPE_FILE,
 						    "is_directory", G_TYPE_BOOLEAN,
 						    NULL);
 
@@ -899,7 +896,7 @@ register_signals (GeditWindow            *window,
 						   MESSAGE_OBJECT_PATH, "deleted",
 						   0,
 						   "id", G_TYPE_STRING,
-						   "uri", G_TYPE_STRING,
+						   "location", G_TYPE_FILE,
 						   "is_directory", G_TYPE_BOOLEAN,
 						   NULL);
 
@@ -907,7 +904,7 @@ register_signals (GeditWindow            *window,
 	
 	message = gedit_message_type_instantiate (inserted_type, 
 						  "id", NULL,
-						  "uri", NULL, 
+						  "location", NULL,
 						  "is_directory", FALSE, 
 						  NULL);
 
@@ -923,7 +920,7 @@ register_signals (GeditWindow            *window,
 
 	message = gedit_message_type_instantiate (deleted_type, 
 						  "id", NULL, 
-						  "uri", NULL,
+						  "location", NULL,
 						  "is_directory", FALSE, 
 						  NULL);
 	data->row_deleted_id = 
@@ -936,7 +933,7 @@ register_signals (GeditWindow            *window,
 	
 	message = gedit_message_type_instantiate (root_changed_type,
 						  "id", NULL,
-						  "uri", NULL,
+						  "location", NULL,
 						  NULL);
 	data->root_changed_id = 
 		g_signal_connect_data (store,
@@ -948,8 +945,8 @@ register_signals (GeditWindow            *window,
 
 	message = gedit_message_type_instantiate (begin_loading_type,
 						  "id", NULL,
-						  "uri", NULL,
-						  NULL);	
+						  "location", NULL,
+						  NULL);
 	data->begin_loading_id = 
 		g_signal_connect_data (store,
 				      "begin_loading",
@@ -960,7 +957,7 @@ register_signals (GeditWindow            *window,
 
 	message = gedit_message_type_instantiate (end_loading_type,
 						  "id", NULL,
-						  "uri", NULL,
+						  "location", NULL,
 						  NULL);
 	data->end_loading_id = 
 		g_signal_connect_data (store,
diff --git a/plugins/filebrowser/gedit-file-browser-plugin.c b/plugins/filebrowser/gedit-file-browser-plugin.c
index ba37e20..46496f7 100644
--- a/plugins/filebrowser/gedit-file-browser-plugin.c
+++ b/plugins/filebrowser/gedit-file-browser-plugin.c
@@ -69,8 +69,8 @@ typedef struct _GeditFileBrowserPluginData
 	guint			 confirm_trash_handle;
 } GeditFileBrowserPluginData;
 
-static void on_uri_activated_cb          (GeditFileBrowserWidget * widget,
-                                          gchar const *uri, 
+static void on_location_activated_cb     (GeditFileBrowserWidget * widget,
+                                          GFile       *location,
                                           GeditWindow * window);
 static void on_error_cb                  (GeditFileBrowserWidget * widget,
                                           guint code,
@@ -86,8 +86,8 @@ static void on_filter_mode_changed_cb    (GeditFileBrowserStore * model,
                                           GParamSpec * param,
                                           GeditWindow * window);
 static void on_rename_cb		 (GeditFileBrowserStore * model,
-					  const gchar * olduri,
-					  const gchar * newuri,
+					  GFile * oldfile,
+					  GFile * newfile,
 					  GeditWindow * window);
 static void on_filter_pattern_changed_cb (GeditFileBrowserWidget * widget,
                                           GParamSpec * param,
@@ -198,25 +198,28 @@ restore_default_location (GeditFileBrowserPluginData *data)
 	                                NULL);
 
 	if (root != NULL && *root != '\0') {
-		GFile *file;
+		GFile *rootfile;
+		GFile *vrootfile;
 
-		file = g_file_new_for_uri (root);
+		rootfile = g_file_new_for_uri (root);
+		vrootfile = g_file_new_for_uri (virtual_root);
 
-		if (remote || g_file_is_native (file)) {
+		if (remote || g_file_is_native (rootfile)) {
 			if (virtual_root != NULL && *virtual_root != '\0') {
 				prepare_auto_root (data);
 				gedit_file_browser_widget_set_root_and_virtual_root (data->tree_widget, 
-					                                             root,
-					                                             virtual_root);
+					                                             rootfile,
+					                                             vrootfile);
 			} else {
 				prepare_auto_root (data);
 				gedit_file_browser_widget_set_root (data->tree_widget,
-					                            root,
+					                            rootfile,
 					                            TRUE);
 			}
 		}
 
-		g_object_unref (file);
+		g_object_unref (rootfile);
+		g_object_unref (vrootfile);
 	}
 
 	g_object_unref (client);
@@ -436,16 +439,12 @@ set_root_from_doc (GeditFileBrowserPluginData * data,
 	parent = g_file_get_parent (file);
 
 	if (parent != NULL) {
-		gchar * root;
-
-		root = g_file_get_uri (parent);
 
 		gedit_file_browser_widget_set_root (data->tree_widget,
-				                    root,
+				                    parent,
 				                    TRUE);
 
 		g_object_unref (parent);
-		g_free (root);
 	}
 
 	g_object_unref (file);
@@ -492,7 +491,6 @@ on_action_open_terminal (GtkAction * action,
 {
 	GeditFileBrowserPluginData * data;
 	gchar * terminal;
-	gchar * wd = NULL;
 	gchar * local;
 	gchar * argv[2];
 	GFile * file;
@@ -509,18 +507,16 @@ on_action_open_terminal (GtkAction * action,
 	store = gedit_file_browser_widget_get_browser_store (data->tree_widget);
 	gtk_tree_model_get (GTK_TREE_MODEL (store), 
 	                    &iter,
-	                    GEDIT_FILE_BROWSER_STORE_COLUMN_URI,
-	                    &wd,
+	                    GEDIT_FILE_BROWSER_STORE_COLUMN_LOCATION,
+	                    &file,
 	                    -1);
 	
-	if (wd == NULL)
+	if (file == NULL)
 		return;
 
 	terminal = get_terminal ();
 	
-	file = g_file_new_for_uri (wd);
 	local = g_file_get_path (file);
-	g_object_unref (file);
 
 	argv[0] = terminal;
 	argv[1] = NULL;
@@ -535,7 +531,6 @@ on_action_open_terminal (GtkAction * action,
 	               NULL);
 	
 	g_free (terminal);
-	g_free (wd);
 	g_free (local);
 }
 
@@ -548,7 +543,7 @@ on_selection_changed_cb (GtkTreeSelection *selection,
 	GtkTreeModel * model;
 	GtkTreeIter iter;
 	gboolean sensitive;
-	gchar * uri;
+	GFile * location;
 
 	data = get_plugin_data (window);
 	
@@ -562,11 +557,10 @@ on_selection_changed_cb (GtkTreeSelection *selection,
 
 	if (sensitive) {
 		gtk_tree_model_get (model, &iter, 
-				    GEDIT_FILE_BROWSER_STORE_COLUMN_URI, 
-				    &uri, -1);
+				    GEDIT_FILE_BROWSER_STORE_COLUMN_LOCATION,
+				    &location, -1);
 
-		sensitive = gedit_utils_uri_has_file_scheme (uri);
-		g_free (uri);
+		sensitive = gedit_utils_location_has_file_scheme (location);
 	}
 
 	gtk_action_set_sensitive (
@@ -697,8 +691,8 @@ impl_activate (GeditPlugin * plugin, GeditWindow * window)
 	g_free (data_dir);
 
 	g_signal_connect (data->tree_widget,
-			  "uri-activated",
-			  G_CALLBACK (on_uri_activated_cb), window);
+			  "location-activated",
+			  G_CALLBACK (on_location_activated_cb), window);
 
 	g_signal_connect (data->tree_widget,
 			  "error", G_CALLBACK (on_error_cb), window);
@@ -842,10 +836,10 @@ filetree_plugin_class_init (GeditFileBrowserPluginClass * klass)
 
 /* Callbacks */
 static void
-on_uri_activated_cb (GeditFileBrowserWidget * tree_widget,
-		     gchar const *uri, GeditWindow * window)
+on_location_activated_cb (GeditFileBrowserWidget * tree_widget,
+			  GFile *location, GeditWindow * window)
 {
-	gedit_commands_load_uri (window, uri, NULL, 0);
+	gedit_commands_load_location (window, location, NULL, 0);
 }
 
 static void
@@ -981,8 +975,8 @@ on_filter_mode_changed_cb (GeditFileBrowserStore * model,
 
 static void
 on_rename_cb (GeditFileBrowserStore * store,
-	      const gchar * olduri,
-	      const gchar * newuri,
+	      GFile       * oldfile,
+	      GFile       * newfile,
 	      GeditWindow * window)
 {
 	GeditApp * app;
@@ -990,28 +984,20 @@ on_rename_cb (GeditFileBrowserStore * store,
 	GList * item;
 	GeditDocument * doc;
 	GFile * docfile;
-	GFile * oldfile;
-	GFile * newfile;
-	gchar * uri;
 	
 	/* Find all documents and set its uri to newuri where it matches olduri */
 	app = gedit_app_get_default ();
 	documents = gedit_app_get_documents (app);
 	
-	oldfile = g_file_new_for_uri (olduri);
-	newfile = g_file_new_for_uri (newuri);
-	
 	for (item = documents; item; item = item->next) {
 		doc = GEDIT_DOCUMENT (item->data);
-		uri = gedit_document_get_uri (doc);
+		docfile = gedit_document_get_location (doc);
 		
-		if (!uri)
+		if (!docfile)
 			continue;
-		
-		docfile = g_file_new_for_uri (uri);
 
 		if (g_file_equal (docfile, oldfile)) {
-			gedit_document_set_uri (doc, newuri);
+			gedit_document_set_location (doc, newfile);
 		} else {
 			gchar *relative;
 
@@ -1022,24 +1008,17 @@ on_rename_cb (GeditFileBrowserStore * store,
 				   the prefix oldfile */
 
 				g_object_unref (docfile);
-				g_free (uri);
-
 				docfile = g_file_get_child (newfile, relative);
-				uri = g_file_get_uri (docfile);
 
-				gedit_document_set_uri (doc, uri);
+				gedit_document_set_location (doc, docfile);
 			}
 
 			g_free (relative);
 		}
 
-		g_free (uri);
 		g_object_unref (docfile);
 	}
 
-	g_object_unref (oldfile);
-	g_object_unref (newfile);
-
 	g_list_free (documents);
 }
 
@@ -1078,14 +1057,20 @@ on_virtual_root_changed_cb (GeditFileBrowserStore * store,
                             GeditWindow * window) 
 {
 	GeditFileBrowserPluginData * data = get_plugin_data (window);
-	gchar * root;
-	gchar * virtual_root;
+	GFile * root;
+	GFile * virtual_root;
+	gchar *uri_root = NULL;
 	GConfClient * client;
 
 	root = gedit_file_browser_store_get_root (store);
 	
 	if (!root)
 		return;
+	else
+	{
+		uri_root = g_file_get_uri (root);
+		g_object_unref (root);
+	}
 
 	client = gconf_client_get_default ();
 	
@@ -1094,8 +1079,9 @@ on_virtual_root_changed_cb (GeditFileBrowserStore * store,
 
 	gconf_client_set_string (client,
 	                         FILE_BROWSER_BASE_KEY "/on_load/root",
-	                         root,
+	                         uri_root,
 	                         NULL);
+	g_free (uri_root);
 	
 	virtual_root = gedit_file_browser_store_get_virtual_root (store);
 
@@ -1103,13 +1089,19 @@ on_virtual_root_changed_cb (GeditFileBrowserStore * store,
 		/* Set virtual to same as root then */
 		gconf_client_set_string (client,
 	                                 FILE_BROWSER_BASE_KEY "/on_load/virtual_root",
-	                                 root,
+	                                 uri_root,
 	                                 NULL);
-	} else {		
+	} else {
+		gchar *uri_vroot;
+
+		uri_vroot = g_file_get_uri (virtual_root);
+
 		gconf_client_set_string (client,
 	                                 FILE_BROWSER_BASE_KEY "/on_load/virtual_root",
-	                                 virtual_root,
-	                                 NULL);	
+	                                 uri_vroot,
+	                                 NULL);
+		g_free (uri_vroot);
+		g_object_unref (virtual_root);
 	}
 
 	g_signal_handlers_disconnect_by_func (window, 
@@ -1117,8 +1109,6 @@ on_virtual_root_changed_cb (GeditFileBrowserStore * store,
 	                                      data);
 
 	g_object_unref (client);
-	g_free (root);
-	g_free (virtual_root);
 }
 
 static void 
@@ -1141,19 +1131,22 @@ on_tab_added_cb (GeditWindow * window,
 
 	if (open) {
 		GeditDocument *doc;
-		gchar *uri;
+		GFile *location;
 
 		doc = gedit_tab_get_document (tab);
 
-		uri = gedit_document_get_uri (doc);
+		location = gedit_document_get_location (doc);
 
-		if (uri != NULL && gedit_utils_uri_has_file_scheme (uri)) {
-			prepare_auto_root (data);
-			set_root_from_doc (data, doc);
-			load_default = FALSE;
+		if (location != NULL)
+		{
+			if (gedit_utils_location_has_file_scheme (location))
+			{
+				prepare_auto_root (data);
+				set_root_from_doc (data, doc);
+				load_default = FALSE;
+			}
+			g_object_unref (location);
 		}
-
-		g_free (uri);
 	}
 
 	if (load_default)
@@ -1171,14 +1164,14 @@ static gchar *
 get_filename_from_path (GtkTreeModel *model, GtkTreePath *path)
 {
 	GtkTreeIter iter;
-	gchar *uri;
+	GFile *location;
 
 	gtk_tree_model_get_iter (model, &iter, path);
 	gtk_tree_model_get (model, &iter,
-			    GEDIT_FILE_BROWSER_STORE_COLUMN_URI, &uri,
+			    GEDIT_FILE_BROWSER_STORE_COLUMN_LOCATION, &location,
 			    -1);
 	
-	return gedit_file_browser_utils_uri_basename (uri);
+	return gedit_file_browser_utils_file_basename (location);
 }
 
 static gboolean
diff --git a/plugins/filebrowser/gedit-file-browser-store.c b/plugins/filebrowser/gedit-file-browser-store.c
index aca8572..ae22e1f 100644
--- a/plugins/filebrowser/gedit-file-browser-store.c
+++ b/plugins/filebrowser/gedit-file-browser-store.c
@@ -83,7 +83,7 @@ struct _AsyncNode
 
 typedef struct {
 	GeditFileBrowserStore * model;
-	gchar * virtual_root;
+	GFile * virtual_root;
 	GMountOperation * operation;
 	GCancellable * cancellable;
 } MountInfo;
@@ -270,13 +270,10 @@ static void
 set_gvalue_from_node (GValue          *value,
                       FileBrowserNode *node)
 {
-	gchar * uri;
-
-	if (node == NULL || !node->file) {
-		g_value_set_string (value, NULL);
+	if (node == NULL) {
+		g_value_set_object (value, NULL);
 	} else {
-		uri = g_file_get_uri (node->file);
-		g_value_take_string (value, uri);
+		g_value_set_object (value, node->file);
 	}
 }
 
@@ -336,17 +333,17 @@ gedit_file_browser_store_class_init (GeditFileBrowserStoreClass * klass)
 	object_class->set_property = gedit_file_browser_store_set_property;
 
 	g_object_class_install_property (object_class, PROP_ROOT,
-					 g_param_spec_string ("root",
+					 g_param_spec_object ("root",
 					 		      "Root",
-					 		      "The root uri",
-					 		      NULL,
+					 		      "The root location",
+					 		      G_TYPE_FILE,
 					 		      G_PARAM_READABLE));
 
 	g_object_class_install_property (object_class, PROP_VIRTUAL_ROOT,
-					 g_param_spec_string ("virtual-root",
+					 g_param_spec_object ("virtual-root",
 					 		      "Virtual Root",
-					 		      "The virtual root uri",
-					 		      NULL,
+					 		      "The virtual root location",
+					 		      G_TYPE_FILE,
 					 		      G_PARAM_READABLE));
 
 	g_object_class_install_property (object_class, PROP_FILTER_MODE,
@@ -393,10 +390,10 @@ gedit_file_browser_store_class_init (GeditFileBrowserStoreClass * klass)
 			  G_SIGNAL_RUN_LAST,
 			  G_STRUCT_OFFSET (GeditFileBrowserStoreClass,
 					   rename), NULL, NULL,
-			  gedit_file_browser_marshal_VOID__STRING_STRING, 
+			  gedit_file_browser_marshal_VOID__OBJECT_OBJECT,
 			  G_TYPE_NONE, 2,
-			  G_TYPE_STRING,
-			  G_TYPE_STRING);
+			  G_TYPE_FILE,
+			  G_TYPE_FILE);
 	model_signals[BEGIN_REFRESH] =
 	    g_signal_new ("begin-refresh",
 	    		  G_OBJECT_CLASS_TYPE (object_class),
@@ -419,9 +416,9 @@ gedit_file_browser_store_class_init (GeditFileBrowserStoreClass * klass)
 	    		  G_SIGNAL_RUN_LAST,
 	    		  G_STRUCT_OFFSET (GeditFileBrowserStoreClass,
 	    		  		   unload), NULL, NULL,
-	    		  g_cclosure_marshal_VOID__STRING,
+	    		  g_cclosure_marshal_VOID__OBJECT,
 	    		  G_TYPE_NONE, 1,
-	    		  G_TYPE_STRING);
+	    		  G_TYPE_FILE);
 
 	g_type_class_add_private (object_class,
 				  sizeof (GeditFileBrowserStorePrivate));
@@ -458,8 +455,8 @@ gedit_file_browser_store_init (GeditFileBrowserStore * obj)
 {
 	obj->priv = GEDIT_FILE_BROWSER_STORE_GET_PRIVATE (obj);
 
-	obj->priv->column_types[GEDIT_FILE_BROWSER_STORE_COLUMN_URI] =
-	    G_TYPE_STRING;
+	obj->priv->column_types[GEDIT_FILE_BROWSER_STORE_COLUMN_LOCATION] =
+	    G_TYPE_FILE;
 	obj->priv->column_types[GEDIT_FILE_BROWSER_STORE_COLUMN_NAME] =
 	    G_TYPE_STRING;
 	obj->priv->column_types[GEDIT_FILE_BROWSER_STORE_COLUMN_FLAGS] =
@@ -680,7 +677,7 @@ gedit_file_browser_store_get_value (GtkTreeModel * tree_model,
 	g_value_init (value, GEDIT_FILE_BROWSER_STORE (tree_model)->priv->column_types[column]);
 
 	switch (column) {
-	case GEDIT_FILE_BROWSER_STORE_COLUMN_URI:
+	case GEDIT_FILE_BROWSER_STORE_COLUMN_LOCATION:
 		set_gvalue_from_node (value, node);
 		break;
 	case GEDIT_FILE_BROWSER_STORE_COLUMN_NAME:
@@ -947,7 +944,7 @@ gedit_file_browser_store_drag_data_get (GtkTreeDragSource * drag_source,
 					GtkSelectionData  * selection_data)
 {
 	GtkTreeIter iter;
-	gchar *uri;
+	GFile *location;
 	gchar *uris[2] = {0, };
 	gboolean ret;
 
@@ -958,15 +955,15 @@ gedit_file_browser_store_drag_data_get (GtkTreeDragSource * drag_source,
 	}
 
 	gtk_tree_model_get (GTK_TREE_MODEL (drag_source), &iter,
-			    GEDIT_FILE_BROWSER_STORE_COLUMN_URI, &uri,
+			    GEDIT_FILE_BROWSER_STORE_COLUMN_LOCATION, &location,
 			    -1);
 
-	g_assert (uri);
+	g_assert (location);
 
-	uris[0] = uri;
+	uris[0] = g_file_get_uri (location);
 	ret = gtk_selection_data_set_uris (selection_data, uris);
 
-	g_free (uri);
+	g_free (uris[0]);
 
 	return ret;
 }
@@ -1345,8 +1342,6 @@ static void
 file_browser_node_free (GeditFileBrowserStore * model,
 			FileBrowserNode * node)
 {
-	gchar *uri;
-
 	if (node == NULL)
 		return;
 
@@ -1376,10 +1371,8 @@ file_browser_node_free (GeditFileBrowserStore * model,
 	
 	if (node->file)
 	{
-		uri = g_file_get_uri (node->file);
-		g_signal_emit (model, model_signals[UNLOAD], 0, uri);
+		g_signal_emit (model, model_signals[UNLOAD], 0, node->file);
 
-		g_free (uri);
 		g_object_unref (node->file);
 	}
 
@@ -2663,14 +2656,14 @@ unique_new_name (GFile * directory, gchar const * name)
 }
 
 static GeditFileBrowserStoreResult
-model_root_mounted (GeditFileBrowserStore * model, gchar const * virtual_root)
+model_root_mounted (GeditFileBrowserStore * model, GFile * virtual_root)
 {
 	model_check_dummy (model, model->priv->root);
 	g_object_notify (G_OBJECT (model), "root");
 
 	if (virtual_root != NULL)
 		return
-		    gedit_file_browser_store_set_virtual_root_from_string
+		    gedit_file_browser_store_set_virtual_root_from_location
 		    (model, virtual_root);
 	else
 		set_virtual_root_from_node (model,
@@ -2746,7 +2739,7 @@ mount_cb (GFile * file,
 }
 
 static GeditFileBrowserStoreResult
-model_mount_root (GeditFileBrowserStore * model, gchar const * virtual_root)
+model_mount_root (GeditFileBrowserStore * model, GFile * virtual_root)
 {
 	GFileInfo * info;
 	GError * error = NULL;
@@ -2765,7 +2758,7 @@ model_mount_root (GeditFileBrowserStore * model, gchar const * virtual_root)
 			
 			mount_info = g_new(MountInfo, 1);
 			mount_info->model = model;
-			mount_info->virtual_root = g_strdup (virtual_root);
+			mount_info->virtual_root = g_file_dup (virtual_root);
 			
 			/* FIXME: we should be setting the correct window */
 			mount_info->operation = gtk_mount_operation_new (NULL);
@@ -2799,7 +2792,7 @@ model_mount_root (GeditFileBrowserStore * model, gchar const * virtual_root)
 
 /* Public */
 GeditFileBrowserStore *
-gedit_file_browser_store_new (gchar const *root)
+gedit_file_browser_store_new (GFile *root)
 {
 	GeditFileBrowserStore *obj =
 	    GEDIT_FILE_BROWSER_STORE (g_object_new
@@ -2870,29 +2863,29 @@ gedit_file_browser_store_set_virtual_root (GeditFileBrowserStore * model,
 }
 
 GeditFileBrowserStoreResult
-gedit_file_browser_store_set_virtual_root_from_string
-    (GeditFileBrowserStore * model, gchar const *root) {
-	GFile *file;
+gedit_file_browser_store_set_virtual_root_from_location
+    (GeditFileBrowserStore * model, GFile *root) {
 
 	g_return_val_if_fail (GEDIT_IS_FILE_BROWSER_STORE (model),
 			      GEDIT_FILE_BROWSER_STORE_RESULT_NO_CHANGE);
 
-	file = g_file_new_for_uri (root);
-	if (file == NULL) {
-		g_warning ("Invalid uri (%s)", root);
+	if (root == NULL) {
+		gchar *uri;
+
+		uri = g_file_get_uri (root);
+		g_warning ("Invalid uri (%s)", uri);
+		g_free (uri);
 		return GEDIT_FILE_BROWSER_STORE_RESULT_NO_CHANGE;
 	}
 
 	/* Check if uri is already the virtual root */
 	if (model->priv->virtual_root &&
-	    g_file_equal (model->priv->virtual_root->file, file)) {
-		g_object_unref (file);
+	    g_file_equal (model->priv->virtual_root->file, root)) {
 		return GEDIT_FILE_BROWSER_STORE_RESULT_NO_CHANGE;
 	}
 
 	/* Check if uri is the root itself */
-	if (g_file_equal (model->priv->root->file, file)) {
-		g_object_unref (file);
+	if (g_file_equal (model->priv->root->file, root)) {
 
 		/* Always clear the model before altering the nodes */
 		model_clear (model, FALSE);
@@ -2900,11 +2893,11 @@ gedit_file_browser_store_set_virtual_root_from_string
 		return GEDIT_FILE_BROWSER_STORE_RESULT_OK;
 	}
 
-	if (!g_file_has_prefix (file, model->priv->root->file)) {
+	if (!g_file_has_prefix (root, model->priv->root->file)) {
 		gchar *str, *str1;
 
 		str = g_file_get_parse_name (model->priv->root->file);
-		str1 = g_file_get_parse_name (file);
+		str1 = g_file_get_parse_name (root);
 
 		g_warning
 		    ("Virtual root (%s) is not below actual root (%s)",
@@ -2913,12 +2906,10 @@ gedit_file_browser_store_set_virtual_root_from_string
 		g_free (str);
 		g_free (str1);
 
-		g_object_unref (file);
 		return GEDIT_FILE_BROWSER_STORE_RESULT_ERROR;
 	}
 
-	set_virtual_root_from_file (model, file);
-	g_object_unref (file);
+	set_virtual_root_from_file (model, root);
 
 	return GEDIT_FILE_BROWSER_STORE_RESULT_OK;
 }
@@ -3009,11 +3000,9 @@ gedit_file_browser_store_cancel_mount_operation (GeditFileBrowserStore *store)
 GeditFileBrowserStoreResult
 gedit_file_browser_store_set_root_and_virtual_root (GeditFileBrowserStore *
 						    model,
-						    gchar const *root,
-						    gchar const *virtual_root)
+						    GFile *root,
+						    GFile *virtual_root)
 {
-	GFile * file = NULL;
-	GFile * vfile = NULL;
 	FileBrowserNode * node;
 	gboolean equal = FALSE;
 
@@ -3023,31 +3012,18 @@ gedit_file_browser_store_set_root_and_virtual_root (GeditFileBrowserStore *
 	if (root == NULL && model->priv->root == NULL)
 		return GEDIT_FILE_BROWSER_STORE_RESULT_NO_CHANGE;
 
-	if (root != NULL) {
-		file = g_file_new_for_uri (root);
-	}
-
 	if (root != NULL && model->priv->root != NULL) {
-		equal = g_file_equal (file, model->priv->root->file);
+		equal = g_file_equal (root, model->priv->root->file);
 
 		if (equal && virtual_root == NULL) {
-			g_object_unref (file);
 			return GEDIT_FILE_BROWSER_STORE_RESULT_NO_CHANGE;
 		}
 	}
 
 	if (virtual_root) {
-		vfile = g_file_new_for_uri (virtual_root);
-
-		if (equal && g_file_equal (vfile, model->priv->virtual_root->file)) {
-			if (file)
-				g_object_unref (file);
-
-			g_object_unref (vfile);
+		if (equal && g_file_equal (virtual_root, model->priv->virtual_root->file)) {
 			return GEDIT_FILE_BROWSER_STORE_RESULT_NO_CHANGE;
 		}
-
-		g_object_unref (vfile);
 	}
 	
 	/* make sure to cancel any previous mount operations */
@@ -3060,11 +3036,9 @@ gedit_file_browser_store_set_root_and_virtual_root (GeditFileBrowserStore *
 	model->priv->root = NULL;
 	model->priv->virtual_root = NULL;
 
-	if (file != NULL) {
+	if (root != NULL) {
 		/* Create the root node */
-		node = file_browser_node_dir_new (model, file, NULL);
-		
-		g_object_unref (file);
+		node = file_browser_node_dir_new (model, root, NULL);
 
 		model->priv->root = node;
 		return model_mount_root (model, virtual_root);
@@ -3078,7 +3052,7 @@ gedit_file_browser_store_set_root_and_virtual_root (GeditFileBrowserStore *
 
 GeditFileBrowserStoreResult
 gedit_file_browser_store_set_root (GeditFileBrowserStore * model,
-				   gchar const *root)
+				   GFile *root)
 {
 	g_return_val_if_fail (GEDIT_IS_FILE_BROWSER_STORE (model),
 			      GEDIT_FILE_BROWSER_STORE_RESULT_NO_CHANGE);
@@ -3087,7 +3061,7 @@ gedit_file_browser_store_set_root (GeditFileBrowserStore * model,
 								   NULL);
 }
 
-gchar *
+GFile *
 gedit_file_browser_store_get_root (GeditFileBrowserStore * model)
 {
 	g_return_val_if_fail (GEDIT_IS_FILE_BROWSER_STORE (model), NULL);
@@ -3095,10 +3069,10 @@ gedit_file_browser_store_get_root (GeditFileBrowserStore * model)
 	if (model->priv->root == NULL || model->priv->root->file == NULL)
 		return NULL;
 	else
-		return g_file_get_uri (model->priv->root->file);
+		return g_file_dup (model->priv->root->file);
 }
 
-gchar * 
+GFile *
 gedit_file_browser_store_get_virtual_root (GeditFileBrowserStore * model)
 {
 	g_return_val_if_fail (GEDIT_IS_FILE_BROWSER_STORE (model), NULL);
@@ -3106,7 +3080,7 @@ gedit_file_browser_store_get_virtual_root (GeditFileBrowserStore * model)
 	if (model->priv->virtual_root == NULL || model->priv->virtual_root->file == NULL)
 		return NULL;
 	else
-		return g_file_get_uri (model->priv->virtual_root->file);
+		return g_file_dup (model->priv->virtual_root->file);
 }
 
 void
@@ -3258,8 +3232,6 @@ gedit_file_browser_store_rename (GeditFileBrowserStore * model,
 	GFile * parent;
 	GFile * previous;
 	GError * err = NULL;
-	gchar * olduri;
-	gchar * newuri;
 	GtkTreePath *path;
 
 	g_return_val_if_fail (GEDIT_IS_FILE_BROWSER_STORE (model), FALSE);
@@ -3306,14 +3278,9 @@ gedit_file_browser_store_rename (GeditFileBrowserStore * model,
 			return FALSE;
 		}
 
-		olduri = g_file_get_uri (previous);
-		newuri = g_file_get_uri (node->file);
-
-		g_signal_emit (model, model_signals[RENAME], 0, olduri, newuri);
+		g_signal_emit (model, model_signals[RENAME], 0, previous, node->file);
 
 		g_object_unref (previous);
-		g_free (olduri);
-		g_free (newuri);
 
 		return TRUE;
 	} else {
diff --git a/plugins/filebrowser/gedit-file-browser-store.h b/plugins/filebrowser/gedit-file-browser-store.h
index f31da32..635e72f 100644
--- a/plugins/filebrowser/gedit-file-browser-store.h
+++ b/plugins/filebrowser/gedit-file-browser-store.h
@@ -37,7 +37,7 @@ typedef enum
 {
 	GEDIT_FILE_BROWSER_STORE_COLUMN_ICON = 0,
 	GEDIT_FILE_BROWSER_STORE_COLUMN_NAME,
-	GEDIT_FILE_BROWSER_STORE_COLUMN_URI,
+	GEDIT_FILE_BROWSER_STORE_COLUMN_LOCATION,
 	GEDIT_FILE_BROWSER_STORE_COLUMN_FLAGS,
 	GEDIT_FILE_BROWSER_STORE_COLUMN_EMBLEM,
 	GEDIT_FILE_BROWSER_STORE_COLUMN_NUM
@@ -107,32 +107,32 @@ struct _GeditFileBrowserStoreClass {
 	gboolean (*no_trash)	     (GeditFileBrowserStore * model,
 				      GList * files);
 	void (*rename)		     (GeditFileBrowserStore * model,
-				      const gchar * olduri,
-				      const gchar * newuri);
+				      GFile * oldfile,
+				      GFile * newfile);
 	void (*begin_refresh)	     (GeditFileBrowserStore * model);
 	void (*end_refresh)	     (GeditFileBrowserStore * model);
 	void (*unload)		     (GeditFileBrowserStore * model,
-				      const gchar * uri);
+				      GFile * location);
 };
 
 GType gedit_file_browser_store_get_type               (void) G_GNUC_CONST;
 GType gedit_file_browser_store_register_type          (GTypeModule * module);
 
-GeditFileBrowserStore *gedit_file_browser_store_new   (gchar const *root);
+GeditFileBrowserStore *gedit_file_browser_store_new   (GFile *root);
 
 GeditFileBrowserStoreResult
 gedit_file_browser_store_set_root_and_virtual_root    (GeditFileBrowserStore * model,
-						       gchar const *root,
-			  			       gchar const *virtual_root);
+						       GFile *root,
+			  			       GFile *virtual_root);
 GeditFileBrowserStoreResult
 gedit_file_browser_store_set_root                     (GeditFileBrowserStore * model,
-				                       gchar const *root);
+				                       GFile *root);
 GeditFileBrowserStoreResult
 gedit_file_browser_store_set_virtual_root             (GeditFileBrowserStore * model,
 					               GtkTreeIter * iter);
 GeditFileBrowserStoreResult
-gedit_file_browser_store_set_virtual_root_from_string (GeditFileBrowserStore * model, 
-                                                       gchar const *root);
+gedit_file_browser_store_set_virtual_root_from_location (GeditFileBrowserStore * model, 
+                                                       GFile *root);
 GeditFileBrowserStoreResult
 gedit_file_browser_store_set_virtual_root_up          (GeditFileBrowserStore * model);
 GeditFileBrowserStoreResult
@@ -143,8 +143,8 @@ gedit_file_browser_store_get_iter_virtual_root        (GeditFileBrowserStore * m
                                                        GtkTreeIter * iter);
 gboolean gedit_file_browser_store_get_iter_root       (GeditFileBrowserStore * model,
 						       GtkTreeIter * iter);
-gchar * gedit_file_browser_store_get_root             (GeditFileBrowserStore * model);
-gchar * gedit_file_browser_store_get_virtual_root     (GeditFileBrowserStore * model);
+GFile * gedit_file_browser_store_get_root             (GeditFileBrowserStore * model);
+GFile * gedit_file_browser_store_get_virtual_root     (GeditFileBrowserStore * model);
 
 gboolean gedit_file_browser_store_iter_equal          (GeditFileBrowserStore * model, 
                                                        GtkTreeIter * iter1,
diff --git a/plugins/filebrowser/gedit-file-browser-utils.c b/plugins/filebrowser/gedit-file-browser-utils.c
index d8f4028..87e2e9d 100644
--- a/plugins/filebrowser/gedit-file-browser-utils.c
+++ b/plugins/filebrowser/gedit-file-browser-utils.c
@@ -128,20 +128,7 @@ gedit_file_browser_utils_pixbuf_from_file (GFile * file,
 gchar *
 gedit_file_browser_utils_file_basename (GFile * file)
 {
-	gchar *uri;
-	gchar *ret;
-	
-	uri = g_file_get_uri (file);
-	ret = gedit_file_browser_utils_uri_basename (uri);
-	g_free (uri);
-	
-	return ret;
-}
-
-gchar *
-gedit_file_browser_utils_uri_basename (gchar const * uri)
-{
-	return gedit_utils_basename_for_display (uri);
+	return gedit_utils_basename_for_display (file);
 }
 
 gboolean
diff --git a/plugins/filebrowser/gedit-file-browser-utils.h b/plugins/filebrowser/gedit-file-browser-utils.h
index fc9acbc..fa5c999 100644
--- a/plugins/filebrowser/gedit-file-browser-utils.h
+++ b/plugins/filebrowser/gedit-file-browser-utils.h
@@ -13,7 +13,6 @@ GdkPixbuf *gedit_file_browser_utils_pixbuf_from_file	  (GFile * file,
                                                            GtkIconSize size);
 
 gchar * gedit_file_browser_utils_file_basename		  (GFile * file);
-gchar * gedit_file_browser_utils_uri_basename             (gchar const * uri);
 
 gboolean gedit_file_browser_utils_confirmation_dialog     (GeditWindow * window,
                                                            GtkMessageType type,
diff --git a/plugins/filebrowser/gedit-file-browser-view.c b/plugins/filebrowser/gedit-file-browser-view.c
index 022a720..4aa8dcf 100644
--- a/plugins/filebrowser/gedit-file-browser-view.c
+++ b/plugins/filebrowser/gedit-file-browser-view.c
@@ -99,7 +99,7 @@ static void on_end_refresh 		(GeditFileBrowserStore 	* model,
 					 GeditFileBrowserView 	* view);
 
 static void on_unload			(GeditFileBrowserStore 	* model, 
-					 gchar const		* uri,
+					 GFile			* location,
 					 GeditFileBrowserView 	* view);
 
 static void on_row_inserted		(GeditFileBrowserStore 	* model, 
@@ -132,36 +132,24 @@ gedit_file_browser_view_finalize (GObject * object)
 
 static void
 add_expand_state (GeditFileBrowserView * view,
-		  gchar const * uri)
+		  GFile * location)
 {
-	GFile * file;
-	
-	if (!uri)
+	if (!location)
 		return;
-
-	file = g_file_new_for_uri (uri);
 	
 	if (view->priv->expand_state)
-		g_hash_table_insert (view->priv->expand_state, file, file);
-	else
-		g_object_unref (file);
+		g_hash_table_insert (view->priv->expand_state, location, g_object_ref (location));
 }
 
 static void
 remove_expand_state (GeditFileBrowserView * view,
-		     gchar const * uri)
+		     GFile * location)
 {
-	GFile * file;
-	
-	if (!uri)
+	if (!location)
 		return;
 
-	file = g_file_new_for_uri (uri);
-	
 	if (view->priv->expand_state)
-		g_hash_table_remove (view->priv->expand_state, file);
-
-	g_object_unref (file);
+		g_hash_table_remove (view->priv->expand_state, location);
 }
 
 static void
@@ -170,7 +158,7 @@ row_expanded (GtkTreeView * tree_view,
 	      GtkTreePath * path)
 {
 	GeditFileBrowserView *view = GEDIT_FILE_BROWSER_VIEW (tree_view);
-	gchar * uri;
+	GFile *location;
 
 	if (GTK_TREE_VIEW_CLASS (gedit_file_browser_view_parent_class)->row_expanded)
 		GTK_TREE_VIEW_CLASS (gedit_file_browser_view_parent_class)->row_expanded (tree_view, iter, path);
@@ -182,12 +170,11 @@ row_expanded (GtkTreeView * tree_view,
 	{
 		gtk_tree_model_get (view->priv->model,
 				    iter, 
-				    GEDIT_FILE_BROWSER_STORE_COLUMN_URI,
-				    &uri,
+				    GEDIT_FILE_BROWSER_STORE_COLUMN_LOCATION,
+				    &location,
 				    -1);
 
-		add_expand_state (view, uri);
-		g_free (uri);
+		add_expand_state (view, location);
 	}
 
 	_gedit_file_browser_store_iter_expanded (GEDIT_FILE_BROWSER_STORE (view->priv->model),
@@ -200,7 +187,7 @@ row_collapsed (GtkTreeView * tree_view,
 	       GtkTreePath * path)
 {
 	GeditFileBrowserView *view = GEDIT_FILE_BROWSER_VIEW (tree_view);
-	gchar * uri;
+	GFile * location;
 
 	if (GTK_TREE_VIEW_CLASS (gedit_file_browser_view_parent_class)->row_collapsed)
 		GTK_TREE_VIEW_CLASS (gedit_file_browser_view_parent_class)->row_collapsed (tree_view, iter, path);
@@ -212,12 +199,11 @@ row_collapsed (GtkTreeView * tree_view,
 	{
 		gtk_tree_model_get (view->priv->model, 
 				    iter, 
-				    GEDIT_FILE_BROWSER_STORE_COLUMN_URI,
-				    &uri,
+				    GEDIT_FILE_BROWSER_STORE_COLUMN_LOCATION,
+				    &location,
 				    -1);
 
-		remove_expand_state (view, uri);
-		g_free (uri);
+		remove_expand_state (view, location);
 	}
 
 	_gedit_file_browser_store_iter_collapsed (GEDIT_FILE_BROWSER_STORE (view->priv->model),
@@ -676,7 +662,7 @@ fill_expand_state (GeditFileBrowserView * view, GtkTreeIter * iter)
 {
 	GtkTreePath * path;
 	GtkTreeIter child;
-	gchar * uri;
+	GFile *location;
 	
 	if (!gtk_tree_model_iter_has_child (view->priv->model, iter))
 		return;
@@ -685,14 +671,13 @@ fill_expand_state (GeditFileBrowserView * view, GtkTreeIter * iter)
 	
 	if (gtk_tree_view_row_expanded (GTK_TREE_VIEW (view), path))
 	{
-		gtk_tree_model_get (view->priv->model, 
-				    iter, 
-				    GEDIT_FILE_BROWSER_STORE_COLUMN_URI, 
-				    &uri, 
+		gtk_tree_model_get (view->priv->model,
+				    iter,
+				    GEDIT_FILE_BROWSER_STORE_COLUMN_LOCATION,
+				    &location,
 				    -1);
 
-		add_expand_state (view, uri);
-		g_free (uri);
+		add_expand_state (view, location);
 	}
 	
 	if (gtk_tree_model_iter_children (view->priv->model, &child, iter))
@@ -1186,15 +1171,15 @@ on_end_refresh (GeditFileBrowserStore * model,
 }
 
 static void
-on_unload (GeditFileBrowserStore * model, 
-	   gchar const * uri,
-	   GeditFileBrowserView * view)
+on_unload (GeditFileBrowserStore *model,
+	   GFile                 *location,
+	   GeditFileBrowserView  *view)
 {
 	/* Don't remove the expand state if we are refreshing */
 	if (!view->priv->restore_expand_state || view->priv->is_refresh)
 		return;
 	
-	remove_expand_state (view, uri);
+	remove_expand_state (view, location);
 }
 
 static void
@@ -1202,23 +1187,21 @@ restore_expand_state (GeditFileBrowserView * view,
 		      GeditFileBrowserStore * model,
 		      GtkTreeIter * iter)
 {
-	gchar * uri;
-	GFile * file;
+	GFile * location;
 	GtkTreePath * path;
 
 	gtk_tree_model_get (GTK_TREE_MODEL (model), 
 			    iter, 
-			    GEDIT_FILE_BROWSER_STORE_COLUMN_URI, 
-			    &uri, 
+			    GEDIT_FILE_BROWSER_STORE_COLUMN_LOCATION,
+			    &location,
 			    -1);
 
-	if (!uri)
+	if (!location)
 		return;
 
-	file = g_file_new_for_uri (uri);
 	path = gtk_tree_model_get_path (GTK_TREE_MODEL (model), iter);
 
-	if (g_hash_table_lookup (view->priv->expand_state, file))
+	if (g_hash_table_lookup (view->priv->expand_state, location))
 	{
 		gtk_tree_view_expand_row (GTK_TREE_VIEW (view),
 					  path,
@@ -1226,9 +1209,6 @@ restore_expand_state (GeditFileBrowserView * view,
 	}
 	
 	gtk_tree_path_free (path);
-
-	g_object_unref (file);	
-	g_free (uri);
 }
 
 static void 
diff --git a/plugins/filebrowser/gedit-file-browser-widget.c b/plugins/filebrowser/gedit-file-browser-widget.c
index b1fd808..a305047 100644
--- a/plugins/filebrowser/gedit-file-browser-widget.c
+++ b/plugins/filebrowser/gedit-file-browser-widget.c
@@ -79,7 +79,7 @@ enum
 /* Signals */
 enum 
 {
-	URI_ACTIVATED,
+	LOCATION_ACTIVATED,
 	ERROR,
 	CONFIRM_DELETE,
 	CONFIRM_NO_TRASH,
@@ -432,14 +432,14 @@ gedit_file_browser_widget_class_init (GeditFileBrowserWidgetClass * klass)
 					 		       G_PARAM_READWRITE |
 					 		       G_PARAM_CONSTRUCT));
 
-	signals[URI_ACTIVATED] =
-	    g_signal_new ("uri-activated",
+	signals[LOCATION_ACTIVATED] =
+	    g_signal_new ("location-activated",
 			  G_OBJECT_CLASS_TYPE (object_class),
 			  G_SIGNAL_RUN_LAST,
 			  G_STRUCT_OFFSET (GeditFileBrowserWidgetClass,
-					   uri_activated), NULL, NULL,
-			  g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1,
-			  G_TYPE_STRING);
+					   location_activated), NULL, NULL,
+			  g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1,
+			  G_TYPE_FILE);
 	signals[ERROR] =
 	    g_signal_new ("error", G_OBJECT_CLASS_TYPE (object_class),
 			  G_SIGNAL_RUN_LAST,
@@ -1059,21 +1059,17 @@ add_bookmark_hash (GeditFileBrowserWidget * obj,
 	GtkTreeModel *model;
 	GdkPixbuf * pixbuf;
 	gchar * name;
-	gchar * uri;
-	GFile * file;
+	GFile * location;
 	NameIcon * item;
 
 	model = GTK_TREE_MODEL (obj->priv->bookmarks_store);
 
-	uri = gedit_file_bookmarks_store_get_uri (obj->priv->
-						  bookmarks_store,
-						  iter);
+	location = gedit_file_bookmarks_store_get_location (obj->priv->
+							    bookmarks_store,
+							    iter);
 
-	if (uri == NULL)
+	if (location == NULL)
 		return;
-	
-	file = g_file_new_for_uri (uri);
-	g_free (uri);
 
 	gtk_tree_model_get (model, iter,
 			    GEDIT_FILE_BOOKMARKS_STORE_COLUMN_ICON,
@@ -1086,7 +1082,7 @@ add_bookmark_hash (GeditFileBrowserWidget * obj,
 	item->icon = pixbuf;
 
 	g_hash_table_insert (obj->priv->bookmarks_hash,
-			     file,
+			     location,
 			     item);
 }
 
@@ -1578,8 +1574,6 @@ jump_to_location (GeditFileBrowserWidget * obj, GList * item,
 	GList *(*iter_func) (GList *);
 	GtkWidget *menu_from;
 	GtkWidget *menu_to;
-	gchar *root;
-	gchar *virtual_root;
 
 	if (!obj->priv->locations)
 		return;
@@ -1638,15 +1632,9 @@ jump_to_location (GeditFileBrowserWidget * obj, GList * item,
 	loc = (Location *) (obj->priv->current_location->data);
 
 	/* Set the new root + virtual root */
-	root = g_file_get_uri (loc->root);
-	virtual_root = g_file_get_uri (loc->virtual_root);
-	
 	gedit_file_browser_widget_set_root_and_virtual_root (obj,
-							     root,
-							     virtual_root);
-
-	g_free (root);
-	g_free (virtual_root);
+							     loc->root,
+							     loc->virtual_root);
 
 	obj->priv->changing_location = FALSE;
 }
@@ -1835,8 +1823,8 @@ gedit_file_browser_widget_show_files (GeditFileBrowserWidget * obj)
 
 void
 gedit_file_browser_widget_set_root_and_virtual_root (GeditFileBrowserWidget *obj,
-						     gchar const *root,
-						     gchar const *virtual_root)
+						     GFile *root,
+						     GFile *virtual_root)
 {
 	GeditFileBrowserStoreResult result;
 
@@ -1855,12 +1843,10 @@ gedit_file_browser_widget_set_root_and_virtual_root (GeditFileBrowserWidget *obj
 
 void
 gedit_file_browser_widget_set_root (GeditFileBrowserWidget * obj,
-				    gchar const *root, 
+				    GFile *root,
 				    gboolean virtual_root)
 {
-	GFile *file;
 	GFile *parent;
-	gchar *str;
 
 	if (!virtual_root) {
 		gedit_file_browser_widget_set_root_and_virtual_root (obj,
@@ -1872,16 +1858,11 @@ gedit_file_browser_widget_set_root (GeditFileBrowserWidget * obj,
 	if (!root)
 		return;
 
-	file = g_file_new_for_uri (root);
-	parent = get_topmost_file (file);
-	str = g_file_get_uri (parent);
+	parent = get_topmost_file (root);
 
 	gedit_file_browser_widget_set_root_and_virtual_root
-	    (obj, str, root);
+	    (obj, parent, root);
 
-	g_free (str);
-	
-	g_object_unref (file);
 	g_object_unref (parent);
 }
 
@@ -2107,7 +2088,6 @@ activate_mount (GeditFileBrowserWidget *widget,
 		GMount		       *mount)
 {
 	GFile *root;
-	gchar *uri;
 	
 	if (!mount)
 	{
@@ -2129,11 +2109,9 @@ activate_mount (GeditFileBrowserWidget *widget,
 	}
 	
 	root = g_mount_get_root (mount);
-	uri = g_file_get_uri (root);
 	
-	gedit_file_browser_widget_set_root (widget, uri, FALSE);
+	gedit_file_browser_widget_set_root (widget, root, FALSE);
 	
-	g_free (uri);
 	g_object_unref (root);
 }
 
@@ -2364,7 +2342,7 @@ bookmark_open (GeditFileBrowserWidget *obj,
 	       GtkTreeModel           *model,
 	       GtkTreeIter            *iter)
 {
-	gchar *uri;
+	GFile *location;
 	gint flags;
 
 	gtk_tree_model_get (model, iter,
@@ -2386,11 +2364,11 @@ bookmark_open (GeditFileBrowserWidget *obj,
 		return;
 	}
 
-	uri =
-	    gedit_file_bookmarks_store_get_uri
+	location =
+	    gedit_file_bookmarks_store_get_location
 	    (GEDIT_FILE_BOOKMARKS_STORE (model), iter);
 
-	if (uri) {
+	if (location) {
 		/* here we check if the bookmark is a mount point, or if it
 		   is a remote bookmark. If that's the case, we will set the
 		   root to the uri of the bookmark and not try to set the
@@ -2399,18 +2377,18 @@ bookmark_open (GeditFileBrowserWidget *obj,
 		if ((flags & GEDIT_FILE_BOOKMARKS_STORE_IS_MOUNT) ||
 		    (flags & GEDIT_FILE_BOOKMARKS_STORE_IS_REMOTE_BOOKMARK)) {
 			gedit_file_browser_widget_set_root (obj,
-							    uri,
+							    location,
 							    FALSE);
 		} else {
 			gedit_file_browser_widget_set_root (obj,
-							    uri,
+							    location,
 							    TRUE);
 		}
+
+		g_object_unref (location);
 	} else {
 		g_warning ("No uri!");
 	}
-
-	g_free (uri);
 }
 
 static void
@@ -2418,19 +2396,17 @@ file_open  (GeditFileBrowserWidget *obj,
 	    GtkTreeModel           *model,
 	    GtkTreeIter            *iter)
 {
-	gchar *uri;
+	GFile *location;
 	gint flags;
 
 	gtk_tree_model_get (model, iter,
 			    GEDIT_FILE_BROWSER_STORE_COLUMN_FLAGS, &flags,
-			    GEDIT_FILE_BROWSER_STORE_COLUMN_URI, &uri,
+			    GEDIT_FILE_BROWSER_STORE_COLUMN_LOCATION, &location,
 			    -1);
 
 	if (!FILE_IS_DIR (flags) && !FILE_IS_DUMMY (flags)) {
-		g_signal_emit (obj, signals[URI_ACTIVATED], 0, uri);
+		g_signal_emit (obj, signals[LOCATION_ACTIVATED], 0, location);
 	}
-
-	g_free (uri);
 }
 
 static gboolean
@@ -2440,17 +2416,20 @@ directory_open (GeditFileBrowserWidget *obj,
 {
 	gboolean result = FALSE;
 	GError *error = NULL;
-	gchar *uri = NULL;
+	GFile *location;
 	GeditFileBrowserStoreFlag flags;
 
 	gtk_tree_model_get (model, iter,
 			    GEDIT_FILE_BROWSER_STORE_COLUMN_FLAGS, &flags,
-			    GEDIT_FILE_BROWSER_STORE_COLUMN_URI, &uri,
+			    GEDIT_FILE_BROWSER_STORE_COLUMN_LOCATION, &location,
 			    -1);
 
-	if (FILE_IS_DIR (flags)) {
+	if (FILE_IS_DIR (flags) && location) {
+		gchar *uri;
 		result = TRUE;
 
+		uri = g_file_get_uri (location);
+
 		if (!gtk_show_uri (gtk_widget_get_screen (GTK_WIDGET (obj)), uri, GDK_CURRENT_TIME, &error)) {
 			g_signal_emit (obj, signals[ERROR], 0,
 				       GEDIT_FILE_BROWSER_ERROR_OPEN_DIRECTORY,
@@ -2459,9 +2438,9 @@ directory_open (GeditFileBrowserWidget *obj,
 			g_error_free (error);
 			error = NULL;
 		}
-	}
 
-	g_free (uri);
+		g_free (uri);
+	}
 
 	return result;
 }
@@ -2508,8 +2487,7 @@ on_virtual_root_changed (GeditFileBrowserStore * model,
 			 GeditFileBrowserWidget * obj)
 {
 	GtkTreeIter iter;
-	gchar *uri;
-	gchar *root_uri;
+	GFile *location;
 	GtkTreeIter root;
 	GtkAction *action;
 	Location *loc;
@@ -2523,8 +2501,8 @@ on_virtual_root_changed (GeditFileBrowserStore * model,
 
 	if (gedit_file_browser_store_get_iter_virtual_root (model, &iter)) {
 		gtk_tree_model_get (GTK_TREE_MODEL (model), &iter,
-				    GEDIT_FILE_BROWSER_STORE_COLUMN_URI,
-				    &uri, -1);
+				    GEDIT_FILE_BROWSER_STORE_COLUMN_LOCATION,
+				    &location, -1);
 
 		if (gedit_file_browser_store_get_iter_root (model, &root)) {
 			if (!obj->priv->changing_location) {
@@ -2532,14 +2510,9 @@ on_virtual_root_changed (GeditFileBrowserStore * model,
 				if (obj->priv->current_location)
 					clear_next_locations (obj);
 
-				root_uri =
-				    gedit_file_browser_store_get_root
-				    (model);
-
 				loc = g_new (Location, 1);
-				loc->root = g_file_new_for_uri (root_uri);
-				loc->virtual_root = g_file_new_for_uri (uri);
-				g_free (root_uri);
+				loc->root = gedit_file_browser_store_get_root (model);
+				loc->virtual_root = g_object_ref (location);
 
 				if (obj->priv->current_location) {
 					/* Add current location to the menu so we can go back
@@ -2608,7 +2581,6 @@ on_virtual_root_changed (GeditFileBrowserStore * model,
 		}
 
 		check_current_item (obj, TRUE);
-		g_free (uri);
 	} else {
 		g_message ("NO!");
 	}
@@ -2688,7 +2660,6 @@ on_combo_changed (GtkComboBox * combo, GeditFileBrowserWidget * obj)
 {
 	GtkTreeIter iter;
 	guint id;
-	gchar * uri;
 	GFile * file;
 
 	if (!gtk_combo_box_get_active_iter (combo, &iter))
@@ -2706,12 +2677,10 @@ on_combo_changed (GtkComboBox * combo, GeditFileBrowserWidget * obj)
 		gtk_tree_model_get (GTK_TREE_MODEL
 				    (obj->priv->combo_model), &iter,
 				    COLUMN_FILE, &file, -1);
+
+		gedit_file_browser_store_set_virtual_root_from_location
+		    (obj->priv->file_store, file);
 		
-		uri = g_file_get_uri (file);
-		gedit_file_browser_store_set_virtual_root_from_string
-		    (obj->priv->file_store, uri);
-		
-		g_free (uri);
 		g_object_unref (file);
 		break;
 	}
@@ -2896,22 +2865,20 @@ on_bookmarks_row_deleted (GtkTreeModel * model,
                           GeditFileBrowserWidget *obj)
 {
 	GtkTreeIter iter;
-	gchar * uri;
-	GFile * file;
+	GFile * location;
 	
 	if (!gtk_tree_model_get_iter (model, &iter, path))
 		return;
 
-	uri = gedit_file_bookmarks_store_get_uri (obj->priv->bookmarks_store, &iter);
+	location = gedit_file_bookmarks_store_get_location (obj->priv->bookmarks_store,
+	                                                    &iter);
 	
-	if (!uri)
+	if (!location)
 		return;
 
-	file = g_file_new_for_uri (uri);
-	g_hash_table_remove (obj->priv->bookmarks_hash, file);
+	g_hash_table_remove (obj->priv->bookmarks_hash, location);
 
-	g_object_unref (file);
-	g_free (uri);
+	g_object_unref (location);
 }
 
 static void 
diff --git a/plugins/filebrowser/gedit-file-browser-widget.h b/plugins/filebrowser/gedit-file-browser-widget.h
index e9cc2a0..3936293 100644
--- a/plugins/filebrowser/gedit-file-browser-widget.h
+++ b/plugins/filebrowser/gedit-file-browser-widget.h
@@ -58,8 +58,8 @@ struct _GeditFileBrowserWidgetClass
 	GtkVBoxClass parent_class;
 
 	/* Signals */
-	void (*uri_activated)        (GeditFileBrowserWidget * widget,
-			              gchar const *uri);
+	void (*location_activated)   (GeditFileBrowserWidget * widget,
+			              GFile *location);
 	void (*error)                (GeditFileBrowserWidget * widget, 
 	                              guint code,
 		                      gchar const *message);
@@ -79,12 +79,12 @@ void gedit_file_browser_widget_show_bookmarks       (GeditFileBrowserWidget * ob
 void gedit_file_browser_widget_show_files           (GeditFileBrowserWidget * obj);
 
 void gedit_file_browser_widget_set_root             (GeditFileBrowserWidget * obj,
-                                                     gchar const *root,
+                                                     GFile *root,
                                                      gboolean virtual_root);
 void
 gedit_file_browser_widget_set_root_and_virtual_root (GeditFileBrowserWidget * obj,
-						     gchar const *root,
-						     gchar const *virtual_root);
+						     GFile *root,
+						     GFile *virtual_root);
 
 gboolean
 gedit_file_browser_widget_get_selected_directory    (GeditFileBrowserWidget * obj, 
diff --git a/plugins/quickopen/quickopen/windowhelper.py b/plugins/quickopen/quickopen/windowhelper.py
index 603acf5..30cefae 100644
--- a/plugins/quickopen/quickopen/windowhelper.py
+++ b/plugins/quickopen/quickopen/windowhelper.py
@@ -95,13 +95,10 @@ class WindowHelper:
                                 msg = bus.send_sync('/plugins/filebrowser', 'get_root')
 
                                 if msg:
-                                        uri = msg.get_value('uri')
+                                        gfile = msg.get_value('location')
 
-                                        if uri:
-                                                gfile = gio.File(uri)
-
-                                                if gfile.is_native():
-                                                        paths.append(gfile)
+                                        if gfile and gfile.is_native():
+                                                paths.append(gfile)
 
                         except StandardError:
                                 pass



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