[brasero] Improve and fix joliet option in burn option dialog
- From: Philippe Rouquier <philippr src gnome org>
- To: svn-commits-list gnome org
- Subject: [brasero] Improve and fix joliet option in burn option dialog
- Date: Sun, 24 May 2009 16:30:09 -0400 (EDT)
commit 58e27ad513253866f68af9db0959cca195a42192
Author: Philippe Rouquier <bonfire-app wanadoo fr>
Date: Sun May 24 22:22:13 2009 +0200
Improve and fix joliet option in burn option dialog
---
libbrasero-burn/brasero-data-options.c | 202 ++++++++++++++++++++------------
1 files changed, 126 insertions(+), 76 deletions(-)
diff --git a/libbrasero-burn/brasero-data-options.c b/libbrasero-burn/brasero-data-options.c
index 79988c1..40980b7 100644
--- a/libbrasero-burn/brasero-data-options.c
+++ b/libbrasero-burn/brasero-data-options.c
@@ -65,7 +65,8 @@ G_DEFINE_TYPE (BraseroDataOptions, brasero_data_options, GTK_TYPE_ALIGNMENT);
static void
brasero_data_options_set_tracks_image_fs (BraseroBurnSession *session,
- BraseroImageFS fs_type)
+ BraseroImageFS fs_type_add,
+ BraseroImageFS fs_type_rm)
{
GSList *tracks;
GSList *iter;
@@ -78,64 +79,12 @@ brasero_data_options_set_tracks_image_fs (BraseroBurnSession *session,
if (!BRASERO_IS_TRACK_DATA (track))
continue;
- brasero_track_data_add_fs (BRASERO_TRACK_DATA (track), fs_type);
- }
-}
-
-static gboolean
-brasero_data_options_update_joliet (BraseroDataOptions *dialog)
-{
- BraseroImageFS fs_type;
- BraseroBurnResult result;
- BraseroTrackType *source = NULL;
- BraseroDataOptionsPrivate *priv;
-
- priv = BRASERO_DATA_OPTIONS_PRIVATE (dialog);
- if (!priv->joliet_toggle)
- return FALSE;
-
- /* what we want to check Joliet support */
- source = brasero_track_type_new ();
- brasero_burn_session_get_input_type (priv->session, source);
- fs_type = brasero_track_type_get_data_fs (source);
-
- brasero_track_type_set_data_fs (source,
- fs_type|
- BRASERO_IMAGE_FS_JOLIET);
-
- result = brasero_burn_session_input_supported (priv->session,
- source,
- FALSE);
- brasero_track_type_free (source);
-
- if (result == BRASERO_BURN_OK) {
- if (GTK_WIDGET_IS_SENSITIVE (priv->joliet_toggle))
- return FALSE;
-
- gtk_widget_set_sensitive (priv->joliet_toggle, TRUE);
-
- if (!priv->joliet_saved)
- return FALSE;
+ if (fs_type_add != BRASERO_IMAGE_FS_NONE)
+ brasero_track_data_add_fs (BRASERO_TRACK_DATA (track), fs_type_add);
- brasero_data_options_set_tracks_image_fs (priv->session, fs_type);
-
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->joliet_toggle), priv->joliet_saved);
- return TRUE;
+ if (fs_type_rm != BRASERO_IMAGE_FS_NONE)
+ brasero_track_data_rm_fs (BRASERO_TRACK_DATA (track), fs_type_rm);
}
-
- if (!GTK_WIDGET_IS_SENSITIVE (priv->joliet_toggle))
- return FALSE;
-
- priv->joliet_saved = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->joliet_toggle));
- if (priv->joliet_saved) {
- fs_type &= (~BRASERO_IMAGE_FS_JOLIET);
- brasero_data_options_set_tracks_image_fs (priv->session, fs_type);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->joliet_toggle), FALSE);
- }
-
- gtk_widget_set_sensitive (priv->joliet_toggle, FALSE);
-
- return TRUE;
}
static void
@@ -143,7 +92,6 @@ brasero_data_options_set_joliet (BraseroDataOptions *dialog)
{
BraseroDataOptionsPrivate *priv;
BraseroTrackType *source = NULL;
- BraseroImageFS fs_type;
priv = BRASERO_DATA_OPTIONS_PRIVATE (dialog);
@@ -154,39 +102,41 @@ brasero_data_options_set_joliet (BraseroDataOptions *dialog)
* something is compulsory the button is active but insensitive */
source = brasero_track_type_new ();
if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->joliet_toggle)))
- fs_type = (~BRASERO_IMAGE_FS_JOLIET) & brasero_track_type_get_data_fs (source);
+ brasero_data_options_set_tracks_image_fs (priv->session,
+ BRASERO_IMAGE_FS_NONE,
+ BRASERO_IMAGE_FS_JOLIET);
else
- fs_type = BRASERO_IMAGE_FS_JOLIET|brasero_track_type_get_data_fs (source);
- brasero_track_type_free (source);
+ brasero_data_options_set_tracks_image_fs (priv->session,
+ BRASERO_IMAGE_FS_JOLIET,
+ BRASERO_IMAGE_FS_NONE);
- brasero_data_options_set_tracks_image_fs (priv->session, fs_type);
+ brasero_track_type_free (source);
}
static void
brasero_data_options_joliet_toggled_cb (GtkToggleButton *toggle,
- BraseroDataOptions *dialog)
+ BraseroDataOptions *options)
{
BraseroDataOptionsPrivate *priv;
GtkResponseType answer;
GtkWidget *message;
gchar *secondary;
- gboolean hide;
- priv = BRASERO_DATA_OPTIONS_PRIVATE (dialog);
+ priv = BRASERO_DATA_OPTIONS_PRIVATE (options);
- if (!GTK_WIDGET_VISIBLE (dialog)) {
- gtk_widget_show (GTK_WIDGET (dialog));
- hide = TRUE;
- }
+ /* If the toggle button was active it means that either the user got the
+ * warning dialog or that it was on because no file required any change
+ * in their names so no need for the warning; especially when we turn it
+ * off. */
+ if (!gtk_toggle_button_get_active (toggle))
+ priv->joliet_warning = TRUE;
if (priv->joliet_warning) {
- brasero_data_options_set_joliet (dialog);
+ brasero_data_options_set_joliet (options);
return;
}
- priv->joliet_warning = TRUE;
-
- message = gtk_message_dialog_new (GTK_WINDOW (dialog),
+ message = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (options))),
GTK_DIALOG_DESTROY_WITH_PARENT|
GTK_DIALOG_MODAL,
GTK_MESSAGE_INFO,
@@ -212,9 +162,109 @@ brasero_data_options_joliet_toggled_cb (GtkToggleButton *toggle,
if (answer != GTK_RESPONSE_YES)
gtk_toggle_button_set_active (toggle, FALSE);
else
- brasero_data_options_set_joliet (dialog);
+ brasero_data_options_set_joliet (options);
+
+ priv->joliet_warning = TRUE;
+}
+
+#if 0
+
+static gboolean
+brasero_data_options_update_joliet (BraseroDataOptions *dialog)
+{
+ BraseroImageFS fs_type;
+ BraseroBurnResult result;
+ BraseroTrackType *source = NULL;
+ BraseroDataOptionsPrivate *priv;
+
+ priv = BRASERO_DATA_OPTIONS_PRIVATE (dialog);
+ if (!priv->joliet_toggle)
+ return FALSE;
+
+ /* what we want to check Joliet support */
+ source = brasero_track_type_new ();
+ brasero_burn_session_get_input_type (priv->session, source);
+ fs_type = brasero_track_type_get_data_fs (source);
+
+ /* see if it's supported */
+ brasero_track_type_set_data_fs (source,
+ fs_type|
+ BRASERO_IMAGE_FS_JOLIET);
+
+ result = brasero_burn_session_input_supported (priv->session,
+ source,
+ FALSE);
+
+ if (result != BRASERO_BURN_OK)Â {
+ /* Not supported */
+ priv->joliet_saved = (fs_type & BRASERO_IMAGE_FS_JOLIET);
+ brasero_data_options_set_tracks_image_fs (priv->session,
+ BRASERO_IMAGE_FS_NONE,
+ BRASERO_IMAGE_FS_JOLIET);
+
+ gtk_widget_set_sensitive (priv->joliet_toggle, FALSE);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->joliet_toggle), FALSE);
+ }
+ else if (!GTK_WIDGET_IS_SENSITIVE (priv->joliet_toggle)) {
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->joliet_toggle), priv->joliet_saved);
+
+ if (priv->joliet_saved || (fs_type & BRASERO_IMAGE_FS_JOLIET))
+ brasero_data_options_set_tracks_image_fs (priv->session,
+ BRASERO_IMAGE_FS_JOLIET,
+ BRASERO_IMAGE_FS_NONE);
+
+ gtk_widget_set_sensitive (priv->joliet_toggle, TRUE);
+ }
+}
+
+#endif
+
+static void
+brasero_data_options_update_joliet_start (BraseroDataOptions *dialog)
+{
+ BraseroImageFS fs_type;
+ BraseroBurnResult result;
+ BraseroTrackType *source = NULL;
+ BraseroDataOptionsPrivate *priv;
+
+ priv = BRASERO_DATA_OPTIONS_PRIVATE (dialog);
+ if (!priv->joliet_toggle)
+ return;
+
+ /* what we want to check Joliet support */
+ source = brasero_track_type_new ();
+ brasero_burn_session_get_input_type (priv->session, source);
+ fs_type = brasero_track_type_get_data_fs (source);
+
+ brasero_track_type_set_data_fs (source,
+ fs_type|
+ BRASERO_IMAGE_FS_JOLIET);
+ result = brasero_burn_session_input_supported (priv->session,
+ source,
+ FALSE);
+
+ g_signal_handlers_block_by_func (priv->joliet_toggle,
+ brasero_data_options_joliet_toggled_cb,
+ dialog);
+
+ if (result != BRASERO_BURN_OK) {
+ /* Not supported */
+ brasero_data_options_set_tracks_image_fs (priv->session,
+ BRASERO_IMAGE_FS_NONE,
+ BRASERO_IMAGE_FS_JOLIET);
+
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->joliet_toggle), FALSE);
+ gtk_widget_set_sensitive (priv->joliet_toggle, FALSE);
+ }
+ else {
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->joliet_toggle),
+ (fs_type & BRASERO_IMAGE_FS_JOLIET));
+ gtk_widget_set_sensitive (priv->joliet_toggle, TRUE);
+ }
- priv->joliet_warning = FALSE;
+ g_signal_handlers_unblock_by_func (priv->joliet_toggle,
+ brasero_data_options_joliet_toggled_cb,
+ dialog);
}
static void
@@ -234,7 +284,7 @@ brasero_data_options_set_property (GObject *object,
case PROP_SESSION: /* Readable and only writable at creation time */
priv->session = BRASERO_BURN_SESSION (g_value_get_object (value));
g_object_ref (priv->session);
- brasero_data_options_update_joliet (BRASERO_DATA_OPTIONS(object));
+ brasero_data_options_update_joliet_start (BRASERO_DATA_OPTIONS (object));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]