Updating branch refs/heads/master to a92f2afe680e16aeed00914e7cd6739101063ad8 (commit) from 76303ab55ef129f09612037b87815b6f704489b3 (commit)
commit a92f2afe680e16aeed00914e7cd6739101063ad8 Author: David Mohr <da...@mcbf.net> Date: Sat Nov 17 21:54:06 2012 -0700 Add setting to quit right after successfully burning an image xfburn/xfburn-burn-image-dialog.c | 16 ++++++++++++++-- xfburn/xfburn-progress-dialog.c | 34 ++++++++++++++++++++++++++++++++++ xfburn/xfburn-progress-dialog.h | 2 ++ 3 files changed, 50 insertions(+), 2 deletions(-) diff --git a/xfburn/xfburn-burn-image-dialog.c b/xfburn/xfburn-burn-image-dialog.c index 0ca304f..44e5d12 100644 --- a/xfburn/xfburn-burn-image-dialog.c +++ b/xfburn/xfburn-burn-image-dialog.c @@ -50,6 +50,7 @@ typedef struct { gboolean eject; gboolean dummy; gboolean burnfree; + gboolean quit; struct burn_disc *disc; struct burn_session *session; @@ -68,6 +69,7 @@ typedef struct GtkWidget *check_eject; GtkWidget *check_burnfree; + GtkWidget *check_quit; GtkWidget *check_dummy; GtkWidget *burn_button; @@ -221,6 +223,11 @@ xfburn_burn_image_dialog_init (XfburnBurnImageDialog * obj) gtk_widget_show (priv->check_burnfree); gtk_box_pack_start (GTK_BOX (vbox), priv->check_burnfree, FALSE, FALSE, BORDER); + priv->check_quit = gtk_check_button_new_with_mnemonic (_("_Quit after successful completion")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->check_quit), xfburn_settings_get_boolean("quit_after_success", FALSE)); + gtk_widget_show (priv->check_quit); + gtk_box_pack_start (GTK_BOX (vbox), priv->check_quit, FALSE, FALSE, BORDER); + /* action buttons */ button = gtk_button_new_from_stock (GTK_STOCK_CANCEL); gtk_widget_show (button); @@ -428,11 +435,17 @@ cb_dialog_response (XfburnBurnImageDialog * dialog, gint response_id, gpointer u XfburnBurnImageDialogPrivate *priv = XFBURN_BURN_IMAGE_DIALOG_GET_PRIVATE (dialog); GtkWidget *dialog_progress; + gboolean quit; dialog_progress = xfburn_progress_dialog_new (GTK_WINDOW (dialog)); gtk_window_set_transient_for (GTK_WINDOW (dialog_progress), gtk_window_get_transient_for (GTK_WINDOW (dialog))); gtk_widget_hide (GTK_WIDGET (dialog)); - + + quit = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(priv->check_quit)); + xfburn_settings_set_boolean ("quit_after_success", quit); + + g_object_set (G_OBJECT (dialog_progress), "quit", quit, NULL); + priv->params->dialog_progress = dialog_progress; gtk_widget_show (dialog_progress); @@ -588,7 +601,6 @@ cb_clicked_ok (GtkButton *button, gpointer user_data) } } - /* public */ GtkWidget * xfburn_burn_image_dialog_new (void) diff --git a/xfburn/xfburn-progress-dialog.c b/xfburn/xfburn-progress-dialog.c index 1272e03..1448bf4 100644 --- a/xfburn/xfburn-progress-dialog.c +++ b/xfburn/xfburn-progress-dialog.c @@ -38,6 +38,11 @@ #define XFBURN_PROGRESS_DIALOG_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), XFBURN_TYPE_PROGRESS_DIALOG, XfburnProgressDialogPrivate)) +enum { + BURNING_DONE, + LAST_SIGNAL, +}; + /* struct */ typedef struct { @@ -46,6 +51,7 @@ typedef struct gboolean animate; int ani_index; gboolean stop; + gboolean quit; GtkWidget *label_action; GtkWidget *progress_bar; @@ -59,6 +65,8 @@ typedef struct } XfburnProgressDialogPrivate; /* globals */ +static guint signals[LAST_SIGNAL]; + static void xfburn_progress_dialog_class_init (XfburnProgressDialogClass * klass); static void xfburn_progress_dialog_init (XfburnProgressDialog * sp); @@ -80,6 +88,7 @@ enum PROP_STATUS, PROP_SHOW_BUFFERS, PROP_ANIMATE, + PROP_QUIT, PROP_STOP, }; @@ -157,9 +166,17 @@ xfburn_progress_dialog_class_init (XfburnProgressDialogClass * klass) g_object_class_install_property (object_class, PROP_ANIMATE, g_param_spec_boolean ("animate", "Show an animation", "Show an animation", FALSE, G_PARAM_READWRITE)); + g_object_class_install_property (object_class, PROP_QUIT, + g_param_spec_boolean ("quit", "Quit", "Quit after successful completion", + FALSE, G_PARAM_READWRITE)); g_object_class_install_property (object_class, PROP_STOP, g_param_spec_boolean ("stop", "Stop the burning process", "Stop the burning process", FALSE, G_PARAM_READABLE)); + /* signals */ + signals[BURNING_DONE] = g_signal_new ("burning-done", XFBURN_TYPE_PROGRESS_DIALOG, G_SIGNAL_ACTION, + G_STRUCT_OFFSET (XfburnProgressDialogClass, burning_done), + NULL, NULL, g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); } static void @@ -262,6 +279,9 @@ xfburn_progress_dialog_get_property (GObject * object, guint prop_id, GValue * v case PROP_ANIMATE: g_value_set_boolean (value, priv->animate); break; + case PROP_QUIT: + g_value_set_boolean (value, priv->quit); + break; case PROP_STOP: g_value_set_boolean (value, priv->stop); break; @@ -289,6 +309,9 @@ xfburn_progress_dialog_set_property (GObject * object, guint prop_id, const GVal priv->ani_index = 0; //DBG ("Set animate to %d", priv->animate); break; + case PROP_QUIT: + priv->quit = g_value_get_boolean (value); + break; case PROP_STOP: DBG ("this should not be allowed..."); priv->stop = g_value_get_boolean (value); @@ -528,6 +551,9 @@ xfburn_progress_dialog_set_progress_bar_fraction (XfburnProgressDialog * dialog, case XFBURN_PROGRESS_DIALOG_STATUS_RUNNING: text = g_strdup ("100%"); break; + case XFBURN_PROGRESS_DIALOG_STATUS_META_DONE: + g_warning ("Invalid progress dialog state"); + break; case XFBURN_PROGRESS_DIALOG_STATUS_FAILED: text = g_strdup (_("Failed")); break; @@ -587,9 +613,17 @@ xfburn_progress_dialog_set_status (XfburnProgressDialog * dialog, XfburnProgress void xfburn_progress_dialog_set_status_with_text (XfburnProgressDialog * dialog, XfburnProgressDialogStatus status, const gchar * text) { + XfburnProgressDialogPrivate *priv = XFBURN_PROGRESS_DIALOG_GET_PRIVATE (dialog); + xfburn_progress_dialog_set_status (dialog, status); + gdk_threads_enter (); set_action_text (dialog, status, text); + if (status > XFBURN_PROGRESS_DIALOG_STATUS_META_DONE) { + g_signal_emit (G_OBJECT (dialog), signals[BURNING_DONE], 0); + if (status == XFBURN_PROGRESS_DIALOG_STATUS_COMPLETED && priv->quit) + g_idle_add ((GSourceFunc) gtk_main_quit, NULL ); + } gdk_threads_leave (); } diff --git a/xfburn/xfburn-progress-dialog.h b/xfburn/xfburn-progress-dialog.h index 7c1e47e..386c9f8 100644 --- a/xfburn/xfburn-progress-dialog.h +++ b/xfburn/xfburn-progress-dialog.h @@ -34,6 +34,7 @@ typedef enum { XFBURN_PROGRESS_DIALOG_STATUS_STOPPING, XFBURN_PROGRESS_DIALOG_STATUS_RUNNING, + XFBURN_PROGRESS_DIALOG_STATUS_META_DONE, XFBURN_PROGRESS_DIALOG_STATUS_FAILED, XFBURN_PROGRESS_DIALOG_STATUS_CANCELLED, XFBURN_PROGRESS_DIALOG_STATUS_COMPLETED @@ -58,6 +59,7 @@ typedef struct typedef struct { GtkDialogClass parent_class; + void (*burning_done) (XfburnProgressDialog *progress); } XfburnProgressDialogClass; _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits