summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCosimo Cecchi <cosimoc@gnome.org>2012-10-26 14:26:04 -0400
committerCosimo Cecchi <cosimoc@gnome.org>2012-10-26 14:52:46 -0400
commit3d3382add4ad387bb05425ba09d9dcbf5ee5314b (patch)
tree172c76cad027c3884c5f24ccd98f5561274865a7
parent8e44eafda460b5d7e3553e1889204ece02101924 (diff)
downloadnautilus-3d3382add4ad387bb05425ba09d9dcbf5ee5314b.tar.gz
slot: use the default mount location when switching to a mount root
Add a new flag to signal that we really want the default mount location to be loaded if possible. This way we can still get to the mount root e.g. by going up or typing it directly in the location bar, but the default location between sidebar mounts and using Connect to Server will be the same. https://bugzilla.gnome.org/show_bug.cgi?id=522917
-rw-r--r--src/nautilus-application.c13
-rw-r--r--src/nautilus-window-slot.c43
-rw-r--r--src/nautilus-window.h4
3 files changed, 48 insertions, 12 deletions
diff --git a/src/nautilus-application.c b/src/nautilus-application.c
index faa403ba6..b84c437f8 100644
--- a/src/nautilus-application.c
+++ b/src/nautilus-application.c
@@ -705,10 +705,10 @@ action_new_window (GSimpleAction *action,
static gboolean
go_to_server_cb (NautilusWindow *window,
+ GFile *location,
GError *error,
gpointer user_data)
{
- GFile *location = user_data;
gboolean retval;
if (error == NULL) {
@@ -760,8 +760,6 @@ go_to_server_cb (NautilusWindow *window,
retval = FALSE;
}
- g_object_unref (location);
-
return retval;
}
@@ -772,13 +770,14 @@ on_connect_server_response (GtkDialog *dialog,
{
if (response == GTK_RESPONSE_OK) {
GFile *location;
+ NautilusWindow *window = NAUTILUS_WINDOW (get_focus_window (application));
location = nautilus_connect_server_dialog_get_location (NAUTILUS_CONNECT_SERVER_DIALOG (dialog));
if (location != NULL) {
- nautilus_window_go_to_full (NAUTILUS_WINDOW (get_focus_window (application)),
- location,
- go_to_server_cb,
- location);
+ nautilus_window_slot_open_location_full (nautilus_window_get_active_slot (window),
+ location,
+ NAUTILUS_WINDOW_OPEN_FLAG_USE_DEFAULT_LOCATION,
+ NULL, go_to_server_cb, application);
}
}
diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c
index 8b32be958..0e6321e36 100644
--- a/src/nautilus-window-slot.c
+++ b/src/nautilus-window-slot.c
@@ -120,6 +120,7 @@ struct NautilusWindowSlotDetails {
guint location_change_distance;
char *pending_scroll_to;
GList *pending_selection;
+ gboolean pending_use_default_location;
NautilusFile *determine_view_file;
GCancellable *mount_cancellable;
GError *mount_error;
@@ -768,12 +769,13 @@ nautilus_window_slot_open_location_full (NautilusWindowSlot *slot,
!is_desktop) {
if (callback != NULL) {
- callback (window, NULL, user_data);
+ callback (window, location, NULL, user_data);
}
goto done;
}
+ slot->details->pending_use_default_location = ((flags & NAUTILUS_WINDOW_OPEN_FLAG_USE_DEFAULT_LOCATION) != 0);
begin_location_change (target_slot, location, old_location, new_selection,
NAUTILUS_LOCATION_CHANGE_STANDARD, 0, NULL, callback, user_data);
@@ -788,6 +790,7 @@ report_callback (NautilusWindowSlot *slot,
if (slot->details->open_callback != NULL) {
gboolean res;
res = slot->details->open_callback (nautilus_window_slot_get_window (slot),
+ slot->details->pending_location,
error, slot->details->open_callback_user_data);
slot->details->open_callback = NULL;
slot->details->open_callback_user_data = NULL;
@@ -1083,7 +1086,8 @@ mount_not_mounted_callback (GObject *source_object,
} else {
nautilus_file_invalidate_all_attributes (slot->details->determine_view_file);
nautilus_file_call_when_ready (slot->details->determine_view_file,
- NAUTILUS_FILE_ATTRIBUTE_INFO,
+ NAUTILUS_FILE_ATTRIBUTE_INFO |
+ NAUTILUS_FILE_ATTRIBUTE_MOUNT,
got_file_info_for_view_selection_callback,
slot);
}
@@ -1101,10 +1105,11 @@ got_file_info_for_view_selection_callback (NautilusFile *file,
NautilusWindow *window;
NautilusWindowSlot *slot;
NautilusFile *viewed_file, *parent_file;
- GFile *location;
+ GFile *location, *default_location;
GMountOperation *mount_op;
MountNotMountedData *data;
GtkApplication *app;
+ GMount *mount;
slot = callback_data;
window = nautilus_window_slot_get_window (slot);
@@ -1139,6 +1144,35 @@ got_file_info_for_view_selection_callback (NautilusFile *file,
goto done;
}
+ mount = NULL;
+ default_location = NULL;
+
+ if (slot->details->pending_use_default_location) {
+ mount = nautilus_file_get_mount (file);
+ slot->details->pending_use_default_location = FALSE;
+ }
+
+ if (mount != NULL) {
+ default_location = g_mount_get_default_location (mount);
+ g_object_unref (mount);
+ }
+
+ if (default_location != NULL &&
+ !g_file_equal (slot->details->pending_location, default_location)) {
+ g_clear_object (&slot->details->pending_location);
+ slot->details->pending_location = default_location;
+ slot->details->determine_view_file = nautilus_file_get (default_location);
+
+ nautilus_file_invalidate_all_attributes (slot->details->determine_view_file);
+ nautilus_file_call_when_ready (slot->details->determine_view_file,
+ NAUTILUS_FILE_ATTRIBUTE_INFO |
+ NAUTILUS_FILE_ATTRIBUTE_MOUNT,
+ got_file_info_for_view_selection_callback,
+ slot);
+
+ goto done;
+ }
+
parent_file = nautilus_file_get_parent (file);
if ((parent_file != NULL) &&
nautilus_file_get_file_type (file) == G_FILE_TYPE_REGULAR) {
@@ -1156,7 +1190,8 @@ got_file_info_for_view_selection_callback (NautilusFile *file,
nautilus_file_invalidate_all_attributes (slot->details->determine_view_file);
nautilus_file_call_when_ready (slot->details->determine_view_file,
- NAUTILUS_FILE_ATTRIBUTE_INFO,
+ NAUTILUS_FILE_ATTRIBUTE_INFO |
+ NAUTILUS_FILE_ATTRIBUTE_MOUNT,
got_file_info_for_view_selection_callback,
slot);
diff --git a/src/nautilus-window.h b/src/nautilus-window.h
index 3dc343f6c..247299891 100644
--- a/src/nautilus-window.h
+++ b/src/nautilus-window.h
@@ -41,7 +41,8 @@ typedef struct NautilusWindowDetails NautilusWindowDetails;
typedef enum {
NAUTILUS_WINDOW_OPEN_FLAG_CLOSE_BEHIND = 1 << 0,
NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW = 1 << 1,
- NAUTILUS_WINDOW_OPEN_FLAG_NEW_TAB = 1 << 2
+ NAUTILUS_WINDOW_OPEN_FLAG_NEW_TAB = 1 << 2,
+ NAUTILUS_WINDOW_OPEN_FLAG_USE_DEFAULT_LOCATION = 1 << 3
} NautilusWindowOpenFlags;
typedef enum {
@@ -50,6 +51,7 @@ typedef enum {
} NautilusWindowOpenSlotFlags;
typedef gboolean (* NautilusWindowGoToCallback) (NautilusWindow *window,
+ GFile *location,
GError *error,
gpointer user_data);