diff --git a/ChangeLog b/ChangeLog index 0121269..4b260e5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,8 +1,15 @@ +2006-12-02 Lucas Rocha + + * src/zenity.h, src/progress.c, src/option.c: add "auto-kill" option + to progress dialog. Now the user can choose whether to kill parent + process or not (Fixes bug #310824). Patch from Diego Escalante Urrelo + . + 2006-12-02 Lucas Rocha * src/zenity.glade: don't show cancel button on warning dialog (Fixes bug #324100). Patch from Claudio Saavedra - + . 2006-10-02 Guilherme de S. Pastore diff --git a/src/option.c b/src/option.c index 2be4550..79c327a 100644 --- a/src/option.c +++ b/src/option.c @@ -82,6 +82,7 @@ static gboolean zenity_progress_active; static int zenity_progress_percentage; static gboolean zenity_progress_pulsate; static gboolean zenity_progress_auto_close; +static gboolean zenity_progress_auto_kill; /* Question Dialog Options */ static gboolean zenity_question_active; @@ -561,6 +562,16 @@ static GOptionEntry progress_options[] = { N_("Dismiss the dialog when 100% has been reached"), NULL }, + { + "auto-kill", + '\0', + 0, + G_OPTION_ARG_NONE, + &zenity_progress_auto_kill, + /* xgettext: no-c-format */ + N_("Kill parent process if cancel button is pressed"), + NULL + }, { NULL } @@ -974,6 +985,7 @@ zenity_progress_pre_callback (GOptionContext *context, zenity_progress_percentage = 0; zenity_progress_pulsate = FALSE; zenity_progress_auto_close = FALSE; + zenity_progress_auto_kill = FALSE; return TRUE; } @@ -1282,6 +1294,7 @@ zenity_progress_post_callback (GOptionContext *context, results->progress_data->dialog_text = zenity_general_dialog_text; results->progress_data->pulsate = zenity_progress_pulsate; results->progress_data->autoclose = zenity_progress_auto_close; + results->progress_data->autokill = zenity_progress_auto_kill; results->progress_data->percentage = zenity_progress_percentage; } else { if (zenity_progress_pulsate) @@ -1295,6 +1308,10 @@ zenity_progress_post_callback (GOptionContext *context, if (zenity_progress_auto_close) zenity_option_error (zenity_option_get_name (progress_options, &zenity_progress_auto_close), ERROR_SUPPORT); + + if (zenity_progress_auto_kill) + zenity_option_error (zenity_option_get_name (progress_options, &zenity_progress_auto_kill), + ERROR_SUPPORT); } return TRUE; diff --git a/src/progress.c b/src/progress.c index 68f34ac..d14969b 100644 --- a/src/progress.c +++ b/src/progress.c @@ -37,6 +37,8 @@ static GladeXML *glade_dialog; static ZenityData *zen_data; static GIOChannel *channel; +static gboolean autokill; + gint zenity_progress_timeout (gpointer data); gint zenity_progress_pulsate_timeout (gpointer data); @@ -214,6 +216,8 @@ zenity_progress (ZenityData *data, ZenityProgressData *progress_data) gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progress_bar), progress_data->percentage/100.0); + autokill = progress_data->autokill; + zenity_util_show_dialog (dialog); zenity_progress_read_info (progress_data); @@ -229,14 +233,19 @@ zenity_progress_dialog_response (GtkWidget *widget, int response, gpointer data) break; case GTK_RESPONSE_CANCEL: - /* FIXME: This should kill off the parent process nicely and return an error code - * I'm pretty sure there is a nice way to do this, but I'm clueless about this - * stuff. Should be using SIGHUP instead of 1 though. - */ - kill (getppid (), 1); + /* We do not want to kill the parent process, in order to give the user + the ability to choose the action to be taken. See bug #310824. + -- Monday 27, March 2006 + But we want to give people the option to choose this behavior. + */ + if (autokill) { + kill (getppid (), 1); + zen_data->exit_code = zenity_util_return_exit_code (ZENITY_CANCEL); + break; + } zen_data->exit_code = zenity_util_return_exit_code (ZENITY_CANCEL); break; - + default: /* Esc dialog */ zen_data->exit_code = zenity_util_return_exit_code (ZENITY_ESC); diff --git a/src/zenity.h b/src/zenity.h index c15f950..330d317 100644 --- a/src/zenity.h +++ b/src/zenity.h @@ -91,6 +91,7 @@ typedef struct { gchar *entry_text; gboolean pulsate; gboolean autoclose; + gboolean autokill; gdouble percentage; } ZenityProgressData;