diff options
author | Alexander Larsson <alexl@redhat.com> | 2007-10-18 14:40:05 +0000 |
---|---|---|
committer | Alexander Larsson <alexl@src.gnome.org> | 2007-10-18 14:40:05 +0000 |
commit | aec7046d902ee9014ec4864e3bdb34070aebaaa0 (patch) | |
tree | 49fa4f8b16b65e5b9b92ff7e53326f8dc47d6422 | |
parent | 0fc0e6365e9633e6e106b878a29e9333c47b159f (diff) | |
download | nautilus-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
29 files changed, 440 insertions, 337 deletions
@@ -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. @@ -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, |