static void on_unmounted(GObject* mnt, GAsyncResult* res, gpointer input_data) { #define data ((EjectData*)input_data) GError* err = NULL; /* FIXME: with this approach, we could have racing condition. * Someone may mount other volumes before we finishing unmounting them all. */ gboolean success = g_mount_unmount_finish(G_MOUNT(mnt), res, &err); if(success) { if(data->mounts) /* we still have some volumes on this drive mounted */ unmount_before_eject(data); else /* all unmounted, do the eject. */ do_eject(data); } else { GSimpleAsyncResult* res; GError* error = g_udisks_error_to_gio_error(err); g_error_free(err); res = g_simple_async_result_new_from_error(G_OBJECT(data->drv), data->callback, data->user_data, err); finish_eject(res, data); g_error_free(error); } #undef data }
static void _vfs_backend_mount_callback (gpointer pObject, GAsyncResult *res, gpointer *data) //static void _vfs_backend_mount_callback (gboolean succeeded, char *error, char *detailed_error, gpointer *data) { cd_message ("%s (%d)", __func__, GPOINTER_TO_INT (data[1])); CairoDockFMMountCallback pCallback = data[0]; GError *erreur = NULL; gboolean bSuccess; if (GPOINTER_TO_INT (data[1]) == 1) bSuccess = (g_file_mount_mountable_finish (G_FILE (pObject), res, &erreur) != NULL); //bSuccess = (g_volume_mount_finish (G_VOLUME (pObject), res, &erreur)); else if (GPOINTER_TO_INT (data[1]) == 0) bSuccess = g_mount_unmount_finish (G_MOUNT (pObject), res, &erreur); else bSuccess = g_mount_eject_finish (G_MOUNT (pObject), res, &erreur); if (erreur != NULL) { cd_warning ("Attention : %s", erreur->message); g_error_free (erreur); } cd_message ("(un)mount fini -> %d", bSuccess); pCallback (GPOINTER_TO_INT (data[1]) == 1, bSuccess, data[2], data[3], data[4]); //g_free (data[2]); //g_object_unref (pObject); //g_free (data); }
static void unmount_done_cb (GObject *object, GAsyncResult *res, gpointer user_data) { gboolean succeeded; GError *error = NULL; succeeded = g_mount_unmount_finish (G_MOUNT (object), res, &error); g_object_unref (G_MOUNT (object)); if (!succeeded) g_print ("Error unmounting mount: %s\n", error->message); outstanding_mounts--; if (outstanding_mounts == 0) g_main_loop_quit (main_loop); }
static void rb_removable_media_manager_unmount_cb (GObject *object, GAsyncResult *result, RBRemovableMediaManager *mgr) { GMount *mount = G_MOUNT (object); GError *error = NULL; rb_debug ("finishing unmount of mount"); g_mount_unmount_finish (mount, result, &error); if (error != NULL) { if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_FAILED_HANDLED)) { rb_error_dialog (NULL, _("Unable to unmount"), "%s", error->message); } else { rb_debug ("unmount failure has already been handled"); } g_error_free (error); } else { rb_removable_media_manager_remove_mount (mgr, mount); } g_object_unref (mgr); }