brasero r997 - in trunk: . src
- From: philippr svn gnome org
- To: svn-commits-list gnome org
- Subject: brasero r997 - in trunk: . src
- Date: Wed, 16 Jul 2008 11:19:07 +0000 (UTC)
Author: philippr
Date: Wed Jul 16 11:19:07 2008
New Revision: 997
URL: http://svn.gnome.org/viewvc/brasero?rev=997&view=rev
Log:
Try to improve things to fix #509895 â CD is not ejected after burn
* src/burn-volume-obj.c (brasero_volume_eject_finish),
(brasero_volume_eject):
* src/burn.c (brasero_burn_eject_src_media),
(brasero_burn_unlock_src_media), (brasero_burn_unlock_dest_media),
(brasero_burn_unlock_medias), (brasero_burn_check),
(brasero_burn_same_src_dest), (brasero_burn_record),
(brasero_burn_blank):
Modified:
trunk/ChangeLog
trunk/src/burn-volume-obj.c
trunk/src/burn.c
Modified: trunk/src/burn-volume-obj.c
==============================================================================
--- trunk/src/burn-volume-obj.c (original)
+++ trunk/src/burn-volume-obj.c Wed Jul 16 11:19:07 2008
@@ -458,9 +458,14 @@
BraseroVolumePrivate *priv;
priv = BRASERO_VOLUME_PRIVATE (self);
- priv->result = g_drive_eject_finish (G_DRIVE (source),
- result,
- &priv->error);
+ if (G_IS_DRIVE (source))
+ priv->result = g_drive_eject_finish (G_DRIVE (source),
+ result,
+ &priv->error);
+ else
+ priv->result = g_volume_eject_finish (G_VOLUME (source),
+ result,
+ &priv->error);
if (priv->error) {
if (priv->error->code == G_IO_ERROR_FAILED_HANDLED) {
@@ -498,7 +503,8 @@
gdrive = g_volume_get_drive (volume);
g_object_unref (volume);
- if (!g_drive_can_eject (gdrive)) {
+ if ((!gdrive || !g_drive_can_eject (gdrive))
+ && !g_volume_can_eject (volume)) {
g_object_unref (gdrive);
return FALSE;
}
@@ -513,11 +519,18 @@
G_CALLBACK (brasero_volume_ejected_cb),
self);
- g_drive_eject (gdrive,
- G_MOUNT_UNMOUNT_NONE,
- priv->cancel,
- brasero_volume_eject_finish,
- self);
+ if (g_drive_can_eject (gdrive))
+ g_drive_eject (gdrive,
+ G_MOUNT_UNMOUNT_NONE,
+ priv->cancel,
+ brasero_volume_eject_finish,
+ self);
+ else
+ g_volume_eject (volume,
+ G_MOUNT_UNMOUNT_NONE,
+ priv->cancel,
+ brasero_volume_eject_finish,
+ self);
g_object_ref (self);
result = brasero_volume_wait_for_operation_end (self, error);
@@ -528,15 +541,24 @@
g_signal_handler_disconnect (drive, eject_sig);
}
else {
- g_drive_eject (gdrive,
- G_MOUNT_UNMOUNT_NONE,
- priv->cancel,
- NULL,
- self);
+ if (g_drive_can_eject (gdrive))
+ g_drive_eject (gdrive,
+ G_MOUNT_UNMOUNT_NONE,
+ priv->cancel,
+ NULL,
+ self);
+ else
+ g_volume_eject (volume,
+ G_MOUNT_UNMOUNT_NONE,
+ priv->cancel,
+ NULL,
+ self);
result = TRUE;
}
- g_object_unref (gdrive);
+ if (gdrive)
+ g_object_unref (gdrive);
+
return result;
}
Modified: trunk/src/burn.c
==============================================================================
--- trunk/src/burn.c (original)
+++ trunk/src/burn.c Wed Jul 16 11:19:07 2008
@@ -374,18 +374,19 @@
}
}
- brasero_volume_eject (BRASERO_VOLUME (medium), TRUE, NULL);
+ brasero_volume_eject (BRASERO_VOLUME (medium), TRUE, error);
medium = brasero_drive_get_medium (priv->src);
if (medium && brasero_medium_get_status (medium) != BRASERO_MEDIUM_NONE) {
gchar *name;
name = brasero_drive_get_display_name (priv->src);
- g_set_error (error,
- BRASERO_BURN_ERROR,
- BRASERO_BURN_ERROR_GENERAL,
- _("the media in %s can't be ejected"),
- name);
+ if (error && !(*error))
+ g_set_error (error,
+ BRASERO_BURN_ERROR,
+ BRASERO_BURN_ERROR_GENERAL,
+ _("the media in %s can't be ejected"),
+ name);
g_free (name);
@@ -1063,7 +1064,8 @@
}
static BraseroBurnResult
-brasero_burn_unlock_src_media (BraseroBurn *burn)
+brasero_burn_unlock_src_media (BraseroBurn *burn,
+ GError **error)
{
BraseroBurnPrivate *priv = BRASERO_BURN_PRIVATE (burn);
BraseroMedium *medium;
@@ -1078,7 +1080,7 @@
medium = brasero_drive_get_medium (priv->src);
if (priv->mounted_by_us) {
- brasero_volume_umount (BRASERO_VOLUME (medium), TRUE, NULL);
+ brasero_volume_umount (BRASERO_VOLUME (medium), TRUE, error);
priv->mounted_by_us = 0;
}
@@ -1086,14 +1088,15 @@
brasero_drive_unlock (priv->src);
if (BRASERO_BURN_SESSION_EJECT (priv->session))
- brasero_volume_eject (BRASERO_VOLUME (medium), FALSE, NULL);
+ brasero_volume_eject (BRASERO_VOLUME (medium), FALSE, error);
priv->src = NULL;
return BRASERO_BURN_OK;
}
static BraseroBurnResult
-brasero_burn_unlock_dest_media (BraseroBurn *burn)
+brasero_burn_unlock_dest_media (BraseroBurn *burn,
+ GError **error)
{
BraseroBurnPrivate *priv = BRASERO_BURN_PRIVATE (burn);
BraseroMedium *medium;
@@ -1111,17 +1114,18 @@
medium = brasero_drive_get_medium (priv->dest);
if (BRASERO_BURN_SESSION_EJECT (priv->session))
- brasero_volume_eject (BRASERO_VOLUME (medium), FALSE, NULL);
+ brasero_volume_eject (BRASERO_VOLUME (medium), FALSE, error);
priv->dest = NULL;
return BRASERO_BURN_OK;
}
static BraseroBurnResult
-brasero_burn_unlock_medias (BraseroBurn *burn)
+brasero_burn_unlock_medias (BraseroBurn *burn,
+ GError **error)
{
- brasero_burn_unlock_dest_media (burn);
- brasero_burn_unlock_src_media (burn);
+ brasero_burn_unlock_dest_media (burn, error);
+ brasero_burn_unlock_src_media (burn, error);
return BRASERO_BURN_OK;
}
@@ -2164,14 +2168,17 @@
result = brasero_burn_check_real (self, track, error);
- brasero_burn_unlock_medias (self);
-
brasero_burn_powermanagement (self, FALSE);
/* no need to check the result of the comparison, it's set in session */
priv->session = NULL;
g_object_unref (session);
+ if (result == BRASERO_BURN_OK)
+ result = brasero_burn_unlock_medias (self, error);
+ else
+ brasero_burn_unlock_medias (self, NULL);
+
return result;
}
@@ -2241,7 +2248,7 @@
/* run */
result = brasero_burn_record_session (self, TRUE, error);
if (result != BRASERO_BURN_OK) {
- brasero_burn_unlock_src_media (self);
+ brasero_burn_unlock_src_media (self, NULL);
goto end;
}
@@ -2336,7 +2343,7 @@
/* see if we still need it to be locked */
if (brasero_burn_session_get_input_type (session, NULL) != BRASERO_TRACK_TYPE_DISC)
- brasero_burn_unlock_src_media (burn);
+ brasero_burn_unlock_src_media (burn, NULL);
result = brasero_burn_record_session (burn, TRUE, error);
if (result != BRASERO_BURN_OK)
@@ -2346,7 +2353,10 @@
end:
- brasero_burn_unlock_medias (burn);
+ if (result == BRASERO_BURN_OK)
+ result = brasero_burn_unlock_medias (burn, error);
+ else
+ brasero_burn_unlock_medias (burn, NULL);
if (error && (*error) == NULL
&& (result == BRASERO_BURN_NOT_READY
@@ -2466,12 +2476,14 @@
if (ret_error)
g_propagate_error (error, ret_error);
- brasero_burn_unlock_medias (burn);
+ if (result == BRASERO_BURN_OK && !ret_error)
+ result = brasero_burn_unlock_medias (burn, error);
+ else
+ brasero_burn_unlock_medias (burn, NULL);
if (result == BRASERO_BURN_OK)
brasero_burn_action_changed_real (burn, BRASERO_BURN_ACTION_FINISHED);
-
brasero_burn_powermanagement (burn, FALSE);
/* release session */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]