diff --git a/src/option.c b/src/option.c index 0e3ede5..bc09009 100644 --- a/src/option.c +++ b/src/option.c @@ -86,6 +86,7 @@ static int zenity_progress_percentage; static gboolean zenity_progress_pulsate; static gboolean zenity_progress_auto_close; static gboolean zenity_progress_auto_kill; +static gboolean zenity_progress_no_cancel; /* Question Dialog Options */ static gboolean zenity_question_active; @@ -607,6 +608,16 @@ static GOptionEntry progress_options[] = { N_("Kill parent process if cancel button is pressed"), NULL }, + { + "no-cancel", + '\0', + 0, + G_OPTION_ARG_NONE, + &zenity_progress_no_cancel, + /* xgettext: no-c-format */ + N_("Hide cancel button"), + NULL + }, { NULL } @@ -1050,7 +1061,7 @@ zenity_progress_pre_callback (GOptionContext *context, zenity_progress_pulsate = FALSE; zenity_progress_auto_close = FALSE; zenity_progress_auto_kill = FALSE; - + zenity_progress_no_cancel = FALSE; return TRUE; } @@ -1370,6 +1381,7 @@ zenity_progress_post_callback (GOptionContext *context, results->progress_data->autoclose = zenity_progress_auto_close; results->progress_data->autokill = zenity_progress_auto_kill; results->progress_data->percentage = zenity_progress_percentage; + results->progress_data->no_cancel = zenity_progress_no_cancel; } else { if (zenity_progress_pulsate) zenity_option_error (zenity_option_get_name (progress_options, &zenity_progress_pulsate), @@ -1386,6 +1398,9 @@ zenity_progress_post_callback (GOptionContext *context, if (zenity_progress_auto_kill) zenity_option_error (zenity_option_get_name (progress_options, &zenity_progress_auto_kill), ERROR_SUPPORT); + if (zenity_progress_no_cancel) + zenity_option_error (zenity_option_get_name (progress_options, &zenity_progress_no_cancel), + ERROR_SUPPORT); } return TRUE; diff --git a/src/progress.c b/src/progress.c index bc1c102..40f9182 100644 --- a/src/progress.c +++ b/src/progress.c @@ -38,6 +38,8 @@ static GIOChannel *channel; static gint pulsate_timeout = -1; static gboolean autokill; +static gboolean no_cancel; +static gboolean auto_close; gint zenity_progress_timeout (gpointer data); gint zenity_progress_pulsate_timeout (gpointer data); @@ -227,6 +229,7 @@ zenity_progress (ZenityData *data, ZenityProgressData *progress_data) GtkWidget *dialog; GObject *text; GObject *progress_bar; + GObject *cancel_button,*ok_button; zen_data = data; builder = zenity_util_load_ui_file ("zenity_progress_dialog", NULL); @@ -265,6 +268,20 @@ zenity_progress (ZenityData *data, ZenityProgressData *progress_data) autokill = progress_data->autokill; + auto_close = progress_data->autoclose; + ok_button = gtk_builder_get_object (builder, "zenity_progress_ok_button"); + + no_cancel = progress_data->no_cancel; + cancel_button = gtk_builder_get_object (builder, "zenity_progress_cancel_button"); + + if (no_cancel) { + gtk_widget_hide (GTK_WIDGET(cancel_button)); + gtk_window_set_deletable (GTK_WINDOW (dialog), FALSE); + } + + if (no_cancel && auto_close) + gtk_widget_hide(GTK_WIDGET(ok_button)); + zenity_util_show_dialog (dialog); zenity_progress_read_info (progress_data); diff --git a/src/zenity.h b/src/zenity.h index fa65b0c..9d7a153 100644 --- a/src/zenity.h +++ b/src/zenity.h @@ -98,6 +98,7 @@ typedef struct { gboolean autoclose; gboolean autokill; gdouble percentage; + gboolean no_cancel; } ZenityProgressData; typedef struct {