diff options
author | Alexander Larsson <alexl@redhat.com> | 2010-03-08 13:48:27 +0100 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2010-03-08 13:48:27 +0100 |
commit | 5e7f95842228f289b2940f23e63a2dd3b2cca842 (patch) | |
tree | f5dbb7b532c1a8b16ca9744712db9e8833a15e67 | |
parent | 7fb5d7f6e4c32ab391eb9f3a61c0cab59c585874 (diff) | |
download | nautilus-5e7f95842228f289b2940f23e63a2dd3b2cca842.tar.gz |
Always call back from nautilus_file_unmount/eject, even on success
-rw-r--r-- | libnautilus-private/nautilus-file.c | 37 |
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); } } |