diff options
author | Alexander Larsson <alexl@redhat.com> | 2010-03-08 14:36:46 +0100 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2010-03-08 14:36:46 +0100 |
commit | 80dd8fb8ff0df3aa32314c633b04173517da3a36 (patch) | |
tree | 4cd39d2a38cb6a2118da90e26cceae6398f532ed | |
parent | 5e7f95842228f289b2940f23e63a2dd3b2cca842 (diff) | |
download | nautilus-80dd8fb8ff0df3aa32314c633b04173517da3a36.tar.gz |
Set initiated_unmount on windows while unmounting
-rw-r--r-- | src/file-manager/fm-directory-view.c | 40 | ||||
-rw-r--r-- | src/file-manager/fm-directory-view.h | 2 | ||||
-rw-r--r-- | src/nautilus-places-sidebar.c | 54 |
3 files changed, 85 insertions, 11 deletions
diff --git a/src/file-manager/fm-directory-view.c b/src/file-manager/fm-directory-view.c index 3eb1ebbab..a9829d3dd 100644 --- a/src/file-manager/fm-directory-view.c +++ b/src/file-manager/fm-directory-view.c @@ -6230,6 +6230,12 @@ file_unmount_callback (NautilusFile *file, GError *error, gpointer callback_data) { + FMDirectoryView *view; + + view = FM_DIRECTORY_VIEW (callback_data); + fm_directory_view_set_initiated_unmount (view, FALSE); + g_object_unref (view); + if (error != NULL && (error->domain != G_IO_ERROR || (error->code != G_IO_ERROR_CANCELLED && @@ -6245,6 +6251,12 @@ file_eject_callback (NautilusFile *file, GError *error, gpointer callback_data) { + FMDirectoryView *view; + + view = FM_DIRECTORY_VIEW (callback_data); + fm_directory_view_set_initiated_unmount (view, FALSE); + g_object_unref (view); + if (error != NULL && (error->domain != G_IO_ERROR || (error->code != G_IO_ERROR_CANCELLED && @@ -6311,8 +6323,9 @@ action_unmount_volume_callback (GtkAction *action, if (nautilus_file_can_unmount (file)) { GMountOperation *mount_op; mount_op = gtk_mount_operation_new (fm_directory_view_get_containing_window (view)); + fm_directory_view_set_initiated_unmount (view, TRUE); nautilus_file_unmount (file, mount_op, NULL, - file_unmount_callback, NULL); + file_unmount_callback, g_object_ref (view)); g_object_unref (mount_op); } } @@ -6359,8 +6372,9 @@ action_eject_volume_callback (GtkAction *action, if (nautilus_file_can_eject (file)) { GMountOperation *mount_op; mount_op = gtk_mount_operation_new (fm_directory_view_get_containing_window (view)); + fm_directory_view_set_initiated_unmount (view, TRUE); nautilus_file_eject (file, mount_op, NULL, - file_eject_callback, NULL); + file_eject_callback, g_object_ref (view)); g_object_unref (mount_op); } } @@ -6490,7 +6504,8 @@ action_self_unmount_volume_callback (GtkAction *action, } mount_op = gtk_mount_operation_new (fm_directory_view_get_containing_window (view)); - nautilus_file_unmount (file, mount_op, NULL, file_unmount_callback, NULL); + fm_directory_view_set_initiated_unmount (view, TRUE); + nautilus_file_unmount (file, mount_op, NULL, file_unmount_callback, g_object_ref (view)); g_object_unref (mount_op); } @@ -6510,7 +6525,8 @@ action_self_eject_volume_callback (GtkAction *action, } mount_op = gtk_mount_operation_new (fm_directory_view_get_containing_window (view)); - nautilus_file_eject (file, mount_op, NULL, file_eject_callback, NULL); + fm_directory_view_set_initiated_unmount (view, TRUE); + nautilus_file_eject (file, mount_op, NULL, file_eject_callback, g_object_ref (view)); g_object_unref (mount_op); } @@ -6629,8 +6645,9 @@ action_location_unmount_volume_callback (GtkAction *action, } mount_op = gtk_mount_operation_new (fm_directory_view_get_containing_window (view)); + fm_directory_view_set_initiated_unmount (view, TRUE); nautilus_file_unmount (file, mount_op, NULL, - file_unmount_callback, NULL); + file_unmount_callback, g_object_ref (view)); g_object_unref (mount_op); } @@ -6650,8 +6667,9 @@ action_location_eject_volume_callback (GtkAction *action, } mount_op = gtk_mount_operation_new (fm_directory_view_get_containing_window (view)); + fm_directory_view_set_initiated_unmount (view, TRUE); nautilus_file_eject (file, mount_op, NULL, - file_eject_callback, NULL); + file_eject_callback, g_object_ref (view)); g_object_unref (mount_op); } @@ -9837,6 +9855,16 @@ fm_directory_view_is_editable (FMDirectoryView *view) return TRUE; } +void +fm_directory_view_set_initiated_unmount (FMDirectoryView *view, + gboolean initiated_unmount) +{ + if (view->details->window != NULL) { + nautilus_window_info_set_initiated_unmount(view->details->window, + initiated_unmount); + } +} + static gboolean real_is_read_only (FMDirectoryView *view) { diff --git a/src/file-manager/fm-directory-view.h b/src/file-manager/fm-directory-view.h index 3f3121dfb..f8f0dd7b0 100644 --- a/src/file-manager/fm-directory-view.h +++ b/src/file-manager/fm-directory-view.h @@ -484,6 +484,8 @@ void fm_directory_view_remove_subdirectory (FMDirecto NautilusDirectory*directory); gboolean fm_directory_view_is_editable (FMDirectoryView *view); +void fm_directory_view_set_initiated_unmount (FMDirectoryView *view, + gboolean inititated_unmount); /* operations affecting two directory views */ void fm_directory_view_move_copy_items_between_views (FMDirectoryView *source, FMDirectoryView *target, gboolean copy); diff --git a/src/nautilus-places-sidebar.c b/src/nautilus-places-sidebar.c index de5bb9c49..95c06ebaa 100644 --- a/src/nautilus-places-sidebar.c +++ b/src/nautilus-places-sidebar.c @@ -1738,11 +1738,24 @@ mount_shortcut_cb (GtkMenuItem *item, } static void +unmount_done (gpointer data) +{ + NautilusWindow *window; + + window = data; + nautilus_window_info_set_initiated_unmount (window, FALSE); + g_object_unref (window); +} + +static void do_unmount (GMount *mount, NautilusPlacesSidebar *sidebar) { if (mount != NULL) { - nautilus_file_operations_unmount_mount (NULL, mount, FALSE, TRUE); + nautilus_window_info_set_initiated_unmount (sidebar->window, TRUE); + nautilus_file_operations_unmount_mount_full (NULL, mount, FALSE, TRUE, + unmount_done, + g_object_ref (sidebar->window)); } } @@ -1778,9 +1791,15 @@ drive_eject_cb (GObject *source_object, GAsyncResult *res, gpointer user_data) { + NautilusWindow *window; GError *error; char *primary; char *name; + + window = user_data; + nautilus_window_info_set_initiated_unmount (window, FALSE); + g_object_unref (window); + error = NULL; if (!g_drive_eject_with_operation_finish (G_DRIVE (source_object), res, &error)) { if (error->code != G_IO_ERROR_FAILED_HANDLED) { @@ -1801,9 +1820,15 @@ volume_eject_cb (GObject *source_object, GAsyncResult *res, gpointer user_data) { + NautilusWindow *window; GError *error; char *primary; char *name; + + window = user_data; + nautilus_window_info_set_initiated_unmount (window, FALSE); + g_object_unref (window); + error = NULL; if (!g_volume_eject_with_operation_finish (G_VOLUME (source_object), res, &error)) { if (error->code != G_IO_ERROR_FAILED_HANDLED) { @@ -1824,9 +1849,15 @@ mount_eject_cb (GObject *source_object, GAsyncResult *res, gpointer user_data) { + NautilusWindow *window; GError *error; char *primary; char *name; + + window = user_data; + nautilus_window_info_set_initiated_unmount (window, FALSE); + g_object_unref (window); + error = NULL; if (!g_mount_eject_with_operation_finish (G_MOUNT (source_object), res, &error)) { if (error->code != G_IO_ERROR_FAILED_HANDLED) { @@ -1852,11 +1883,17 @@ do_eject (GMount *mount, mount_op = gtk_mount_operation_new (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (sidebar)))); if (mount != NULL) { - g_mount_eject_with_operation (mount, 0, mount_op, NULL, mount_eject_cb, NULL); + nautilus_window_info_set_initiated_unmount (sidebar->window, TRUE); + g_mount_eject_with_operation (mount, 0, mount_op, NULL, mount_eject_cb, + g_object_ref (sidebar->window)); } else if (volume != NULL) { - g_volume_eject_with_operation (volume, 0, mount_op, NULL, volume_eject_cb, NULL); + nautilus_window_info_set_initiated_unmount (sidebar->window, TRUE); + g_volume_eject_with_operation (volume, 0, mount_op, NULL, volume_eject_cb, + g_object_ref (sidebar->window)); } else if (drive != NULL) { - g_drive_eject_with_operation (drive, 0, mount_op, NULL, drive_eject_cb, NULL); + nautilus_window_info_set_initiated_unmount (sidebar->window, TRUE); + g_drive_eject_with_operation (drive, 0, mount_op, NULL, drive_eject_cb, + g_object_ref (sidebar->window)); } g_object_unref (mount_op); } @@ -2063,10 +2100,15 @@ drive_stop_cb (GObject *source_object, GAsyncResult *res, gpointer user_data) { + NautilusWindow *window; GError *error; char *primary; char *name; + window = user_data; + nautilus_window_info_set_initiated_unmount (window, FALSE); + g_object_unref (window); + error = NULL; if (!g_drive_poll_for_media_finish (G_DRIVE (source_object), res, &error)) { if (error->code != G_IO_ERROR_FAILED_HANDLED) { @@ -2101,7 +2143,9 @@ stop_shortcut_cb (GtkMenuItem *item, GMountOperation *mount_op; mount_op = gtk_mount_operation_new (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (sidebar)))); - g_drive_stop (drive, G_MOUNT_UNMOUNT_NONE, mount_op, NULL, drive_stop_cb, NULL); + nautilus_window_info_set_initiated_unmount (sidebar->window, TRUE); + g_drive_stop (drive, G_MOUNT_UNMOUNT_NONE, mount_op, NULL, drive_stop_cb, + g_object_ref (sidebar->window)); g_object_unref (mount_op); } g_object_unref (drive); |