summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2010-03-08 13:48:27 +0100
committerAlexander Larsson <alexl@redhat.com>2010-03-08 13:48:27 +0100
commit5e7f95842228f289b2940f23e63a2dd3b2cca842 (patch)
treef5dbb7b532c1a8b16ca9744712db9e8833a15e67
parent7fb5d7f6e4c32ab391eb9f3a61c0cab59c585874 (diff)
downloadnautilus-5e7f95842228f289b2940f23e63a2dd3b2cca842.tar.gz
Always call back from nautilus_file_unmount/eject, even on success
-rw-r--r--libnautilus-private/nautilus-file.c37
1 files changed, 35 insertions, 2 deletions
diff --git a/libnautilus-private/nautilus-file.c b/libnautilus-private/nautilus-file.c
index fdb1bdc38..7890211d3 100644
--- a/libnautilus-private/nautilus-file.c
+++ b/libnautilus-private/nautilus-file.c
@@ -1217,6 +1217,25 @@ nautilus_file_mount (NautilusFile *file,
}
}
+typedef struct {
+ NautilusFile *file;
+ NautilusFileOperationCallback callback;
+ gpointer callback_data;
+} UnmountData;
+
+static void
+unmount_done (void *callback_data)
+{
+ UnmountData *data;
+
+ data = (UnmountData *)callback_data;
+ if (data->callback) {
+ data->callback (data->file, NULL, NULL, data->callback_data);
+ }
+ nautilus_file_unref (data->file);
+ g_free (data);
+}
+
void
nautilus_file_unmount (NautilusFile *file,
GMountOperation *mount_op,
@@ -1225,6 +1244,7 @@ nautilus_file_unmount (NautilusFile *file,
gpointer callback_data)
{
GError *error;
+ UnmountData *data;
if (file->details->can_unmount) {
if (NAUTILUS_FILE_GET_CLASS (file)->unmount != NULL) {
@@ -1240,7 +1260,13 @@ nautilus_file_unmount (NautilusFile *file,
}
} else if (file->details->mount != NULL &&
g_mount_can_unmount (file->details->mount)) {
- nautilus_file_operations_unmount_mount (NULL, file->details->mount, FALSE, TRUE);
+ data = g_new0 (UnmountData, 1);
+ data->file = nautilus_file_ref (file);
+ data->callback = callback;
+ data->callback_data = callback_data;
+ nautilus_file_operations_unmount_mount_full (NULL, file->details->mount, FALSE, TRUE, unmount_done, data);
+ } else if (callback) {
+ callback (file, NULL, NULL, callback_data);
}
}
@@ -1252,6 +1278,7 @@ nautilus_file_eject (NautilusFile *file,
gpointer callback_data)
{
GError *error;
+ UnmountData *data;
if (file->details->can_eject) {
if (NAUTILUS_FILE_GET_CLASS (file)->eject != NULL) {
@@ -1267,7 +1294,13 @@ nautilus_file_eject (NautilusFile *file,
}
} else if (file->details->mount != NULL &&
g_mount_can_eject (file->details->mount)) {
- nautilus_file_operations_unmount_mount (NULL, file->details->mount, TRUE, TRUE);
+ data = g_new0 (UnmountData, 1);
+ data->file = nautilus_file_ref (file);
+ data->callback = callback;
+ data->callback_data = callback_data;
+ nautilus_file_operations_unmount_mount_full (NULL, file->details->mount, TRUE, TRUE, unmount_done, data);
+ } else if (callback) {
+ callback (file, NULL, NULL, callback_data);
}
}