summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2007-10-18 14:40:05 +0000
committerAlexander Larsson <alexl@src.gnome.org>2007-10-18 14:40:05 +0000
commitaec7046d902ee9014ec4864e3bdb34070aebaaa0 (patch)
tree49fa4f8b16b65e5b9b92ff7e53326f8dc47d6422
parent0fc0e6365e9633e6e106b878a29e9333c47b159f (diff)
downloadnautilus-aec7046d902ee9014ec4864e3bdb34070aebaaa0.tar.gz
Make compute_title take a GFile
2007-10-18 Alexander Larsson <alexl@redhat.com> * libnautilus-private/nautilus-file-utilities.[ch]: Make compute_title take a GFile * libnautilus-private/nautilus-view-factory.[ch]: * libnautilus-private/nautilus-window-info.[ch]: * src/file-manager/fm-directory-view.c: * src/file-manager/fm-tree-view.c: * src/nautilus-application.[ch]: * src/nautilus-bookmark-list.c: * src/nautilus-bookmarks-window.c: * src/nautilus-connect-server-dialog-nonmain.c: * src/nautilus-desktop-window.c: * src/nautilus-history-sidebar.c: * src/nautilus-location-bar.c: * src/nautilus-location-dialog.c: * src/nautilus-navigation-window.c: * src/nautilus-places-sidebar.c: * src/nautilus-shell.c: * src/nautilus-spatial-window.c: * src/nautilus-window-manage-views.[ch]: * src/nautilus-window-menus.c: * src/nautilus-window-private.h: * src/nautilus-window.[ch]: Use GFile * instead of char * uri in all loation handling for windows. svn path=/branches/gio-branch/; revision=13340
-rw-r--r--ChangeLog28
-rw-r--r--TODO-gio4
-rw-r--r--libnautilus-private/nautilus-file-utilities.c49
-rw-r--r--libnautilus-private/nautilus-file-utilities.h4
-rw-r--r--libnautilus-private/nautilus-view-factory.c10
-rw-r--r--libnautilus-private/nautilus-view-factory.h2
-rw-r--r--libnautilus-private/nautilus-window-info.c2
-rw-r--r--libnautilus-private/nautilus-window-info.h4
-rw-r--r--src/file-manager/fm-directory-view.c5
-rw-r--r--src/file-manager/fm-tree-view.c9
-rw-r--r--src/nautilus-application.c47
-rw-r--r--src/nautilus-application.h4
-rw-r--r--src/nautilus-bookmark-list.c20
-rw-r--r--src/nautilus-bookmarks-window.c17
-rw-r--r--src/nautilus-connect-server-dialog-nonmain.c7
-rw-r--r--src/nautilus-desktop-window.c6
-rw-r--r--src/nautilus-history-sidebar.c8
-rw-r--r--src/nautilus-location-bar.c5
-rw-r--r--src/nautilus-location-dialog.c11
-rw-r--r--src/nautilus-navigation-window.c41
-rw-r--r--src/nautilus-places-sidebar.c10
-rw-r--r--src/nautilus-shell.c25
-rw-r--r--src/nautilus-spatial-window.c24
-rw-r--r--src/nautilus-window-manage-views.c314
-rw-r--r--src/nautilus-window-manage-views.h6
-rw-r--r--src/nautilus-window-menus.c43
-rw-r--r--src/nautilus-window-private.h6
-rw-r--r--src/nautilus-window.c59
-rw-r--r--src/nautilus-window.h7
29 files changed, 440 insertions, 337 deletions
diff --git a/ChangeLog b/ChangeLog
index 8a7b664f4..8403329dd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,31 @@
+2007-10-18 Alexander Larsson <alexl@redhat.com>
+
+ * libnautilus-private/nautilus-file-utilities.[ch]:
+ Make compute_title take a GFile
+
+ * libnautilus-private/nautilus-view-factory.[ch]:
+ * libnautilus-private/nautilus-window-info.[ch]:
+ * src/file-manager/fm-directory-view.c:
+ * src/file-manager/fm-tree-view.c:
+ * src/nautilus-application.[ch]:
+ * src/nautilus-bookmark-list.c:
+ * src/nautilus-bookmarks-window.c:
+ * src/nautilus-connect-server-dialog-nonmain.c:
+ * src/nautilus-desktop-window.c:
+ * src/nautilus-history-sidebar.c:
+ * src/nautilus-location-bar.c:
+ * src/nautilus-location-dialog.c:
+ * src/nautilus-navigation-window.c:
+ * src/nautilus-places-sidebar.c:
+ * src/nautilus-shell.c:
+ * src/nautilus-spatial-window.c:
+ * src/nautilus-window-manage-views.[ch]:
+ * src/nautilus-window-menus.c:
+ * src/nautilus-window-private.h:
+ * src/nautilus-window.[ch]:
+ Use GFile * instead of char * uri in all loation handling
+ for windows.
+
2007-10-18 Paolo Borelli <pborelli@katamail.com>
* src/nautilus-image-properties-page.c: port to gio.
diff --git a/TODO-gio b/TODO-gio
index 5a82d58d9..e0870d4f5 100644
--- a/TODO-gio
+++ b/TODO-gio
@@ -1,5 +1 @@
Monitor for UNMOUNT file change event and close window
-
-
-nautilus_directory_get[_existing] -> rename for _by_ur and add GFile version
-Make window location be GFile *
diff --git a/libnautilus-private/nautilus-file-utilities.c b/libnautilus-private/nautilus-file-utilities.c
index 3f6880e97..1409c968b 100644
--- a/libnautilus-private/nautilus-file-utilities.c
+++ b/libnautilus-private/nautilus-file-utilities.c
@@ -58,17 +58,20 @@ static void desktop_dir_changed (void);
char *
-nautilus_compute_title_for_uri (const char *text_uri)
+nautilus_compute_title_for_location (GFile *location)
{
NautilusFile *file;
+ char *text_uri;
GnomeVFSURI *uri;
char *title, *displayname;
const char *hostname;
NautilusDirectory *directory;
NautilusQuery *query;
+
hostname = NULL;
- if (text_uri) {
+ if (location) {
+ text_uri = g_file_get_uri (location);
if (eel_uri_is_search (text_uri)) {
directory = nautilus_directory_get_by_uri (text_uri);
@@ -81,14 +84,16 @@ nautilus_compute_title_for_uri (const char *text_uri)
} else {
title = g_strdup (_("Search"));
}
-
+ g_free (text_uri);
return title;
}
- file = nautilus_file_get_by_uri (text_uri);
+ file = nautilus_file_get (location);
+
uri = gnome_vfs_uri_new (text_uri);
if (uri && strcmp (uri->method_string, "file") != 0) {
hostname = gnome_vfs_uri_get_host_name (uri);
}
+
displayname = nautilus_file_get_display_name (file);
if (hostname) {
title = g_strdup_printf (_("%s on %s"), displayname, hostname);
@@ -100,6 +105,7 @@ nautilus_compute_title_for_uri (const char *text_uri)
gnome_vfs_uri_unref (uri);
}
nautilus_file_unref (file);
+ g_free (text_uri);
} else {
title = g_strdup ("");
}
@@ -854,28 +860,29 @@ nautilus_unique_temporary_file_name (void)
return file_name;
}
-char *
-nautilus_find_existing_uri_in_hierarchy (const char *uri)
+GFile *
+nautilus_find_existing_uri_in_hierarchy (GFile *location)
{
- GnomeVFSURI *vfs_uri, *parent_vfs_uri;
- char *ret = NULL;
-
- g_assert (uri != NULL);
+ GFileInfo *info;
+ GFile *tmp;
- vfs_uri = gnome_vfs_uri_new (uri);
+ g_assert (location != NULL);
- while (vfs_uri != NULL) {
- if (gnome_vfs_uri_exists (vfs_uri)) {
- ret = gnome_vfs_uri_to_string (vfs_uri, GNOME_VFS_URI_HIDE_NONE);
- break;
+ location = g_object_ref (location);
+ while (location != NULL) {
+ info = g_file_query_info (location,
+ "std:name",
+ 0, NULL, NULL);
+ g_object_unref (info);
+ if (info != NULL) {
+ return location;
}
-
- parent_vfs_uri = gnome_vfs_uri_get_parent (vfs_uri);
- gnome_vfs_uri_unref (vfs_uri);
- vfs_uri = parent_vfs_uri;
+ tmp = location;
+ location = g_file_get_parent (location);
+ g_object_unref (tmp);
}
-
- return ret;
+
+ return location;
}
const char *
diff --git a/libnautilus-private/nautilus-file-utilities.h b/libnautilus-private/nautilus-file-utilities.h
index 0f15f226f..0d2b2e1fd 100644
--- a/libnautilus-private/nautilus-file-utilities.h
+++ b/libnautilus-private/nautilus-file-utilities.h
@@ -60,7 +60,7 @@ void nautilus_create_templates_directory (void);
char * nautilus_get_searches_directory (void);
-char * nautilus_compute_title_for_uri (const char *text_uri);
+char * nautilus_compute_title_for_location (GFile *file);
/* This function returns something that needs to be freed with g_free,
* is not NULL, but is not garaunteed to exist */
@@ -88,7 +88,7 @@ char * nautilus_ensure_unique_file_name (const char *directory_uri,
const char *extension);
char * nautilus_unique_temporary_file_name (void);
-char * nautilus_find_existing_uri_in_hierarchy (const char *uri);
+GFile * nautilus_find_existing_uri_in_hierarchy (GFile *location);
const char *nautilus_get_vfs_method_display_name (char *method);
char * nautilus_get_uri_shortname_for_display (GnomeVFSURI *uri);
diff --git a/libnautilus-private/nautilus-view-factory.c b/libnautilus-private/nautilus-view-factory.c
index b405c58d1..fa134a0c8 100644
--- a/libnautilus-private/nautilus-view-factory.c
+++ b/libnautilus-private/nautilus-view-factory.c
@@ -71,18 +71,22 @@ nautilus_view_factory_create (const char *id,
gboolean
nautilus_view_factory_view_supports_uri (const char *id,
- const char *uri,
+ GFile *location,
GFileType file_type,
const char *mime_type)
{
const NautilusViewInfo *view_info;
+ char *uri;
+ gboolean res;
view_info = nautilus_view_factory_lookup (id);
if (view_info == NULL) {
return FALSE;
}
-
- return view_info->supports_uri (uri, file_type, mime_type);
+ uri = g_file_get_uri (location);
+ res = view_info->supports_uri (uri, file_type, mime_type);
+ g_free (uri);
+ return res;
}
diff --git a/libnautilus-private/nautilus-view-factory.h b/libnautilus-private/nautilus-view-factory.h
index e03cc7d1d..07315c58d 100644
--- a/libnautilus-private/nautilus-view-factory.h
+++ b/libnautilus-private/nautilus-view-factory.h
@@ -56,7 +56,7 @@ const NautilusViewInfo *nautilus_view_factory_lookup (const char
NautilusView * nautilus_view_factory_create (const char *id,
NautilusWindowInfo *window);
gboolean nautilus_view_factory_view_supports_uri (const char *id,
- const char *uri,
+ GFile *location,
GFileType file_type,
const char *mime_type);
GList * nautilus_view_factory_get_views_for_uri (const char *uri,
diff --git a/libnautilus-private/nautilus-window-info.c b/libnautilus-private/nautilus-window-info.c
index 56649865b..5c55bdf00 100644
--- a/libnautilus-private/nautilus-window-info.c
+++ b/libnautilus-private/nautilus-window-info.c
@@ -153,7 +153,7 @@ nautilus_window_info_report_selection_changed (NautilusWindowInfo *window)
void
nautilus_window_info_open_location (NautilusWindowInfo *window,
- const char *location,
+ GFile *location,
NautilusWindowOpenMode mode,
NautilusWindowOpenFlags flags,
GList *selection)
diff --git a/libnautilus-private/nautilus-window-info.h b/libnautilus-private/nautilus-window-info.h
index 0519e1c8d..ff05e73c0 100644
--- a/libnautilus-private/nautilus-window-info.h
+++ b/libnautilus-private/nautilus-window-info.h
@@ -129,7 +129,7 @@ struct _NautilusWindowInfoIface
NautilusWindowShowHiddenFilesMode mode);
void (* open_location) (NautilusWindowInfo *window,
- const char *location,
+ GFile *location,
NautilusWindowOpenMode mode,
NautilusWindowOpenFlags flags,
GList *selection);
@@ -147,7 +147,7 @@ void nautilus_window_info_report_view_failed
NautilusView *view);
void nautilus_window_info_report_selection_changed (NautilusWindowInfo *window);
void nautilus_window_info_open_location (NautilusWindowInfo *window,
- const char *location,
+ GFile *location,
NautilusWindowOpenMode mode,
NautilusWindowOpenFlags flags,
GList *selection);
diff --git a/src/file-manager/fm-directory-view.c b/src/file-manager/fm-directory-view.c
index 2d7658284..c4dee9588 100644
--- a/src/file-manager/fm-directory-view.c
+++ b/src/file-manager/fm-directory-view.c
@@ -817,6 +817,7 @@ open_location (FMDirectoryView *directory_view,
{
NautilusFile *file;
GtkWindow *window;
+ GFile *location;
g_assert (FM_IS_DIRECTORY_VIEW (directory_view));
g_assert (new_uri != NULL);
@@ -835,8 +836,10 @@ open_location (FMDirectoryView *directory_view,
window = fm_directory_view_get_containing_window (directory_view);
nautilus_debug_log (FALSE, NAUTILUS_DEBUG_LOG_DOMAIN_USER,
"directory view open_location window=%p: %s", window, new_uri);
+ location = g_file_new_for_uri (new_uri);
nautilus_window_info_open_location (directory_view->details->window,
- new_uri, mode, flags, NULL);
+ location, mode, flags, NULL);
+ g_object_unref (location);
}
static void
diff --git a/src/file-manager/fm-tree-view.c b/src/file-manager/fm-tree-view.c
index 6b21fed78..d91439f89 100644
--- a/src/file-manager/fm-tree-view.c
+++ b/src/file-manager/fm-tree-view.c
@@ -337,6 +337,7 @@ got_activation_uri_callback (NautilusFile *file, gpointer callback_data)
FMTreeView *view;
GdkScreen *screen;
NautilusWindowOpenMode mode;
+ GFile *location;
view = FM_TREE_VIEW (callback_data);
@@ -380,12 +381,14 @@ got_activation_uri_callback (NautilusFile *file, gpointer callback_data)
nautilus_debug_log (FALSE, NAUTILUS_DEBUG_LOG_DOMAIN_USER,
"tree view window_info_open_location window=%p: %s",
view->details->window, uri);
+ location = g_file_new_for_uri (uri);
nautilus_window_info_open_location
(view->details->window,
- uri,
+ location,
mode,
0,
NULL);
+ g_object_unref (location);
} else {
nautilus_debug_log (FALSE, NAUTILUS_DEBUG_LOG_DOMAIN_USER,
"tree view launch_application_from_command window=%p: %s",
@@ -404,12 +407,14 @@ got_activation_uri_callback (NautilusFile *file, gpointer callback_data)
nautilus_debug_log (FALSE, NAUTILUS_DEBUG_LOG_DOMAIN_USER,
"tree view window_info_open_location window=%p: %s",
view->details->window, uri);
+ location = g_file_new_for_uri (uri);
nautilus_window_info_open_location
(view->details->window,
- uri,
+ location,
mode,
0,
NULL);
+ g_object_unref (location);
}
}
diff --git a/src/nautilus-application.c b/src/nautilus-application.c
index 562b3f80a..ade24a0aa 100644
--- a/src/nautilus-application.c
+++ b/src/nautilus-application.c
@@ -71,6 +71,7 @@
#include <gtk/gtkinvisible.h>
#include <gtk/gtksignal.h>
#include <gtk/gtkwindow.h>
+#include <gio/gfile.h>
#include <libgnome/gnome-config.h>
#include <libgnome/gnome-util.h>
#include <libgnomeui/gnome-authentication-manager.h>
@@ -872,7 +873,7 @@ nautilus_application_get_existing_spatial_window (const char *location)
l != NULL; l = l->next) {
char *window_location;
- window_location = nautilus_window_get_location (NAUTILUS_WINDOW (l->data));
+ window_location = nautilus_window_get_location_uri (NAUTILUS_WINDOW (l->data));
if (window_location != NULL &&
strcmp (location, window_location) == 0) {
g_free (window_location);
@@ -891,7 +892,7 @@ find_parent_spatial_window (NautilusSpatialWindow *window)
char *location;
char *desktop_directory;
- location = nautilus_window_get_location (NAUTILUS_WINDOW (window));
+ location = nautilus_window_get_location_uri (NAUTILUS_WINDOW (window));
if (location == NULL) {
return NULL;
}
@@ -1038,7 +1039,7 @@ NautilusWindow *
nautilus_application_present_spatial_window (NautilusApplication *application,
NautilusWindow *requesting_window,
const char *startup_id,
- const char *location,
+ GFile *location,
GdkScreen *screen)
{
return nautilus_application_present_spatial_window_with_selection (application,
@@ -1130,13 +1131,13 @@ NautilusWindow *
nautilus_application_present_spatial_window_with_selection (NautilusApplication *application,
NautilusWindow *requesting_window,
const char *startup_id,
- const char *location,
+ GFile *location,
GList *new_selection,
GdkScreen *screen)
{
NautilusWindow *window;
GList *l;
- GFile *existing_location_f, *location_f;
+ char *uri;
g_return_val_if_fail (NAUTILUS_IS_APPLICATION (application), NULL);
@@ -1144,7 +1145,7 @@ nautilus_application_present_spatial_window_with_selection (NautilusApplication
for (l = nautilus_application_get_spatial_window_list ();
l != NULL; l = l->next) {
NautilusWindow *existing_window;
- char *existing_location;
+ GFile *existing_location;
existing_window = NAUTILUS_WINDOW (l->data);
existing_location = existing_window->details->pending_location;
@@ -1153,30 +1154,25 @@ nautilus_application_present_spatial_window_with_selection (NautilusApplication
existing_location = existing_window->details->location;
}
- location_f = g_file_new_for_uri (location);
- existing_location_f = g_file_new_for_uri (existing_location);
-
- if (g_file_equal (existing_location_f, location_f)) {
+ if (g_file_equal (existing_location, location)) {
#ifdef HAVE_STARTUP_NOTIFICATION
end_startup_notification (GTK_WIDGET (existing_window),
startup_id);
#endif
- g_object_unref (location_f);
- g_object_unref (existing_location_f);
gtk_window_present (GTK_WINDOW (existing_window));
if (new_selection &&
existing_window->content_view != NULL) {
nautilus_view_set_selection (existing_window->content_view, new_selection);
}
+ uri = g_file_get_uri (location);
nautilus_debug_log (FALSE, NAUTILUS_DEBUG_LOG_DOMAIN_USER,
"present EXISTING spatial window=%p: %s",
- existing_window, location);
+ existing_window, uri);
+ g_free (uri);
return existing_window;
}
- g_object_unref (location_f);
- g_object_unref (existing_location_f);
}
window = create_window (application, NAUTILUS_TYPE_SPATIAL_WINDOW, startup_id, screen);
@@ -1213,9 +1209,11 @@ nautilus_application_present_spatial_window_with_selection (NautilusApplication
nautilus_window_go_to_with_selection (window, location, new_selection);
+ uri = g_file_get_uri (location);
nautilus_debug_log (FALSE, NAUTILUS_DEBUG_LOG_DOMAIN_USER,
"present NEW spatial window=%p: %s",
- window, location);
+ window, uri);
+ g_free (uri);
return window;
}
@@ -1362,7 +1360,7 @@ volume_unmounted_callback (GVolumeMonitor *monitor,
for (node = window_list; node != NULL; node = node->next) {
window = NAUTILUS_WINDOW (node->data);
if (window != NULL && window_can_be_closed (window)) {
- uri = nautilus_window_get_location (window);
+ uri = nautilus_window_get_location_uri (window);
location = g_file_new_for_uri (uri);
if (g_file_contains_file (root, location)) {
@@ -1519,7 +1517,7 @@ save_session_to_file (void)
}
}
- tmp = nautilus_window_get_location (window);
+ tmp = nautilus_window_get_location_uri (window);
xmlNewProp (win_node, "location", tmp);
g_free (tmp);
}
@@ -1625,7 +1623,8 @@ nautilus_application_load_session (NautilusApplication *application,
}
} else if (!strcmp (node->name, "window")) {
NautilusWindow *window;
- xmlChar *type, *location;
+ xmlChar *type, *location_uri;
+ GFile *location;
type = xmlGetProp (node, "type");
if (type == NULL) {
@@ -1634,8 +1633,8 @@ nautilus_application_load_session (NautilusApplication *application,
continue;
}
- location = xmlGetProp (node, "location");
- if (location == NULL) {
+ location_uri = xmlGetProp (node, "location");
+ if (location_uri == NULL) {
g_message ("empty location node while parsing %s", filename);
bail = TRUE;
xmlFree (type);
@@ -1676,16 +1675,20 @@ nautilus_application_load_session (NautilusApplication *application,
gtk_window_set_keep_above (GTK_WINDOW (window), FALSE);
}
+ location = g_file_new_for_uri (location_uri);
nautilus_window_open_location (window, location, FALSE);
+ g_object_unref (location);
} else if (!strcmp (type, "spatial")) {
+ location = g_file_new_for_uri (location_uri);
window = nautilus_application_present_spatial_window (application, NULL, NULL, location, gdk_screen_get_default ());
+ g_object_unref (location);
} else {
g_message ("unknown window type \"%s\" while parsing %s", type, filename);
bail = TRUE;
}
xmlFree (type);
- xmlFree (location);
+ xmlFree (location_uri);
} else {
g_message ("unexpected node %s while parsing %s", node->name, filename);
bail = TRUE;
diff --git a/src/nautilus-application.h b/src/nautilus-application.h
index 80a10917d..870bbddd0 100644
--- a/src/nautilus-application.h
+++ b/src/nautilus-application.h
@@ -84,12 +84,12 @@ unsigned int nautilus_application_get_n_windows (void);
NautilusWindow * nautilus_application_present_spatial_window (NautilusApplication *application,
NautilusWindow *requesting_window,
const char *startup_id,
- const char *location,
+ GFile *location,
GdkScreen *screen);
NautilusWindow * nautilus_application_present_spatial_window_with_selection (NautilusApplication *application,
NautilusWindow *requesting_window,
const char *startup_id,
- const char *location,
+ GFile *location,
GList *new_selection,
GdkScreen *screen);
diff --git a/src/nautilus-bookmark-list.c b/src/nautilus-bookmark-list.c
index ca2ce32fa..d2ced9485 100644
--- a/src/nautilus-bookmark-list.c
+++ b/src/nautilus-bookmark-list.c
@@ -64,16 +64,22 @@ new_bookmark_from_uri (const char *uri, const char *label)
gboolean has_label;
GFile *location;
+ location = NULL;
+ if (uri) {
+ location = g_file_new_for_uri (uri);
+ }
+
has_label = FALSE;
if (!label) {
- name = nautilus_compute_title_for_uri (uri);
+ name = nautilus_compute_title_for_location (location);
} else {
name = g_strdup (label);
has_label = TRUE;
}
+ new_bookmark = NULL;
+
if (uri) {
- location = g_file_new_for_uri (uri);
file = nautilus_file_get (location);
icon = NULL;
@@ -81,22 +87,20 @@ new_bookmark_from_uri (const char *uri, const char *label)
NAUTILUS_FILE_ATTRIBUTES_FOR_ICON)) {
icon = nautilus_file_get_gicon (file, 0);
}
+ nautilus_file_unref (file);
+
if (icon == NULL) {
icon = g_themed_icon_new ("gnome-fs-directory");
}
new_bookmark = nautilus_bookmark_new_with_icon (location, name, has_label, icon);
- g_object_unref (location);
- nautilus_file_unref (file);
g_object_unref (icon);
- g_free (name);
- return new_bookmark;
}
-
g_free (name);
- return NULL;
+ g_object_unref (location);
+ return new_bookmark;
}
static GFile *
diff --git a/src/nautilus-bookmarks-window.c b/src/nautilus-bookmarks-window.c
index 1d1a2c748..0989f1762 100644
--- a/src/nautilus-bookmarks-window.c
+++ b/src/nautilus-bookmarks-window.c
@@ -543,7 +543,7 @@ open_selected_bookmark (gpointer user_data, GdkScreen *screen)
{
NautilusBookmark *selected;
NautilusWindow *window;
- char *uri = NULL;
+ GFile *location;
selected = get_selected_bookmark ();
@@ -551,36 +551,35 @@ open_selected_bookmark (gpointer user_data, GdkScreen *screen)
return;
}
- uri = nautilus_bookmark_get_uri (selected);
-
- if (!uri) {
+ location = nautilus_bookmark_get_location (selected);
+ if (location == NULL) {
return;
}
if (NAUTILUS_IS_NAVIGATION_WINDOW (user_data)) {
- nautilus_window_go_to (NAUTILUS_WINDOW (user_data), uri);
+ nautilus_window_go_to (NAUTILUS_WINDOW (user_data), location);
} else if (NAUTILUS_IS_SPATIAL_WINDOW (user_data)) {
window = nautilus_application_present_spatial_window (application,
NULL,
NULL,
- uri,
+ location,
screen);
} else { /* window that opened bookmarks window has been closed */
if (parent_is_browser_window || eel_preferences_get_boolean (NAUTILUS_PREFERENCES_ALWAYS_USE_BROWSER)) {
window = nautilus_application_create_navigation_window (application,
NULL,
screen);
- nautilus_window_go_to (window, uri);
+ nautilus_window_go_to (window, location);
} else {
window = nautilus_application_present_spatial_window (application,
NULL,
NULL,
- uri,
+ location,
screen);
}
}
- g_free (uri);
+ g_object_unref (location);
}
static void
diff --git a/src/nautilus-connect-server-dialog-nonmain.c b/src/nautilus-connect-server-dialog-nonmain.c
index 408eb8838..3831a73a4 100644
--- a/src/nautilus-connect-server-dialog-nonmain.c
+++ b/src/nautilus-connect-server-dialog-nonmain.c
@@ -36,17 +36,20 @@ nautilus_connect_server_dialog_present_uri (NautilusApplication *application,
GtkWidget *widget)
{
NautilusWindow *window;
+ GFile *location;
+ location = g_file_new_for_uri (uri);
if (eel_preferences_get_boolean (NAUTILUS_PREFERENCES_ALWAYS_USE_BROWSER)) {
window = nautilus_application_create_navigation_window (application,
NULL,
gtk_widget_get_screen (widget));
- nautilus_window_go_to (window, uri);
+ nautilus_window_go_to (window, location);
} else {
nautilus_application_present_spatial_window (application,
NULL,
NULL,
- uri,
+ location,
gtk_widget_get_screen (widget));
}
+ g_object_unref (location);
}
diff --git a/src/nautilus-desktop-window.c b/src/nautilus-desktop-window.c
index c39ba25b0..e6217815d 100644
--- a/src/nautilus-desktop-window.c
+++ b/src/nautilus-desktop-window.c
@@ -83,10 +83,14 @@ nautilus_desktop_window_delete_event (NautilusDesktopWindow *window)
void
nautilus_desktop_window_update_directory (NautilusDesktopWindow *window)
{
+ GFile *location;
+
g_assert (NAUTILUS_IS_DESKTOP_WINDOW (window));
NAUTILUS_SPATIAL_WINDOW (window)->affect_spatial_window_on_next_location_change = TRUE;
- nautilus_window_go_to (NAUTILUS_WINDOW (window), EEL_DESKTOP_URI);
+ location = g_file_new_for_uri (EEL_DESKTOP_URI);
+ nautilus_window_go_to (NAUTILUS_WINDOW (window), location);
+ g_object_unref (location);
}
static void
diff --git a/src/nautilus-history-sidebar.c b/src/nautilus-history-sidebar.c
index 5335cff0e..61a30b3e5 100644
--- a/src/nautilus-history-sidebar.c
+++ b/src/nautilus-history-sidebar.c
@@ -145,7 +145,7 @@ row_activated_callback (GtkTreeView *tree_view,
GtkTreeModel *model;
GtkTreeIter iter;
NautilusBookmark *bookmark;
- char *uri;
+ GFile *location;
sidebar = NAUTILUS_HISTORY_SIDEBAR (user_data);
model = gtk_tree_view_get_model (tree_view);
@@ -158,11 +158,11 @@ row_activated_callback (GtkTreeView *tree_view,
(model, &iter, HISTORY_SIDEBAR_COLUMN_BOOKMARK, &bookmark, -1);
/* Navigate to the clicked location. */
- uri = nautilus_bookmark_get_uri (NAUTILUS_BOOKMARK (bookmark));
+ location = nautilus_bookmark_get_location (NAUTILUS_BOOKMARK (bookmark));
nautilus_window_info_open_location
(sidebar->window,
- uri, NAUTILUS_WINDOW_OPEN_ACCORDING_TO_MODE, 0, NULL);
- g_free (uri);
+ location, NAUTILUS_WINDOW_OPEN_ACCORDING_TO_MODE, 0, NULL);
+ g_object_unref (location);
}
static void
diff --git a/src/nautilus-location-bar.c b/src/nautilus-location-bar.c
index 875cec494..17d39de34 100644
--- a/src/nautilus-location-bar.c
+++ b/src/nautilus-location-bar.c
@@ -123,6 +123,7 @@ drag_data_received_callback (GtkWidget *widget,
gboolean new_windows_for_extras;
char *prompt;
char *detail;
+ GFile *location;
g_assert (NAUTILUS_IS_LOCATION_BAR (widget));
g_assert (data != NULL);
@@ -184,7 +185,9 @@ drag_data_received_callback (GtkWidget *widget,
for (i = 1; names[i] != NULL; ++i) {
new_window = nautilus_application_create_navigation_window (application, NULL, screen);
- nautilus_window_go_to (new_window, names[i]);
+ location = g_file_new_for_uri (names[i]);
+ nautilus_window_go_to (new_window, location);
+ g_object_unref (location);
}
}
diff --git a/src/nautilus-location-dialog.c b/src/nautilus-location-dialog.c
index a81d6177f..edd314d30 100644
--- a/src/nautilus-location-dialog.c
+++ b/src/nautilus-location-dialog.c
@@ -77,18 +77,13 @@ static void
open_current_location (NautilusLocationDialog *dialog)
{
GFile *location;
- char *uri;
char *user_location;
user_location = gtk_editable_get_chars (GTK_EDITABLE (dialog->details->entry), 0, -1);
location = g_file_parse_name (user_location);
- g_free (user_location);
- uri = g_file_get_uri (location);
+ nautilus_window_go_to (dialog->details->window, location);
g_object_unref (location);
-
- nautilus_window_go_to (dialog->details->window, uri);
-
- g_free (uri);
+ g_free (user_location);
}
static void
@@ -222,7 +217,7 @@ nautilus_location_dialog_new (NautilusWindow *window)
}
- location = nautilus_window_get_location (window);
+ location = nautilus_window_get_location_uri (window);
if (location != NULL) {
if (NAUTILUS_IS_DESKTOP_WINDOW (window)) {
formatted_location = g_strdup_printf ("%s/", g_get_home_dir ());
diff --git a/src/nautilus-navigation-window.c b/src/nautilus-navigation-window.c
index a40a7590f..8fde48185 100644
--- a/src/nautilus-navigation-window.c
+++ b/src/nautilus-navigation-window.c
@@ -388,24 +388,24 @@ always_use_location_entry_changed (gpointer callback_data)
static int
bookmark_list_get_uri_index (GList *list,
- const char *uri)
+ GFile *location)
{
NautilusBookmark *bookmark;
GList *l;
- char *tmp;
+ GFile *tmp;
int i;
- g_return_val_if_fail (uri != NULL, -1);
+ g_return_val_if_fail (location != NULL, -1);
for (i = 0, l = list; l != NULL; i++, l = l->next) {
bookmark = NAUTILUS_BOOKMARK (l->data);
- tmp = nautilus_bookmark_get_uri (bookmark);
- if (strcmp (tmp, uri) == 0) {
- g_free (tmp);
+ tmp = nautilus_bookmark_get_location (bookmark);
+ if (g_file_equal (location, tmp)) {
+ g_object_unref (tmp);
return i;
}
- g_free (tmp);
+ g_object_unref (tmp);
}
return -1;
@@ -417,21 +417,16 @@ path_bar_location_changed_callback (GtkWidget *widget,
NautilusNavigationWindow *window)
{
int i;
- char *uri;
g_assert (NAUTILUS_IS_NAVIGATION_WINDOW (window));
- uri = g_file_get_uri (location);
-
/* check whether we already visited the target location */
- i = bookmark_list_get_uri_index (window->back_list, uri);
+ i = bookmark_list_get_uri_index (window->back_list, location);
if (i >= 0) {
nautilus_navigation_window_back_or_forward (window, TRUE, i);
} else {
- nautilus_window_go_to (NAUTILUS_WINDOW (window), uri);
+ nautilus_window_go_to (NAUTILUS_WINDOW (window), location);
}
-
- g_free (uri);
}
static void
@@ -470,8 +465,12 @@ navigation_bar_location_changed_callback (GtkWidget *widget,
const char *uri,
NautilusNavigationWindow *window)
{
+ GFile *location;
+
hide_temporary_bars (window);
- nautilus_window_go_to (NAUTILUS_WINDOW (window), uri);
+ location = g_file_new_for_uri (uri);
+ nautilus_window_go_to (NAUTILUS_WINDOW (window), location);
+ g_object_unref (location);
}
static void
@@ -1068,9 +1067,13 @@ search_bar_activate_callback (NautilusSearchBar *bar,
NautilusDirectory *directory;
NautilusSearchDirectory *search_directory;
NautilusQuery *query;
+ GFile *location;
uri = nautilus_search_directory_generate_new_uri ();
- directory = nautilus_directory_get_by_uri (uri);
+ location = g_file_new_for_uri (uri);
+ g_free (uri);
+
+ directory = nautilus_directory_get (location);
g_assert (NAUTILUS_IS_SEARCH_DIRECTORY (directory));
@@ -1079,7 +1082,7 @@ search_bar_activate_callback (NautilusSearchBar *bar,
query = nautilus_search_bar_get_query (NAUTILUS_SEARCH_BAR (NAUTILUS_NAVIGATION_WINDOW (window)->search_bar));
if (query != NULL) {
if (!nautilus_search_directory_is_indexed (search_directory)) {
- current_uri = nautilus_window_get_location (window);
+ current_uri = nautilus_window_get_location_uri (window);
nautilus_query_set_location (query, current_uri);
g_free (current_uri);
}
@@ -1087,10 +1090,10 @@ search_bar_activate_callback (NautilusSearchBar *bar,
g_object_unref (query);
}
- nautilus_window_go_to (window, uri);
+ nautilus_window_go_to (window, location);
nautilus_directory_unref (directory);
- g_free (uri);
+ g_object_unref (location);
}
static void
diff --git a/src/nautilus-places-sidebar.c b/src/nautilus-places-sidebar.c
index 8d48c5cd2..e2d931b35 100644
--- a/src/nautilus-places-sidebar.c
+++ b/src/nautilus-places-sidebar.c
@@ -790,7 +790,7 @@ bookmarks_drop_uris (NautilusPlacesSidebar *sidebar,
location = g_file_new_for_uri (uri);
nautilus_file_unref (file);
- name = nautilus_compute_title_for_uri (uri);
+ name = nautilus_compute_title_for_location (location);
icon = g_themed_icon_new ("gnome-fs-directory");
bookmark = nautilus_bookmark_new_with_icon (location, name,
@@ -1163,6 +1163,7 @@ open_selected_bookmark (NautilusPlacesSidebar *sidebar,
gboolean open_in_new_window)
{
GtkTreeIter iter;
+ GFile *location;
char *uri;
if (!path) {
@@ -1179,19 +1180,22 @@ open_selected_bookmark (NautilusPlacesSidebar *sidebar,
nautilus_debug_log (FALSE, NAUTILUS_DEBUG_LOG_DOMAIN_USER,
"activate from places sidebar window=%p: %s",
sidebar->window, uri);
+ location = g_file_new_for_uri (uri);
/* Navigate to the clicked location */
if (!open_in_new_window) {
- nautilus_window_info_open_location (sidebar->window, uri,
+ nautilus_window_info_open_location (sidebar->window, location,
NAUTILUS_WINDOW_OPEN_ACCORDING_TO_MODE,
0, NULL);
} else {
NautilusWindow *cur, *new;
+
cur = NAUTILUS_WINDOW (sidebar->window);
new = nautilus_application_create_navigation_window (cur->application,
NULL,
gtk_window_get_screen (GTK_WINDOW (cur)));
- nautilus_window_go_to (new, uri);
+ nautilus_window_go_to (new, location);
}
+ g_object_unref (location);
g_free (uri);
} else {
diff --git a/src/nautilus-shell.c b/src/nautilus-shell.c
index 6938cd254..308feb2cb 100644
--- a/src/nautilus-shell.c
+++ b/src/nautilus-shell.c
@@ -134,7 +134,7 @@ static void
open_window (NautilusShell *shell, const char *uri, const char *startup_id,
const char *geometry, gboolean browser_window)
{
- char *home_uri;
+ GFile *location;
NautilusWindow *window;
if (browser_window ||
@@ -145,22 +145,23 @@ open_window (NautilusShell *shell, const char *uri, const char *startup_id,
if (uri == NULL) {
nautilus_window_go_home (window);
} else {
- nautilus_window_go_to (window, uri);
+ location = g_file_new_for_uri (uri);
+ nautilus_window_go_to (window, location);
+ g_object_unref (location);
}
} else {
- home_uri = NULL;
-
if (uri == NULL) {
- home_uri = nautilus_get_home_directory_uri ();
- uri = home_uri;
+ location = g_file_new_for_path (g_get_home_dir ());
+ } else {
+ location = g_file_new_for_uri (uri);
}
window = nautilus_application_present_spatial_window (shell->details->application,
NULL,
startup_id,
- uri,
+ location,
gdk_screen_get_default ());
- g_free (home_uri);
+ g_object_unref (location);
}
if (geometry != NULL && !GTK_WIDGET_VISIBLE (window)) {
@@ -396,7 +397,7 @@ save_window_states (void)
gdk_window = GTK_WIDGET (window)->window;
gdk_window_get_root_origin (gdk_window, &x, &y);
- location = nautilus_window_get_location (window);
+ location = nautilus_window_get_location_uri (window);
screen_num = gdk_screen_get_number (
gtk_window_get_screen (GTK_WINDOW (window)));
@@ -468,11 +469,15 @@ restore_one_window_callback (const char *attributes,
/* don't always create object windows here */
#endif
if (eel_strlen (location) > 0) {
+ GFile *f;
+
+ f = g_file_new_for_uri (location);
window = nautilus_application_present_spatial_window (shell->details->application,
NULL,
NULL,
- location,
+ f,
screen);
+ g_object_unref (f);
} else {
window = nautilus_application_create_navigation_window (shell->details->application,
NULL,
diff --git a/src/nautilus-spatial-window.c b/src/nautilus-spatial-window.c
index c85650550..42aabe810 100644
--- a/src/nautilus-spatial-window.c
+++ b/src/nautilus-spatial-window.c
@@ -488,7 +488,7 @@ location_menu_item_activated_callback (GtkWidget *menu_item,
GFile *dest;
GdkEvent *event;
- location = nautilus_window_get_location (NAUTILUS_WINDOW (window));
+ location = nautilus_window_get_location_uri (NAUTILUS_WINDOW (window));
current = g_file_new_for_uri (location);
g_free (location);
@@ -498,7 +498,6 @@ location_menu_item_activated_callback (GtkWidget *menu_item,
if (!g_file_equal (current, dest))
{
- char *uri;
GFile *child;
gboolean close_behind;
GList *selection;
@@ -506,14 +505,9 @@ location_menu_item_activated_callback (GtkWidget *menu_item,
close_behind = FALSE;
selection = NULL;
- uri = g_file_get_uri (dest);
-
child = g_object_get_data (G_OBJECT(menu_item), "child_uri");
-
if (child != NULL) {
- char *child_uri;
- child_uri = g_file_get_uri (child);
- selection = g_list_prepend (NULL, child_uri);
+ selection = g_list_prepend (NULL, g_object_ref (child));
}
if (event != NULL && ((GdkEventAny *) event)->type == GDK_BUTTON_RELEASE &&
@@ -524,10 +518,9 @@ location_menu_item_activated_callback (GtkWidget *menu_item,
}
nautilus_window_open_location_with_selection (NAUTILUS_WINDOW (window),
- uri, selection, close_behind);
+ dest, selection, close_behind);
- eel_g_list_free_deep (selection);
- g_free (uri);
+ eel_g_object_list_free (selection);
}
if (event != NULL) {
@@ -637,7 +630,7 @@ location_button_clicked_callback (GtkWidget *widget,
popup = gtk_menu_new ();
first_item = NULL;
- location = nautilus_window_get_location (NAUTILUS_WINDOW (window));
+ location = nautilus_window_get_location_uri (NAUTILUS_WINDOW (window));
g_return_if_fail (location != NULL);
uri = g_file_new_for_uri (location);
@@ -763,7 +756,7 @@ get_data_binder (NautilusDragEachSelectedItemDataGet iteratee,
g_assert (NAUTILUS_IS_SPATIAL_WINDOW (iterator_context));
window = NAUTILUS_SPATIAL_WINDOW (iterator_context);
- location = nautilus_window_get_location (NAUTILUS_WINDOW (window));
+ location = nautilus_window_get_location_uri (NAUTILUS_WINDOW (window));
icon_size = get_dnd_icon_size (window);
iteratee (location,
@@ -869,11 +862,14 @@ action_search_callback (GtkAction *action,
{
NautilusWindow *window;
char *uri;
+ GFile *f;
window = NAUTILUS_WINDOW (user_data);
uri = nautilus_search_directory_generate_new_uri ();
- nautilus_window_go_to (window, uri);
+ f = g_file_new_for_uri (uri);
+ nautilus_window_go_to (window, f);
+ g_object_unref (f);
g_free (uri);
}
diff --git a/src/nautilus-window-manage-views.c b/src/nautilus-window-manage-views.c
index 30460b18e..51208b17d 100644
--- a/src/nautilus-window-manage-views.c
+++ b/src/nautilus-window-manage-views.c
@@ -87,7 +87,7 @@ static void connect_view (NautilusWindow
static void disconnect_view (NautilusWindow *window,
NautilusView *view);
static void begin_location_change (NautilusWindow *window,
- const char *location,
+ GFile *location,
GList *new_selection,
NautilusLocationChangeType type,
guint distance,
@@ -101,9 +101,9 @@ static void create_content_view (NautilusWindow
const char *view_id);
static void display_view_selection_failure (NautilusWindow *window,
NautilusFile *file,
- const char *location);
+ GFile *location);
static void load_new_location (NautilusWindow *window,
- const char *location,
+ GFile *location,
GList *selection,
gboolean tell_current_content_view,
gboolean tell_new_content_view);
@@ -123,18 +123,17 @@ nautilus_window_report_selection_changed (NautilusWindowInfo *window)
/* set_displayed_location:
*/
static void
-set_displayed_location (NautilusWindow *window, const char *location)
+set_displayed_location (NautilusWindow *window, GFile *location)
{
GFile *bookmark_location;
gboolean recreate;
- GFile *loc;
+ char *name;
- loc = g_file_new_for_uri (location);
if (window->current_location_bookmark == NULL || location == NULL) {
recreate = TRUE;
} else {
bookmark_location = nautilus_bookmark_get_location (window->current_location_bookmark);
- recreate = !g_file_equal (bookmark_location, loc);
+ recreate = !g_file_equal (bookmark_location, location);
g_object_unref (bookmark_location);
}
@@ -144,31 +143,30 @@ set_displayed_location (NautilusWindow *window, const char *location)
g_object_unref (window->last_location_bookmark);
}
window->last_location_bookmark = window->current_location_bookmark;
+ name = g_file_get_uri (location);
window->current_location_bookmark = (location == NULL) ? NULL
- : nautilus_bookmark_new (loc, location);
+ : nautilus_bookmark_new (location, name);
+ g_free (name);
}
nautilus_window_update_title (window);
nautilus_window_update_icon (window);
- g_object_unref (loc);
}
static void
-check_bookmark_location_matches (NautilusBookmark *bookmark, const char *uri)
+check_bookmark_location_matches (NautilusBookmark *bookmark, GFile *location)
{
GFile *bookmark_location;
- GFile *location;
- char *bookmark_uri;
-
- location = g_file_new_for_uri (uri);
+ char *bookmark_uri, *uri;
bookmark_location = nautilus_bookmark_get_location (bookmark);
if (!g_file_equal (location, bookmark_location)) {
bookmark_uri = g_file_get_uri (bookmark_location);
+ uri = g_file_get_uri (location);
g_warning ("bookmark uri is %s, but expected %s", bookmark_uri, uri);
+ g_free (uri);
g_free (bookmark_uri);
}
g_object_unref (bookmark_location);
- g_object_unref (location);
}
/* Debugging function used to verify that the last_location_bookmark
@@ -183,7 +181,7 @@ check_last_bookmark_location_matches_window (NautilusWindow *window)
}
static void
-handle_go_back (NautilusNavigationWindow *window, const char *location)
+handle_go_back (NautilusNavigationWindow *window, GFile *location)
{
guint i;
GList *link;
@@ -222,7 +220,7 @@ handle_go_back (NautilusNavigationWindow *window, const char *location)
}
static void
-handle_go_forward (NautilusNavigationWindow *window, const char *location)
+handle_go_forward (NautilusNavigationWindow *window, GFile *location)
{
guint i;
GList *link;
@@ -261,24 +259,19 @@ handle_go_forward (NautilusNavigationWindow *window, const char *location)
}
static void
-handle_go_elsewhere (NautilusWindow *window, const char *location_uri)
+handle_go_elsewhere (NautilusWindow *window, GFile *location)
{
- GFile *location;
- GFile *current_location;
-
#if !NEW_UI_COMPLETE
if (NAUTILUS_IS_NAVIGATION_WINDOW (window)) {
- location = g_file_new_for_uri (location_uri);
/* Clobber the entire forward list, and move displayed location to back list */
nautilus_navigation_window_clear_forward_list (NAUTILUS_NAVIGATION_WINDOW (window));
if (window->details->location != NULL) {
- current_location = g_file_new_for_uri (window->details->location);
/* If we're returning to the same uri somehow, don't put this uri on back list.
* This also avoids a problem where set_displayed_location
* didn't update last_location_bookmark since the uri didn't change.
*/
- if (!g_file_equal (current_location, location)) {
+ if (!g_file_equal (window->details->location, location)) {
/* Store bookmark for current location in back list, unless there is no current location */
check_last_bookmark_location_matches_window (window);
/* Use the first bookmark in the history list rather than creating a new one. */
@@ -286,9 +279,7 @@ handle_go_elsewhere (NautilusWindow *window, const char *location_uri)
window->last_location_bookmark);
g_object_ref (NAUTILUS_NAVIGATION_WINDOW (window)->back_list->data);
}
- g_object_unref (current_location);
}
- g_object_unref (location);
}
#endif
}
@@ -297,17 +288,15 @@ static void
update_up_button (NautilusWindow *window)
{
gboolean allowed;
- GFile *current_location, *parent;
+ GFile *parent;
allowed = FALSE;
if (window->details->location != NULL) {
- current_location = g_file_new_for_uri (window->details->location);
- parent = g_file_get_parent (current_location);
+ parent = g_file_get_parent (window->details->location);
allowed = parent != NULL;
if (parent != NULL) {
g_object_unref (parent);
}
- g_object_unref (current_location);
}
nautilus_window_allow_up (window, allowed);
@@ -317,9 +306,9 @@ static void
viewed_file_changed_callback (NautilusFile *file,
NautilusWindow *window)
{
- GFile *location;
- char *new_location;
+ GFile *new_location;
gboolean is_in_trash, was_in_trash;
+ char *uri;
g_assert (NAUTILUS_IS_FILE (file));
g_assert (NAUTILUS_IS_WINDOW (window));
@@ -355,72 +344,65 @@ viewed_file_changed_callback (NautilusFile *file,
end_location_change (window);
if (NAUTILUS_IS_NAVIGATION_WINDOW (window)) {
- /* auto-show existing parent URI. */
- char *uri, *go_to_uri;
- NautilusFile *parent_file;
-
- parent_file = nautilus_file_get_parent (file);
- uri = nautilus_file_get_uri (parent_file);
+ /* auto-show existing parent. */
+ GFile *go_to_file, *parent, *location;
- go_to_uri = nautilus_find_existing_uri_in_hierarchy (uri);
- if (go_to_uri != NULL) {
+ go_to_file = NULL;
+ location = nautilus_file_get_location (file);
+ parent = g_file_get_parent (location);
+ g_object_unref (location);
+ if (parent) {
+ go_to_file = nautilus_find_existing_uri_in_hierarchy (parent);
+ g_object_unref (parent);
+ }
+
+ if (go_to_file != NULL) {
/* the path bar URI will be set to go_to_uri immediately
* in begin_location_change, but we don't want the
* inexistant children to show up anymore */
nautilus_path_bar_clear_buttons (NAUTILUS_PATH_BAR (NAUTILUS_NAVIGATION_WINDOW (window)->path_bar));
- nautilus_window_go_to (NAUTILUS_WINDOW (window), go_to_uri);
- g_free (go_to_uri);
+ nautilus_window_go_to (NAUTILUS_WINDOW (window), go_to_file);
+ g_object_unref (go_to_file);
} else {
nautilus_window_go_home (NAUTILUS_WINDOW (window));
}
-
- g_free (uri);
- nautilus_file_unref (parent_file);
} else {
nautilus_window_close (window);
}
}
} else {
- new_location = nautilus_file_get_uri (file);
+ new_location = nautilus_file_get_location (file);
- /* FIXME: We need to graft the fragment part of the
- * old location onto the new renamed location or we'll
- * lose the fragment part of the location altogether.
- * If we did that, then we woudn't need to ignore
- * fragments in this comparison.
- */
/* If the file was renamed, update location and/or
- * title. Ignore fragments in this comparison, because
- * NautilusFile omits the fragment part.
- */
- if (!eel_uris_match_ignore_fragments (new_location,
- window->details->location)) {
- g_free (window->details->location);
+ * title. */
+ if (!g_file_equal (new_location,
+ window->details->location)) {
+ g_object_unref (window->details->location);
window->details->location = new_location;
/* Check if we can go up. */
update_up_button (window);
#if !NEW_UI_COMPLETE
+ uri = g_file_get_uri (window->details->location);
if (NAUTILUS_IS_NAVIGATION_WINDOW (window)) {
/* Change the location bar and path bar to match the current location. */
nautilus_navigation_bar_set_location
(NAUTILUS_NAVIGATION_BAR (NAUTILUS_NAVIGATION_WINDOW (window)->navigation_bar),
- window->details->location);
- location = g_file_new_for_uri (window->details->location);
+ uri);
nautilus_path_bar_set_path (NAUTILUS_PATH_BAR (NAUTILUS_NAVIGATION_WINDOW (window)->path_bar),
- location);
- g_object_unref (location);
+ window->details->location);
}
if (NAUTILUS_IS_SPATIAL_WINDOW (window)) {
/* Change the location button to match the current location. */
nautilus_spatial_window_set_location_button
(NAUTILUS_SPATIAL_WINDOW (window),
- window->details->location);
+ uri);
}
+ g_free (uri);
#endif
} else {
- g_free (new_location);
+ g_object_unref (new_location);
}
nautilus_window_update_title (window);
@@ -431,7 +413,7 @@ viewed_file_changed_callback (NautilusFile *file,
static void
update_history (NautilusWindow *window,
NautilusLocationChangeType type,
- const char *new_location)
+ GFile *new_location)
{
switch (type) {
case NAUTILUS_LOCATION_CHANGE_STANDARD:
@@ -491,24 +473,33 @@ new_window_show_callback (GtkWidget *widget,
void
nautilus_window_open_location_full (NautilusWindow *window,
- const char *location,
+ GFile *location,
NautilusWindowOpenMode mode,
NautilusWindowOpenFlags flags,
GList *new_selection)
{
NautilusWindow *target_window;
gboolean do_load_location = TRUE;
- char *old_location;
+ GFile *old_location;
+ char *old_uri, *new_uri;
target_window = NULL;
- old_location = nautilus_window_get_location (window);
+ old_uri = nautilus_window_get_location_uri (window);
+ if (old_uri == NULL) {
+ old_uri = g_strdup ("(none)");
+ }
+ new_uri = g_file_get_uri (location);
nautilus_debug_log (FALSE, NAUTILUS_DEBUG_LOG_DOMAIN_USER,
"window %p open location: old=\"%s\", new=\"%s\"",
window,
- old_location ? old_location : "(none)",
- location);
+ old_uri,
+ new_uri);
+ g_free (old_uri);
+ g_free (new_uri);
+
+ old_location = nautilus_window_get_location (window);
switch (mode) {
case NAUTILUS_WINDOW_OPEN_ACCORDING_TO_MODE :
if (eel_preferences_get_boolean (NAUTILUS_PREFERENCES_ALWAYS_USE_BROWSER)) {
@@ -567,7 +558,7 @@ nautilus_window_open_location_full (NautilusWindow *window,
break;
default :
g_warning ("Unknown open location mode");
- g_free (old_location);
+ g_object_unref (old_location);
return;
}
@@ -588,15 +579,15 @@ nautilus_window_open_location_full (NautilusWindow *window,
}
if ((!do_load_location) ||
- (target_window == window && !eel_strcmp (old_location, location))) {
- g_free (old_location);
+ (target_window == window &&
+ old_location && g_file_equal (old_location, location))) {
+ g_object_unref (old_location);
return;
}
- g_free (old_location);
-
- if (!eel_is_valid_uri (location))
- g_warning ("Possibly invalid new URI '%s'\n"
- "This can cause subtle evils like #48423", location);
+
+ if (old_location) {
+ g_object_unref (old_location);
+ }
begin_location_change (target_window, location, new_selection,
NAUTILUS_LOCATION_CHANGE_STANDARD, 0, NULL);
@@ -604,7 +595,7 @@ nautilus_window_open_location_full (NautilusWindow *window,
void
nautilus_window_open_location (NautilusWindow *window,
- const char *location,
+ GFile *location,
gboolean close_behind)
{
NautilusWindowOpenFlags flags;
@@ -621,7 +612,7 @@ nautilus_window_open_location (NautilusWindow *window,
void
nautilus_window_open_location_with_selection (NautilusWindow *window,
- const char *location,
+ GFile *location,
GList *selection,
gboolean close_behind)
{
@@ -731,7 +722,7 @@ nautilus_window_content_view_matches_iid (NautilusWindow *window,
*/
static void
begin_location_change (NautilusWindow *window,
- const char *location,
+ GFile *location,
GList *new_selection,
NautilusLocationChangeType type,
guint distance,
@@ -758,15 +749,15 @@ begin_location_change (NautilusWindow *window,
g_assert (window->details->pending_location == NULL);
g_assert (window->details->pending_selection == NULL);
- window->details->pending_location = g_strdup (location);
+ window->details->pending_location = g_object_ref (location);
window->details->location_change_type = type;
window->details->location_change_distance = distance;
- window->details->pending_selection = eel_g_str_list_copy (new_selection);
+ window->details->pending_selection = eel_g_object_list_copy (new_selection);
window->details->pending_scroll_to = g_strdup (scroll_pos);
- directory = nautilus_directory_get_by_uri (location);
+ directory = nautilus_directory_get (location);
/* The code to force a reload is here because if we do it
* after determining an initial view (in the components), then
@@ -799,7 +790,7 @@ begin_location_change (NautilusWindow *window,
/* Get the info needed for view selection */
- window->details->determine_view_file = nautilus_file_get_by_uri (location);
+ window->details->determine_view_file = nautilus_file_get (location);
g_assert (window->details->determine_view_file != NULL);
@@ -885,7 +876,7 @@ setup_new_window (NautilusWindow *window, NautilusFile *file)
} else {
/* If there is a pending selection, we want to scroll to an item in
* the pending selection list. */
- scroll_string = g_strdup (window->details->pending_selection->data);
+ scroll_string = g_file_get_uri (window->details->pending_selection->data);
}
/* scroll_string might be NULL if there was no saved scroll position. */
@@ -904,8 +895,7 @@ got_file_info_for_view_selection_callback (NautilusFile *file,
char *mimetype;
NautilusWindow *window;
NautilusFile *viewed_file;
- char *location;
- GFile *loc;
+ GFile *location;
window = callback_data;
@@ -984,18 +974,20 @@ got_file_info_for_view_selection_callback (NautilusFile *file,
in which case going home would cause an infinite loop, so we
better test for that */
- loc = g_file_new_for_uri (location);
- if (!nautilus_is_root_directory (loc)) {
- if (!nautilus_is_home_directory (loc)) {
+ if (!nautilus_is_root_directory (location)) {
+ if (!nautilus_is_home_directory (location)) {
nautilus_window_go_home (NAUTILUS_WINDOW (window));
} else {
+ GFile *root;
+
+ root = g_file_new_for_path ("/");
/* the last fallback is to go to a known place that can't be deleted! */
- nautilus_window_go_to (NAUTILUS_WINDOW (window), "file:///");
+ nautilus_window_go_to (NAUTILUS_WINDOW (window), root);
+ g_object_unref (root);
}
} else {
gtk_object_destroy (GTK_OBJECT (window));
}
- g_object_unref (loc);
} else {
/* Since this is a window, destroying it will also unref it. */
gtk_object_destroy (GTK_OBJECT (window));
@@ -1005,7 +997,7 @@ got_file_info_for_view_selection_callback (NautilusFile *file,
end_location_change (window);
/* We disconnected this, so we need to re-connect it */
- viewed_file = nautilus_file_get_by_uri (window->details->location);
+ viewed_file = nautilus_file_get (window->details->location);
nautilus_window_set_viewed_file (window, viewed_file);
nautilus_file_monitor_add (viewed_file, &window->details->viewed_file, 0);
g_signal_connect_object (viewed_file, "changed",
@@ -1089,7 +1081,7 @@ create_content_view (NautilusWindow *window,
FALSE,
TRUE);
- eel_g_list_free_deep (window->details->pending_selection);
+ eel_g_object_list_free (window->details->pending_selection);
window->details->pending_selection = NULL;
} else if (window->details->location != NULL) {
selection = nautilus_view_get_selection (window->content_view);
@@ -1098,7 +1090,7 @@ create_content_view (NautilusWindow *window,
selection,
FALSE,
TRUE);
- eel_g_list_free_deep (selection);
+ eel_g_object_list_free (selection);
} else {
/* Something is busted, there was no location to load.
Just load the homedir. */
@@ -1109,32 +1101,37 @@ create_content_view (NautilusWindow *window,
static void
load_new_location (NautilusWindow *window,
- const char *location,
+ GFile *location,
GList *selection,
gboolean tell_current_content_view,
gboolean tell_new_content_view)
{
GList *selection_copy;
NautilusView *view;
+ char *uri;
g_assert (NAUTILUS_IS_WINDOW (window));
g_assert (location != NULL);
- selection_copy = eel_g_str_list_copy (selection);
+ selection_copy = eel_g_object_list_copy (selection);
view = NULL;
/* Note, these may recurse into report_load_underway */
if (window->content_view != NULL && tell_current_content_view) {
view = window->content_view;
- nautilus_view_load_location (window->content_view, location);
+ uri = g_file_get_uri (location);
+ nautilus_view_load_location (window->content_view, uri);
+ g_free (uri);
}
if (window->new_content_view != NULL && tell_new_content_view &&
(!tell_current_content_view ||
window->new_content_view != window->content_view) ) {
view = window->new_content_view;
- nautilus_view_load_location (window->new_content_view, location);
+ uri = g_file_get_uri (location);
+ nautilus_view_load_location (window->new_content_view, uri);
+ g_free (uri);
}
if (view != NULL) {
/* window->new_content_view might have changed here if
@@ -1142,7 +1139,7 @@ load_new_location (NautilusWindow *window,
nautilus_view_set_selection (view, selection_copy);
}
- eel_g_list_free_deep (selection_copy);
+ eel_g_object_list_free (selection_copy);
}
/* A view started to load the location its viewing, either due to
@@ -1169,7 +1166,8 @@ static void
location_has_really_changed (NautilusWindow *window)
{
GtkWidget *widget;
- char *location_copy;
+ GFile *location_copy;
+ char *uri;
if (window->new_content_view != NULL) {
widget = nautilus_view_get_widget (window->new_content_view);
@@ -1182,7 +1180,7 @@ location_has_really_changed (NautilusWindow *window)
window->new_content_view = NULL;
}
- location_copy = g_strdup (window->details->pending_location);
+ location_copy = g_object_ref (window->details->pending_location);
if (window->details->pending_location != NULL) {
/* Tell the window we are finished. */
update_for_new_location (window);
@@ -1191,20 +1189,24 @@ location_has_really_changed (NautilusWindow *window)
free_location_change (window);
if (location_copy != NULL) {
+ uri = g_file_get_uri (location_copy);
g_signal_emit_by_name (window, "loading_uri",
location_copy);
- g_free (location_copy);
+ g_free (uri);
+ g_object_unref (location_copy);
}
}
static void
-add_extension_extra_widgets (NautilusWindow *window, const char *uri)
+add_extension_extra_widgets (NautilusWindow *window, GFile *location)
{
GList *providers, *l;
GtkWidget *widget;
+ char *uri;
providers = nautilus_module_get_extensions_for_type (NAUTILUS_TYPE_LOCATION_WIDGET_PROVIDER);
+ uri = g_file_get_uri (location);
for (l = providers; l != NULL; l = l->next) {
NautilusLocationWidgetProvider *provider;
@@ -1214,6 +1216,7 @@ add_extension_extra_widgets (NautilusWindow *window, const char *uri)
nautilus_window_add_extra_location_widget (window, widget);
}
}
+ g_free (uri);
nautilus_module_extension_list_free (providers);
}
@@ -1235,11 +1238,11 @@ nautilus_window_show_trash_bar (NautilusWindow *window)
static void
update_for_new_location (NautilusWindow *window)
{
- GFile *location;
- char *new_location;
+ GFile *new_location;
NautilusFile *file;
NautilusDirectory *directory;
gboolean location_really_changed;
+ char *uri;
new_location = window->details->pending_location;
window->details->pending_location = NULL;
@@ -1248,17 +1251,21 @@ update_for_new_location (NautilusWindow *window)
update_history (window, window->details->location_change_type, new_location);
- location_really_changed = eel_strcmp (window->details->location, new_location) != 0;
+ location_really_changed =
+ window->details->location == NULL ||
+ !g_file_equal (window->details->location, new_location);
/* Set the new location. */
- g_free (window->details->location);
+ if (window->details->location) {
+ g_object_unref (window->details->location);
+ }
window->details->location = new_location;
/* Create a NautilusFile for this location, so we can catch it
* if it goes away.
*/
cancel_viewed_file_changed_callback (window);
- file = nautilus_file_get_by_uri (window->details->location);
+ file = nautilus_file_get (window->details->location);
nautilus_window_set_viewed_file (window, file);
window->details->viewed_file_seen = !nautilus_file_is_not_yet_confirmed (file);
window->details->viewed_file_in_trash = nautilus_file_is_in_trash (file);
@@ -1283,7 +1290,7 @@ update_for_new_location (NautilusWindow *window)
if (location_really_changed) {
remove_extra_location_widgets (window);
- directory = nautilus_directory_get_by_uri (window->details->location);
+ directory = nautilus_directory_get (window->details->location);
if (NAUTILUS_IS_SEARCH_DIRECTORY (directory)) {
nautilus_window_set_search_mode (window, TRUE, NAUTILUS_SEARCH_DIRECTORY (directory));
} else {
@@ -1308,20 +1315,21 @@ update_for_new_location (NautilusWindow *window)
nautilus_navigation_window_allow_forward (NAUTILUS_NAVIGATION_WINDOW (window), NAUTILUS_NAVIGATION_WINDOW (window)->forward_list != NULL);
/* Change the location bar and path bar to match the current location. */
+ uri = g_file_get_uri (window->details->location);
nautilus_navigation_bar_set_location (NAUTILUS_NAVIGATION_BAR (NAUTILUS_NAVIGATION_WINDOW (window)->navigation_bar),
- window->details->location);
- location = g_file_new_for_uri (window->details->location);
+ uri);
+ g_free (uri);
nautilus_path_bar_set_path (NAUTILUS_PATH_BAR (NAUTILUS_NAVIGATION_WINDOW (window)->path_bar),
- location);
- g_object_unref (location);
+ window->details->location);
nautilus_navigation_window_load_extension_toolbar_items (NAUTILUS_NAVIGATION_WINDOW (window));
}
if (NAUTILUS_IS_SPATIAL_WINDOW (window)) {
/* Change the location button to match the current location. */
+ uri = g_file_get_uri (window->details->location);
nautilus_spatial_window_set_location_button
- (NAUTILUS_SPATIAL_WINDOW (window),
- window->details->location);
+ (NAUTILUS_SPATIAL_WINDOW (window), uri);
+ g_free (uri);
}
#endif
}
@@ -1348,13 +1356,13 @@ nautilus_window_report_load_complete (NautilusWindow *window,
static void
end_location_change (NautilusWindow *window)
{
- char *location;
+ char *uri;
- location = nautilus_window_get_location (window);
- if (location) {
+ uri = nautilus_window_get_location_uri (window);
+ if (uri) {
nautilus_debug_log (FALSE, NAUTILUS_DEBUG_LOG_DOMAIN_USER,
- "finished loading window %p: %s", window, location);
- g_free (location);
+ "finished loading window %p: %s", window, uri);
+ g_free (uri);
}
nautilus_window_allow_stop (window, FALSE);
@@ -1371,10 +1379,12 @@ end_location_change (NautilusWindow *window)
static void
free_location_change (NautilusWindow *window)
{
- g_free (window->details->pending_location);
+ if (window->details->pending_location) {
+ g_object_unref (window->details->pending_location);
+ }
window->details->pending_location = NULL;
- eel_g_list_free_deep (window->details->pending_selection);
+ eel_g_object_list_free (window->details->pending_selection);
window->details->pending_selection = NULL;
/* Don't free pending_scroll_to, since thats needed until
@@ -1415,7 +1425,7 @@ cancel_location_change (NautilusWindow *window)
selection,
TRUE,
FALSE);
- eel_g_list_free_deep (selection);
+ eel_g_object_list_free (selection);
}
@@ -1427,7 +1437,7 @@ nautilus_window_report_view_failed (NautilusWindow *window,
NautilusView *view)
{
gboolean do_close_window;
- char *fallback_load_location;
+ GFile *fallback_load_location;
g_warning ("A view failed. The UI will handle this with a dialog but this should be debugged.");
@@ -1444,7 +1454,7 @@ nautilus_window_report_view_failed (NautilusWindow *window,
if (window->details->location_change_type != NAUTILUS_LOCATION_CHANGE_FALLBACK) {
report_nascent_content_view_failure_to_user (window, view);
- fallback_load_location = g_strdup (window->details->pending_location);
+ fallback_load_location = g_object_ref (window->details->pending_location);
} else {
if (!GTK_WIDGET_VISIBLE (window)) {
do_close_window = TRUE;
@@ -1458,7 +1468,7 @@ nautilus_window_report_view_failed (NautilusWindow *window,
/* We loose the pending selection change here, but who cares... */
begin_location_change (window, fallback_load_location, NULL,
NAUTILUS_LOCATION_CHANGE_FALLBACK, 0, NULL);
- g_free (fallback_load_location);
+ g_object_unref (fallback_load_location);
}
if (do_close_window) {
@@ -1468,22 +1478,21 @@ nautilus_window_report_view_failed (NautilusWindow *window,
static void
display_view_selection_failure (NautilusWindow *window, NautilusFile *file,
- const char *location)
+ GFile *location)
{
char *full_uri_for_display;
char *uri_for_display;
char *error_message;
char *detail_message;
char *scheme_string;
- const char *host_name;
GtkDialog *dialog;
- GnomeVFSURI *vfs_uri;
GError *error;
+ char *uri;
error = nautilus_file_get_file_info_error (file);
/* Some sort of failure occurred. How 'bout we tell the user? */
- full_uri_for_display = eel_format_uri_for_display (location);
+ full_uri_for_display = g_file_get_parse_name (location);
/* Truncate the URI so it doesn't get insanely wide. Note that even
* though the dialog uses wrapped text, if the URI doesn't contain
* white space then the text-wrapping code is too stupid to wrap it.
@@ -1528,7 +1537,9 @@ display_view_selection_failure (NautilusWindow *window, NautilusFile *file,
/* Can't create a vfs_uri and get the method from that, because
* gnome_vfs_uri_new might return NULL.
*/
- scheme_string = eel_str_get_prefix (location, ":");
+ uri = g_file_get_uri (location);
+ scheme_string = eel_str_get_prefix (uri, ":");
+ g_free (uri);
g_assert (scheme_string != NULL); /* Shouldn't have gotten this error unless there's a : separator. */
error_message = g_strdup_printf (_("Couldn't display \"%s\"."),
uri_for_display);
@@ -1555,13 +1566,9 @@ display_view_selection_failure (NautilusWindow *window, NautilusFile *file,
* But this case is also hit for legitimate web addresses when
* the proxy is set up wrong.
*/
- vfs_uri = gnome_vfs_uri_new (location);
- host_name = gnome_vfs_uri_get_host_name (vfs_uri);
- error_message = g_strdup_printf (_("Couldn't display \"%s\", because no host \"%s\" could be found."),
- uri_for_display,
- host_name ? host_name : "");
+ error_message = g_strdup_printf (_("Couldn't display \"%s\", because the host could be found."),
+ uri_for_display);
detail_message = g_strdup (_("Check that the spelling is correct and that your proxy settings are correct."));
- gnome_vfs_uri_unref (vfs_uri);
break;
case GNOME_VFS_ERROR_HOST_HAS_NO_ADDRESS:
@@ -1631,7 +1638,7 @@ nautilus_window_set_content_view (NautilusWindow *window,
g_return_if_fail (window->details->location != NULL);
g_return_if_fail (id != NULL);
- location = nautilus_window_get_location (window);
+ location = nautilus_window_get_location_uri (window);
nautilus_debug_log (FALSE, NAUTILUS_DEBUG_LOG_DOMAIN_USER,
"change view of window %p: \"%s\" to \"%s\"",
window, location, id);
@@ -1643,7 +1650,7 @@ nautilus_window_set_content_view (NautilusWindow *window,
end_location_change (window);
- file = nautilus_file_get_by_uri (window->details->location);
+ file = nautilus_file_get (window->details->location);
nautilus_file_set_metadata
(file, NAUTILUS_METADATA_KEY_DEFAULT_COMPONENT, NULL, id);
nautilus_file_unref (file);
@@ -1792,7 +1799,7 @@ nautilus_navigation_window_back_or_forward (NautilusNavigationWindow *window,
gboolean back, guint distance)
{
GList *list;
- char *uri;
+ GFile *location;
char *scroll_pos;
guint len;
NautilusBookmark *bookmark;
@@ -1811,16 +1818,16 @@ nautilus_navigation_window_back_or_forward (NautilusNavigationWindow *window,
distance = len - 1;
bookmark = g_list_nth_data (list, distance);
- uri = nautilus_bookmark_get_uri (bookmark);
+ location = nautilus_bookmark_get_location (bookmark);
scroll_pos = nautilus_bookmark_get_scroll_pos (bookmark);
begin_location_change
(NAUTILUS_WINDOW (window),
- uri, NULL,
+ location, NULL,
back ? NAUTILUS_LOCATION_CHANGE_BACK : NAUTILUS_LOCATION_CHANGE_FORWARD,
distance,
scroll_pos);
- g_free (uri);
+ g_object_unref (location);
g_free (scroll_pos);
}
@@ -1828,8 +1835,9 @@ nautilus_navigation_window_back_or_forward (NautilusNavigationWindow *window,
void
nautilus_window_reload (NautilusWindow *window)
{
- char *location;
+ GFile *location;
char *current_pos;
+ GList *selection_uris, *l;
GList *selection;
g_return_if_fail (NAUTILUS_IS_WINDOW (window));
@@ -1841,19 +1849,25 @@ nautilus_window_reload (NautilusWindow *window)
/* window->details->location can be free'd during the processing
* of begin_location_change, so make a copy
*/
- location = g_strdup (window->details->location);
+ location = g_object_ref (window->details->location);
current_pos = NULL;
selection = NULL;
if (window->content_view != NULL) {
current_pos = nautilus_view_get_first_visible_file (window->content_view);
- selection = nautilus_view_get_selection (window->content_view);
+ selection_uris = nautilus_view_get_selection (window->content_view);
+ selection = NULL;
+ for (l = selection_uris; l != NULL; l = l->next) {
+ selection = g_list_prepend (selection, g_file_new_for_uri (l->data));
+ }
+ eel_g_list_free_deep (selection_uris);
+ selection = g_list_reverse (selection);
}
begin_location_change
(window, location, selection,
NAUTILUS_LOCATION_CHANGE_RELOAD, 0, current_pos);
g_free (current_pos);
- g_free (location);
- eel_g_list_free_deep (selection);
+ g_object_unref (location);
+ eel_g_object_list_free (selection);
}
static void
diff --git a/src/nautilus-window-manage-views.h b/src/nautilus-window-manage-views.h
index ea91a8ea8..21d7ffca8 100644
--- a/src/nautilus-window-manage-views.h
+++ b/src/nautilus-window-manage-views.h
@@ -33,14 +33,14 @@
void nautilus_window_manage_views_destroy (NautilusWindow *window);
void nautilus_window_manage_views_finalize (NautilusWindow *window);
void nautilus_window_open_location (NautilusWindow *window,
- const char *location,
+ GFile *location,
gboolean close_behind);
void nautilus_window_open_location_with_selection (NautilusWindow *window,
- const char *location,
+ GFile *location,
GList *selection,
gboolean close_behind);
void nautilus_window_open_location_full (NautilusWindow *window,
- const char *location,
+ GFile *location,
NautilusWindowOpenMode mode,
NautilusWindowOpenFlags flags,
GList *new_selection);
diff --git a/src/nautilus-window-menus.c b/src/nautilus-window-menus.c
index 92c77db14..2d5d54ecd 100644
--- a/src/nautilus-window-menus.c
+++ b/src/nautilus-window-menus.c
@@ -124,16 +124,16 @@ static void
activate_bookmark_in_menu_item (GtkAction *action, gpointer user_data)
{
BookmarkHolder *holder;
- char *uri;
+ GFile *location;
holder = (BookmarkHolder *)user_data;
if (nautilus_bookmark_uri_known_not_to_exist (holder->bookmark)) {
holder->failed_callback (holder->window, holder->bookmark);
} else {
- uri = nautilus_bookmark_get_uri (holder->bookmark);
- nautilus_window_go_to (holder->window, uri);
- g_free (uri);
+ location = nautilus_bookmark_get_location (holder->bookmark);
+ nautilus_window_go_to (holder->window, location);
+ g_object_unref (location);
}
}
@@ -210,7 +210,7 @@ action_connect_to_server_callback (GtkAction *action,
NautilusWindow *window = NAUTILUS_WINDOW (user_data);
GtkWidget *dialog;
char *location;
- location = nautilus_window_get_location (window);
+ location = nautilus_window_get_location_uri (window);
dialog = nautilus_connect_server_dialog_new (window, location);
g_free (location);
@@ -268,45 +268,60 @@ static void
action_go_to_computer_callback (GtkAction *action,
gpointer user_data)
{
+ GFile *computer;
+ computer = g_file_new_for_uri (COMPUTER_URI);
nautilus_window_go_to (NAUTILUS_WINDOW (user_data),
- COMPUTER_URI);
+ computer);
+ g_object_unref (computer);
}
static void
action_go_to_network_callback (GtkAction *action,
gpointer user_data)
{
+ GFile *network;
+ network = g_file_new_for_uri (NETWORK_URI);
nautilus_window_go_to (NAUTILUS_WINDOW (user_data),
- NETWORK_URI);
+ network);
+ g_object_unref (network);
}
static void
action_go_to_templates_callback (GtkAction *action,
gpointer user_data)
{
- char *uri;
+ char *path;
+ GFile *location;
- nautilus_create_templates_directory ();
- uri = nautilus_get_templates_directory_uri ();
+ path = nautilus_get_templates_directory ();
+ location = g_file_new_for_path (path);
+ g_free (path);
nautilus_window_go_to (NAUTILUS_WINDOW (user_data),
- uri);
- g_free (uri);
+ location);
+ g_object_unref (location);
}
static void
action_go_to_trash_callback (GtkAction *action,
gpointer user_data)
{
+ GFile *trash;
+ trash = g_file_new_for_uri ("trash:///");
nautilus_window_go_to (NAUTILUS_WINDOW (user_data),
- "trash:///");
+ trash);
+ g_object_unref (trash);
}
static void
action_go_to_burn_cd_callback (GtkAction *action,
gpointer user_data)
{
+ GFile *burn;
+ burn = g_file_new_for_uri (BURN_CD_URI);
nautilus_window_go_to (NAUTILUS_WINDOW (user_data),
- BURN_CD_URI);
+ burn);
+ g_object_unref (burn);
+
}
static void
diff --git a/src/nautilus-window-private.h b/src/nautilus-window-private.h
index a92b554d6..9f855bd01 100644
--- a/src/nautilus-window-private.h
+++ b/src/nautilus-window-private.h
@@ -68,7 +68,7 @@ struct NautilusWindowDetails
guint bookmarks_merge_id;
/* Current location. */
- char *location;
+ GFile *location;
char *title;
NautilusFile *viewed_file;
gboolean viewed_file_seen;
@@ -78,7 +78,7 @@ struct NautilusWindowDetails
/* New location. */
NautilusLocationChangeType location_change_type;
guint location_change_distance;
- char *pending_location;
+ GFile *pending_location;
char *pending_scroll_to;
GList *pending_selection;
NautilusFile *determine_view_file;
@@ -93,7 +93,7 @@ struct NautilusWindowDetails
char *extra_viewer;
/* Deferred location change. */
- char *location_to_change_to_at_idle;
+ GFile *location_to_change_to_at_idle;
guint location_change_at_idle_id;
NautilusWindowShowHiddenFilesMode show_hidden_files_mode;
diff --git a/src/nautilus-window.c b/src/nautilus-window.c
index 7f4f765ea..740ccd3a0 100644
--- a/src/nautilus-window.c
+++ b/src/nautilus-window.c
@@ -231,20 +231,20 @@ nautilus_window_set_status (NautilusWindow *window, const char *text)
}
void
-nautilus_window_go_to (NautilusWindow *window, const char *uri)
+nautilus_window_go_to (NautilusWindow *window, GFile *location)
{
g_return_if_fail (NAUTILUS_IS_WINDOW (window));
- nautilus_window_open_location (window, uri, FALSE);
+ nautilus_window_open_location (window, location, FALSE);
}
void
-nautilus_window_go_to_with_selection (NautilusWindow *window, const char *uri, GList *new_selection)
+nautilus_window_go_to_with_selection (NautilusWindow *window, GFile *location, GList *new_selection)
{
g_return_if_fail (NAUTILUS_IS_WINDOW (window));
- nautilus_window_open_location_with_selection (window, uri, new_selection, FALSE);
+ nautilus_window_open_location_with_selection (window, location, new_selection, FALSE);
}
static gboolean
@@ -257,9 +257,8 @@ nautilus_window_go_up_signal (NautilusWindow *window, gboolean close_behind)
void
nautilus_window_go_up (NautilusWindow *window, gboolean close_behind)
{
- GFile *location, *parent;
+ GFile *parent;
GList *selection;
- char *parent_uri;
g_return_if_fail (NAUTILUS_IS_WINDOW (window));
@@ -267,23 +266,19 @@ nautilus_window_go_up (NautilusWindow *window, gboolean close_behind)
return;
}
- location = g_file_new_for_uri (window->details->location);
- parent = g_file_get_parent (location);
- g_object_unref (location);
+ parent = g_file_get_parent (window->details->location);
if (parent == NULL) {
return;
}
- parent_uri = g_file_get_uri (parent);
- g_object_unref (parent);
-
- selection = g_list_prepend (NULL, g_strdup (window->details->location));
+ selection = g_list_prepend (NULL, g_object_ref (window->details->location));
- nautilus_window_open_location_with_selection (window, parent_uri, selection, close_behind);
+ nautilus_window_open_location_with_selection (window, parent, selection, close_behind);
+
+ g_object_unref (parent);
- g_free (parent_uri);
- eel_g_list_free_deep (selection);
+ eel_g_object_list_free (selection);
}
static void
@@ -363,13 +358,13 @@ nautilus_window_allow_reload (NautilusWindow *window, gboolean allow)
void
nautilus_window_go_home (NautilusWindow *window)
{
- char *home_uri;
+ GFile *home;
g_return_if_fail (NAUTILUS_IS_WINDOW (window));
- home_uri = nautilus_get_home_directory_uri ();
- nautilus_window_open_location (window, home_uri, FALSE);
- g_free (home_uri);
+ home = g_file_new_for_path (g_get_home_dir ());
+ nautilus_window_open_location (window, home, FALSE);
+ g_object_unref (home);
}
void
@@ -383,11 +378,25 @@ nautilus_window_prompt_for_location (NautilusWindow *window,
}
char *
+nautilus_window_get_location_uri (NautilusWindow *window)
+{
+ g_return_val_if_fail (NAUTILUS_IS_WINDOW (window), NULL);
+
+ if (window->details->location) {
+ return g_file_get_uri (window->details->location);
+ }
+ return NULL;
+}
+
+GFile *
nautilus_window_get_location (NautilusWindow *window)
{
g_return_val_if_fail (NAUTILUS_IS_WINDOW (window), NULL);
- return g_strdup (window->details->location);
+ if (window->details->location != NULL) {
+ return g_object_ref (window->details->location);
+ }
+ return NULL;
}
void
@@ -611,7 +620,9 @@ nautilus_window_finalize (GObject *object)
free_stored_viewers (window);
- g_free (window->details->location);
+ if (window->details->location) {
+ g_object_ref (window->details->location);
+ }
eel_g_list_free_deep (window->details->pending_selection);
if (window->current_location_bookmark != NULL) {
@@ -1118,7 +1129,7 @@ real_get_title (NautilusWindow *window)
}
if (title == NULL) {
- title = nautilus_compute_title_for_uri (window->details->location);
+ title = nautilus_compute_title_for_location (window->details->location);
}
return title;
@@ -1598,7 +1609,7 @@ nautilus_window_info_iface_init (NautilusWindowInfoIface *iface)
iface->get_title = nautilus_window_get_cached_title;
iface->get_history = nautilus_window_get_history;
iface->get_bookmark_list = nautilus_window_get_bookmark_list;
- iface->get_current_location = nautilus_window_get_location;
+ iface->get_current_location = nautilus_window_get_location_uri;
iface->get_ui_manager = nautilus_window_get_ui_manager;
iface->get_selection_count = nautilus_window_get_selection_count;
iface->get_selection = nautilus_window_get_selection;
diff --git a/src/nautilus-window.h b/src/nautilus-window.h
index f46e6afb7..d4ae6d428 100644
--- a/src/nautilus-window.h
+++ b/src/nautilus-window.h
@@ -119,11 +119,12 @@ struct NautilusWindow {
GType nautilus_window_get_type (void);
void nautilus_window_show_window (NautilusWindow *window);
void nautilus_window_close (NautilusWindow *window);
-char * nautilus_window_get_location (NautilusWindow *window);
+char * nautilus_window_get_location_uri (NautilusWindow *window);
+GFile * nautilus_window_get_location (NautilusWindow *window);
void nautilus_window_go_to (NautilusWindow *window,
- const char *location);
+ GFile *location);
void nautilus_window_go_to_with_selection (NautilusWindow *window,
- const char *location,
+ GFile *location,
GList *new_selection);
void nautilus_window_go_home (NautilusWindow *window);
void nautilus_window_go_up (NautilusWindow *window,