--- /dev/null
+commit 5872558feef3727e3ff1bb2bf395dfc6bd896f74
+Author: Arx Cruz <arxcruz@src.gnome.org>
+Date: Tue Jun 28 17:09:04 2011 -0300
+
+ This change add a new functionality to text-info:
+
+ * Added a cancel button returning 1 if clicked
+ * Renamed the Close button to Ok, still returning 0 if clicked
+ * Added --ok-label=TEXT option to change the Ok button label
+ * Added --cancel-label=TEXT option to change the Cancel button label
+ * Added --checkbox=TEXT option to show an "I Agree and accept the terms" checkbox
+ If --checkbox is enabled, the Ok button will be disabled if the checkbox isn't checked.
+
+diff --git a/src/option.c zenity-2.32.1/src/option.c
+index cd81209..954ba64 100644
+--- a/src/option.c
++++ zenity-2.32.1/src/option.c
+@@ -41,6 +41,8 @@ static gboolean zenity_general_editable;
+ static gchar *zenity_general_uri;
+ static gboolean zenity_general_dialog_no_wrap;
+ static gint zenity_general_timeout_delay;
++static gchar *zenity_general_ok_button;
++static gchar *zenity_general_cancel_button;
+
+ /* Calendar Dialog Options */
+ static gboolean zenity_calendar_active;
+@@ -92,12 +94,11 @@ static gboolean zenity_progress_no_cancel;
+
+ /* Question Dialog Options */
+ static gboolean zenity_question_active;
+-static gchar *zenity_question_ok_button;
+-static gchar *zenity_question_cancel_button;
+
+ /* Text Dialog Options */
+ static gboolean zenity_text_active;
+ static gchar *zenity_text_font;
++static gchar *zenity_text_checkbox;
+
+ /* Warning Dialog Options */
+ static gboolean zenity_warning_active;
+@@ -672,7 +673,7 @@ static GOptionEntry question_options[] = {
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_STRING,
+- &zenity_question_ok_button,
++ &zenity_general_ok_button,
+ N_("Sets the label of the Ok button"),
+ N_("TEXT")
+ },
+@@ -681,7 +682,7 @@ static GOptionEntry question_options[] = {
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+ G_OPTION_ARG_STRING,
+- &zenity_question_cancel_button,
++ &zenity_general_cancel_button,
+ N_("Sets the label of the Cancel button"),
+ N_("TEXT")
+ },
+@@ -736,6 +737,33 @@ static GOptionEntry text_options[] = {
+ N_("Set the text font"),
+ N_("TEXT")
+ },
++ {
++ "ok-label",
++ '\0',
++ G_OPTION_FLAG_NOALIAS,
++ G_OPTION_ARG_STRING,
++ &zenity_general_ok_button,
++ N_("Sets the label of the Ok button"),
++ N_("TEXT")
++ },
++ {
++ "cancel-label",
++ '\0',
++ G_OPTION_FLAG_NOALIAS,
++ G_OPTION_ARG_STRING,
++ &zenity_general_cancel_button,
++ N_("Sets the label of the Cancel button"),
++ N_("TEXT")
++ },
++ {
++ "checkbox",
++ '\0',
++ G_OPTION_FLAG_NOALIAS,
++ G_OPTION_ARG_STRING,
++ &zenity_text_checkbox,
++ N_("Enable a I read and agree checkbox"),
++ N_("TEXT")
++ },
+ {
+ NULL
+ }
+@@ -1040,6 +1068,10 @@ zenity_option_free (void) {
+ if (zenity_general_uri)
+ g_free (zenity_general_uri);
+ g_free (zenity_general_separator);
++ if (zenity_general_ok_button)
++ g_free (zenity_general_ok_button);
++ if (zenity_general_cancel_button)
++ g_free (zenity_general_cancel_button);
+
+ if (zenity_calendar_date_format)
+ g_free (zenity_calendar_date_format);
+@@ -1060,13 +1092,10 @@ zenity_option_free (void) {
+ if (zenity_list_hide_column)
+ g_free (zenity_list_hide_column);
+
+- if (zenity_question_ok_button)
+- g_free (zenity_question_ok_button);
+- if (zenity_question_cancel_button)
+- g_free (zenity_question_cancel_button);
+-
+ if (zenity_text_font)
+ g_free (zenity_text_font);
++ if (zenity_text_checkbox)
++ g_free (zenity_text_checkbox);
+
+ if (zenity_colorsel_color)
+ g_free (zenity_colorsel_color);
+@@ -1145,6 +1174,8 @@ zenity_general_pre_callback (GOptionContext *context,
+ zenity_general_multiple = FALSE;
+ zenity_general_editable = FALSE;
+ zenity_general_uri = NULL;
++ zenity_general_ok_button = NULL;
++ zenity_general_cancel_button = NULL;
+ zenity_general_dialog_no_wrap = FALSE;
+ zenity_general_timeout_delay = -1;
+
+@@ -1281,7 +1312,7 @@ zenity_text_pre_callback (GOptionContext *context,
+ {
+ zenity_text_active = FALSE;
+ zenity_text_font = NULL;
+-
++ zenity_text_checkbox = NULL;
+ return TRUE;
+ }
+
+@@ -1610,7 +1641,6 @@ zenity_progress_post_callback (GOptionContext *context,
+ GError **error)
+ {
+ zenity_option_set_dialog_mode (zenity_progress_active, MODE_PROGRESS);
+-
+ if (results->mode == MODE_PROGRESS) {
+ results->progress_data->dialog_text = zenity_general_dialog_text;
+ results->progress_data->pulsate = zenity_progress_pulsate;
+@@ -1649,14 +1679,12 @@ zenity_question_post_callback (GOptionContext *context,
+ GError **error)
+ {
+ zenity_option_set_dialog_mode (zenity_question_active, MODE_QUESTION);
+-
+-
+ if (results->mode == MODE_QUESTION) {
+ results->msg_data->dialog_text = zenity_general_dialog_text;
+ results->msg_data->mode = ZENITY_MSG_QUESTION;
+ results->msg_data->no_wrap = zenity_general_dialog_no_wrap;
+- results->msg_data->ok_label = zenity_question_ok_button;
+- results->msg_data->cancel_label = zenity_question_cancel_button;
++ results->msg_data->ok_label = zenity_general_ok_button;
++ results->msg_data->cancel_label = zenity_general_cancel_button;
+ }
+
+ return TRUE;
+@@ -1675,12 +1703,14 @@ zenity_text_post_callback (GOptionContext *context,
+ results->text_data->editable = zenity_general_editable;
+ results->text_data->no_wrap = zenity_general_dialog_no_wrap;
+ results->text_data->font = zenity_text_font;
++ results->text_data->ok_label = zenity_general_ok_button;
++ results->text_data->cancel_label = zenity_general_cancel_button;
++ results->text_data->checkbox = zenity_text_checkbox;
+ } else {
+- if (zenity_text_font)
++ if (zenity_text_font)
+ zenity_option_error (zenity_option_get_name (text_options, &zenity_text_font),
+ ERROR_SUPPORT);
+ }
+-
+ return TRUE;
+ }
+
+@@ -2063,7 +2093,15 @@ zenity_option_parse (gint argc, gchar **argv)
+ if (zenity_general_uri)
+ if (results->mode != MODE_FILE && results->mode != MODE_TEXTINFO)
+ zenity_option_error (zenity_option_get_name (text_options, &zenity_general_uri), ERROR_SUPPORT);
++
++ if (zenity_general_ok_button)
++ if(results->mode != MODE_QUESTION && results->mode != MODE_TEXTINFO)
++ zenity_option_error (zenity_option_get_name (text_options, &zenity_general_ok_button), ERROR_SUPPORT);
+
++ if (zenity_general_cancel_button)
++ if(results->mode != MODE_QUESTION && results->mode != MODE_TEXTINFO)
++ zenity_option_error (zenity_option_get_name (text_options, &zenity_general_cancel_button), ERROR_SUPPORT);
++
+ if (zenity_general_dialog_no_wrap)
+ if (results->mode != MODE_INFO && results->mode != MODE_ERROR && results->mode != MODE_QUESTION && results->mode != MODE_WARNING && results->mode != MODE_TEXTINFO)
+ zenity_option_error (zenity_option_get_name (text_options, &zenity_general_dialog_no_wrap), ERROR_SUPPORT);
+diff --git a/src/text.c zenity-2.32.1/src/text.c
+index 9868675..fabc860 100644
+--- a/src/text.c
++++ zenity-2.32.1/src/text.c
+@@ -29,6 +29,7 @@
+ static ZenityTextData *zen_text_data;
+
+ static void zenity_text_dialog_response (GtkWidget *widget, int response, gpointer data);
++static void zenity_text_toggle_button (GtkToggleButton *button, gpointer data);
+
+ static gboolean
+ zenity_text_handle_stdin (GIOChannel *channel,
+@@ -103,6 +104,10 @@ zenity_text (ZenityData *data, ZenityTextData *text_data)
+ {
+ GtkBuilder *builder;
+ GtkWidget *dialog;
++ GtkWidget *ok_button;
++ GtkWidget *checkbox;
++ GtkWidget *cancel_button;
++
+ GObject *text_view;
+ GtkTextBuffer *text_buffer;
+
+@@ -118,7 +123,11 @@ zenity_text (ZenityData *data, ZenityTextData *text_data)
+ gtk_builder_connect_signals (builder, NULL);
+
+ dialog = GTK_WIDGET (gtk_builder_get_object (builder, "zenity_text_dialog"));
+-
++
++ ok_button = GTK_WIDGET (gtk_builder_get_object (builder, "zenity_text_close_button"));
++ cancel_button = GTK_WIDGET (gtk_builder_get_object (builder, "zenity_text_cancel_button"));
++ checkbox = GTK_WIDGET (gtk_builder_get_object (builder, "zenity_text_checkbox"));
++
+ g_signal_connect (G_OBJECT (dialog), "response",
+ G_CALLBACK (zenity_text_dialog_response), data);
+
+@@ -150,6 +159,21 @@ zenity_text (ZenityData *data, ZenityTextData *text_data)
+ if (text_data->editable)
+ zen_text_data->buffer = text_buffer;
+
++ if (text_data->ok_label)
++ gtk_button_set_label (GTK_BUTTON(ok_button), text_data->ok_label);
++
++ if (text_data->cancel_label)
++ gtk_button_set_label (GTK_BUTTON(cancel_button), text_data->cancel_label);
++
++ if (text_data->checkbox) {
++ gtk_widget_set_visible (GTK_WIDGET(checkbox), TRUE);
++ gtk_widget_set_sensitive (GTK_WIDGET(ok_button), FALSE);
++ gtk_button_set_label (GTK_BUTTON(checkbox), text_data->checkbox);
++
++ g_signal_connect (G_OBJECT (checkbox), "toggled",
++ G_CALLBACK (zenity_text_toggle_button), ok_button);
++ }
++
+ if (data->width > -1 || data->height > -1)
+ gtk_window_set_default_size (GTK_WINDOW (dialog), data->width, data->height);
+ else
+@@ -167,6 +191,13 @@ zenity_text (ZenityData *data, ZenityTextData *text_data)
+ }
+
+ static void
++zenity_text_toggle_button (GtkToggleButton *button, gpointer data)
++{
++ GtkWidget *ok_button = (GtkWidget *)data;
++ gtk_widget_set_sensitive (GTK_WIDGET(ok_button), gtk_toggle_button_get_active(button));
++}
++
++static void
+ zenity_text_dialog_response (GtkWidget *widget, int response, gpointer data)
+ {
+ ZenityData *zen_data = data;
+@@ -176,7 +207,6 @@ zenity_text_dialog_response (GtkWidget *widget, int response, gpointer data)
+ if (zen_text_data->editable) {
+ GtkTextIter start, end;
+ gchar *text;
+-
+ gtk_text_buffer_get_bounds (zen_text_data->buffer, &start, &end);
+ text = gtk_text_buffer_get_text (zen_text_data->buffer, &start, &end, 0);
+ g_print ("%s", text);
+diff --git a/src/zenity.h zenity-2.32.1/src/zenity.h
+index e5c6f4c..fd744b6 100644
+--- a/src/zenity.h
++++ zenity-2.32.1/src/zenity.h
+@@ -107,6 +107,9 @@ typedef struct {
+ gboolean no_wrap;
+ gchar *font;
+ GtkTextBuffer *buffer;
++ gchar *ok_label;
++ gchar *cancel_label;
++ gchar *checkbox;
+ } ZenityTextData;
+
+ typedef struct {
+diff --git a/src/zenity.ui zenity-2.32.1/src/zenity.ui
+index 3187d0b..07aa51a 100644
+--- a/src/zenity.ui
++++ zenity-2.32.1/src/zenity.ui
+@@ -423,11 +423,10 @@
+ <property name="visible">True</property>
+ <property name="layout_style">end</property>
+ <child>
+- <object class="GtkButton" id="zenity_text_close_button">
+- <property name="label">gtk-close</property>
++ <object class="GtkButton" id="zenity_text_cancel_button">
++ <property name="label">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+- <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ </object>
+@@ -447,6 +446,7 @@
+ </object>
+ </child>
+ <action-widgets>
++ <action-widget response="-6">zenity_text_cancel_button</action-widget>
+ <action-widget response="-7">zenity_text_close_button</action-widget>
+ </action-widgets>
+ </object>
+@@ -807,6 +807,23 @@
+ <property name="position">0</property>
+ </packing>
+ </child>
++ <child>
++ <object class="GtkButton" id="zenity_text_close_button">
++ <property name="label">gtk-ok</property>
++ <property name="visible">True</property>
++ <property name="can_focus">True</property>
++ <property name="can_default">True</property>
++ <property name="receives_default">True</property>
++ <property name="use_action_appearance">False</property>
++ <property name="use_stock">True</property>
++ <property name="image_position">right</property>
++ </object>
++ <packing>
++ <property name="expand">False</property>
++ <property name="fill">False</property>
++ <property name="position">1</property>
++ </packing>
++ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+@@ -865,6 +882,20 @@
+ <property name="position">1</property>
+ </packing>
+ </child>
++ <child>
++ <object class="GtkCheckButton" id="zenity_text_checkbox">
++ <property name="can_focus">True</property>
++ <property name="receives_default">False</property>
++ <property name="use_action_appearance">False</property>
++ <property name="xalign">0</property>
++ <property name="draw_indicator">True</property>
++ </object>
++ <packing>
++ <property name="expand">False</property>
++ <property name="fill">False</property>
++ <property name="position">1</property>
++ </packing>
++ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
--- /dev/null
+commit 6768a40e997697d05008aecdb41815e1dbae61c6
+Author: Arx Cruz <arxcruz@gnome.org>
+Date: Tue Jul 26 14:00:28 2011 -0300
+
+ Fix for bug #611297 Now Zenity have --ok-label and --cancel-label in all dialogs. This patch doesn't break old zenity scripts.
+
+diff -urp zenity-2.32.1_2/src/calendar.c zenity-2.32.1/src/calendar.c
+--- zenity-2.32.1_2/src/calendar.c 2012-02-17 18:03:32.841172001 +0200
++++ zenity-2.32.1/src/calendar.c 2012-02-17 18:08:18.521172001 +0200
+@@ -39,6 +39,7 @@ zenity_calendar (ZenityData *data, Zenit
+ {
+ GtkBuilder *builder;
+ GtkWidget *dialog;
++ GtkWidget *button;
+ GObject *text;
+
+ zen_cal_data = cal_data;
+@@ -88,6 +89,20 @@ zenity_calendar (ZenityData *data, Zenit
+ g_timeout_add_seconds (data->timeout_delay, (GSourceFunc) zenity_util_timeout_handle, NULL);
+ }
+
++ if (data->ok_label) {
++ button = GTK_WIDGET (gtk_builder_get_object (builder, "zenity_calendar_ok_button"));
++ gtk_button_set_label (GTK_BUTTON (button), data->ok_label);
++ gtk_button_set_image (GTK_BUTTON (button),
++ gtk_image_new_from_stock (GTK_STOCK_OK, GTK_ICON_SIZE_BUTTON));
++ }
++
++ if (data->cancel_label) {
++ button = GTK_WIDGET (gtk_builder_get_object (builder, "zenity_calendar_cancel_button"));
++ gtk_button_set_label (GTK_BUTTON (button), data->cancel_label);
++ gtk_button_set_image (GTK_BUTTON (button),
++ gtk_image_new_from_stock (GTK_STOCK_CANCEL, GTK_ICON_SIZE_BUTTON));
++ }
++
+ g_object_unref (builder);
+
+ gtk_main ();
+diff -urp zenity-2.32.1_2/src/color.c zenity-2.32.1/src/color.c
+--- zenity-2.32.1_2/src/color.c 2012-02-17 18:03:32.831172000 +0200
++++ zenity-2.32.1/src/color.c 2012-02-17 18:03:51.161171999 +0200
+@@ -35,6 +35,7 @@ void zenity_colorselection (ZenityData *
+ {
+ GtkWidget *dialog;
+ GtkWidget *colorsel;
++ GtkWidget *button;
+ GdkColor color;
+
+ zen_data = data;
+@@ -56,6 +57,22 @@ void zenity_colorselection (ZenityData *
+ &color);
+ }
+
++ if (data->ok_label) {
++ g_object_get (G_OBJECT (dialog), "ok-button", &button);
++ gtk_button_set_label (GTK_BUTTON (button), data->ok_label);
++ gtk_button_set_image (GTK_BUTTON (button),
++ gtk_image_new_from_stock (GTK_STOCK_OK, GTK_ICON_SIZE_BUTTON));
++ g_object_unref (G_OBJECT (button));
++ }
++
++ if (data->cancel_label) {
++ g_object_get (G_OBJECT (dialog), "cancel-button", &button);
++ gtk_button_set_label (GTK_BUTTON (button), data->cancel_label);
++ gtk_button_set_image (GTK_BUTTON (button),
++ gtk_image_new_from_stock (GTK_STOCK_CANCEL, GTK_ICON_SIZE_BUTTON));
++ g_object_unref (G_OBJECT (button));
++ }
++
+ gtk_color_selection_set_has_palette (GTK_COLOR_SELECTION (colorsel),
+ color_data->show_palette);
+
+diff -urp zenity-2.32.1_2/src/entry.c zenity-2.32.1/src/entry.c
+--- zenity-2.32.1_2/src/entry.c 2012-02-17 18:03:32.831172000 +0200
++++ zenity-2.32.1/src/entry.c 2012-02-17 18:03:51.161171999 +0200
+@@ -53,6 +53,7 @@ zenity_entry (ZenityData *data, ZenityEn
+ {
+ GtkBuilder *builder = NULL;
+ GtkWidget *dialog;
++ GtkWidget *button;
+ GObject *text;
+ GSList *entries = NULL;
+ GSList *tmp;
+@@ -79,6 +80,20 @@ zenity_entry (ZenityData *data, ZenityEn
+
+ if (data->width > -1 || data->height > -1)
+ gtk_window_set_default_size (GTK_WINDOW (dialog), data->width, data->height);
++
++ if (data->ok_label) {
++ button = GTK_WIDGET (gtk_builder_get_object (builder, "zenity_entry_ok_button"));
++ gtk_button_set_label (GTK_BUTTON (button), data->ok_label);
++ gtk_button_set_image (GTK_BUTTON (button),
++ gtk_image_new_from_stock (GTK_STOCK_OK, GTK_ICON_SIZE_BUTTON));
++ }
++
++ if (data->cancel_label) {
++ button = GTK_WIDGET (gtk_builder_get_object (builder, "zenity_entry_cancel_button"));
++ gtk_button_set_label (GTK_BUTTON (button), data->cancel_label);
++ gtk_button_set_image (GTK_BUTTON (button),
++ gtk_image_new_from_stock (GTK_STOCK_CANCEL, GTK_ICON_SIZE_BUTTON));
++ }
+
+ text = gtk_builder_get_object (builder, "zenity_entry_text");
+
+diff -urp zenity-2.32.1_2/src/msg.c zenity-2.32.1/src/msg.c
+--- zenity-2.32.1_2/src/msg.c 2012-02-17 18:03:32.831172000 +0200
++++ zenity-2.32.1/src/msg.c 2012-02-17 18:03:51.161171999 +0200
+@@ -29,7 +29,7 @@
+ static void zenity_msg_dialog_response (GtkWidget *widget, int response, gpointer data);
+
+ static void
+-zenity_msg_construct_question_dialog (GtkWidget *dialog, ZenityMsgData *msg_data)
++zenity_msg_construct_question_dialog (GtkWidget *dialog, ZenityMsgData *msg_data, ZenityData *data)
+ {
+ GtkWidget *cancel_button, *ok_button;
+
+@@ -38,14 +38,14 @@ zenity_msg_construct_question_dialog (Gt
+
+ gtk_widget_grab_focus (ok_button);
+
+- if (msg_data->cancel_label) {
+- gtk_button_set_label (GTK_BUTTON (cancel_button), msg_data->cancel_label);
++ if (data->cancel_label) {
++ gtk_button_set_label (GTK_BUTTON (cancel_button), data->cancel_label);
+ gtk_button_set_image (GTK_BUTTON (cancel_button),
+ gtk_image_new_from_stock (GTK_STOCK_CANCEL, GTK_ICON_SIZE_BUTTON));
+ }
+
+- if (msg_data->ok_label) {
+- gtk_button_set_label (GTK_BUTTON (ok_button), msg_data->ok_label);
++ if (data->ok_label) {
++ gtk_button_set_label (GTK_BUTTON (ok_button), data->ok_label);
+ gtk_button_set_image (GTK_BUTTON (ok_button),
+ gtk_image_new_from_stock (GTK_STOCK_OK, GTK_ICON_SIZE_BUTTON));
+ }
+@@ -56,6 +56,7 @@ zenity_msg (ZenityData *data, ZenityMsgD
+ {
+ GtkBuilder *builder;
+ GtkWidget *dialog;
++ GtkWidget *ok_button;
+ GObject *text;
+
+ switch (msg_data->mode) {
+@@ -63,30 +64,35 @@ zenity_msg (ZenityData *data, ZenityMsgD
+ builder = zenity_util_load_ui_file ("zenity_warning_dialog", NULL);
+ dialog = GTK_WIDGET (gtk_builder_get_object (builder, "zenity_warning_dialog"));
+ text = gtk_builder_get_object (builder, "zenity_warning_text");
++ ok_button = GTK_WIDGET (gtk_builder_get_object (builder, "zenity_warning_ok_button"));
+ break;
+
+ case ZENITY_MSG_QUESTION:
+ builder = zenity_util_load_ui_file ("zenity_question_dialog", NULL);
+ dialog = GTK_WIDGET (gtk_builder_get_object (builder, "zenity_question_dialog"));
+ text = gtk_builder_get_object (builder, "zenity_question_text");
++ ok_button = NULL;
+ break;
+
+ case ZENITY_MSG_ERROR:
+ builder = zenity_util_load_ui_file ("zenity_error_dialog", NULL);
+ dialog = GTK_WIDGET (gtk_builder_get_object (builder, "zenity_error_dialog"));
+ text = gtk_builder_get_object (builder, "zenity_error_text");
++ ok_button = GTK_WIDGET (gtk_builder_get_object (builder, "zenity_error_ok_button"));
+ break;
+
+ case ZENITY_MSG_INFO:
+ builder = zenity_util_load_ui_file ("zenity_info_dialog", NULL);
+ dialog = GTK_WIDGET (gtk_builder_get_object (builder, "zenity_info_dialog"));
+ text = gtk_builder_get_object (builder, "zenity_info_text");
++ ok_button = GTK_WIDGET (gtk_builder_get_object (builder, "zenity_info_ok_button"));
+ break;
+
+ default:
+ builder = NULL;
+ dialog = NULL;
+ text = NULL;
++ ok_button = NULL;
+ g_assert_not_reached ();
+ break;
+ }
+@@ -104,6 +110,14 @@ zenity_msg (ZenityData *data, ZenityMsgD
+ if (data->dialog_title)
+ gtk_window_set_title (GTK_WINDOW (dialog), data->dialog_title);
+
++ if (ok_button) {
++ if (data->ok_label) {
++ gtk_button_set_label (GTK_BUTTON (ok_button), data->ok_label);
++ gtk_button_set_image (GTK_BUTTON (ok_button),
++ gtk_image_new_from_stock (GTK_STOCK_OK, GTK_ICON_SIZE_BUTTON));
++ }
++ }
++
+ switch (msg_data->mode) {
+ case ZENITY_MSG_WARNING:
+ zenity_util_set_window_icon_from_stock (dialog, data->window_icon, GTK_STOCK_DIALOG_WARNING);
+@@ -111,7 +125,7 @@ zenity_msg (ZenityData *data, ZenityMsgD
+
+ case ZENITY_MSG_QUESTION:
+ zenity_util_set_window_icon_from_stock (dialog, data->window_icon, GTK_STOCK_DIALOG_QUESTION);
+- zenity_msg_construct_question_dialog (dialog, msg_data);
++ zenity_msg_construct_question_dialog (dialog, msg_data, data);
+ break;
+
+ case ZENITY_MSG_ERROR:
+diff -urp zenity-2.32.1_2/src/option.c zenity-2.32.1/src/option.c
+--- zenity-2.32.1_2/src/option.c 2012-02-17 18:03:32.831172000 +0200
++++ zenity-2.32.1/src/option.c 2012-02-17 18:09:05.151172001 +0200
+@@ -171,6 +171,24 @@ static GOptionEntry general_options[] =
+ N_("TIMEOUT")
+ },
+ {
++ "ok-label",
++ '\0',
++ G_OPTION_FLAG_NOALIAS,
++ G_OPTION_ARG_STRING,
++ &zenity_general_ok_button,
++ N_("Sets the label of the Ok button"),
++ N_("TEXT")
++ },
++ {
++ "cancel-label",
++ '\0',
++ G_OPTION_FLAG_NOALIAS,
++ G_OPTION_ARG_STRING,
++ &zenity_general_cancel_button,
++ N_("Sets the label of the Cancel button"),
++ N_("TEXT")
++ },
++ {
+ NULL
+ }
+ };
+@@ -654,24 +672,6 @@ static GOptionEntry question_options[] =
+ N_("TEXT")
+ },
+ {
+- "ok-label",
+- '\0',
+- G_OPTION_FLAG_NOALIAS,
+- G_OPTION_ARG_STRING,
+- &zenity_general_ok_button,
+- N_("Sets the label of the Ok button"),
+- N_("TEXT")
+- },
+- {
+- "cancel-label",
+- '\0',
+- G_OPTION_FLAG_NOALIAS,
+- G_OPTION_ARG_STRING,
+- &zenity_general_cancel_button,
+- N_("Sets the label of the Cancel button"),
+- N_("TEXT")
+- },
+- {
+ "no-wrap",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+@@ -723,24 +723,6 @@ static GOptionEntry text_options[] = {
+ N_("TEXT")
+ },
+ {
+- "ok-label",
+- '\0',
+- G_OPTION_FLAG_NOALIAS,
+- G_OPTION_ARG_STRING,
+- &zenity_general_ok_button,
+- N_("Sets the label of the Ok button"),
+- N_("TEXT")
+- },
+- {
+- "cancel-label",
+- '\0',
+- G_OPTION_FLAG_NOALIAS,
+- G_OPTION_ARG_STRING,
+- &zenity_general_cancel_button,
+- N_("Sets the label of the Cancel button"),
+- N_("TEXT")
+- },
+- {
+ "checkbox",
+ '\0',
+ G_OPTION_FLAG_NOALIAS,
+@@ -1281,7 +1263,9 @@ zenity_general_post_callback (GOptionCon
+ results->data->window_icon = zenity_general_window_icon;
+ results->data->width = zenity_general_width;
+ results->data->height = zenity_general_height;
+- results->data->timeout_delay=zenity_general_timeout_delay;
++ results->data->timeout_delay = zenity_general_timeout_delay;
++ results->data->ok_label = zenity_general_ok_button;
++ results->data->cancel_label = zenity_general_cancel_button;
+ return TRUE;
+ }
+
+@@ -1311,6 +1295,7 @@ zenity_calendar_post_callback (GOptionCo
+ results->calendar_data->day = zenity_calendar_day;
+ results->calendar_data->month = zenity_calendar_month;
+ results->calendar_data->year = zenity_calendar_year;
++
+ if (zenity_calendar_date_format)
+ results->calendar_data->date_format = zenity_calendar_date_format;
+ else
+@@ -1557,8 +1542,6 @@ zenity_question_post_callback (GOptionCo
+ results->msg_data->dialog_text = zenity_general_dialog_text;
+ results->msg_data->mode = ZENITY_MSG_QUESTION;
+ results->msg_data->no_wrap = zenity_general_dialog_no_wrap;
+- results->msg_data->ok_label = zenity_general_ok_button;
+- results->msg_data->cancel_label = zenity_general_cancel_button;
+ }
+
+ return TRUE;
+@@ -1577,8 +1560,6 @@ zenity_text_post_callback (GOptionContex
+ results->text_data->editable = zenity_general_editable;
+ results->text_data->no_wrap = zenity_general_dialog_no_wrap;
+ results->text_data->font = zenity_text_font;
+- results->text_data->ok_label = zenity_general_ok_button;
+- results->text_data->cancel_label = zenity_general_cancel_button;
+ results->text_data->checkbox = zenity_text_checkbox;
+ } else {
+ if (zenity_text_font)
+@@ -1930,15 +1911,16 @@ zenity_option_parse (gint argc, gchar **
+ if (zenity_general_uri)
+ if (results->mode != MODE_FILE && results->mode != MODE_TEXTINFO)
+ zenity_option_error (zenity_option_get_name (text_options, &zenity_general_uri), ERROR_SUPPORT);
+-
++
+ if (zenity_general_ok_button)
+- if(results->mode != MODE_QUESTION && results->mode != MODE_TEXTINFO)
+- zenity_option_error (zenity_option_get_name (text_options, &zenity_general_ok_button), ERROR_SUPPORT);
++ if(results->mode == MODE_FILE)
++ zenity_option_error (zenity_option_get_name (general_options, &zenity_general_ok_button), ERROR_SUPPORT);
+
+ if (zenity_general_cancel_button)
+- if(results->mode != MODE_QUESTION && results->mode != MODE_TEXTINFO)
+- zenity_option_error (zenity_option_get_name (text_options, &zenity_general_cancel_button), ERROR_SUPPORT);
+-
++ if(results->mode == MODE_FILE || results->mode == MODE_ERROR || results->mode == MODE_WARNING || results->mode == MODE_INFO)
++ zenity_option_error (zenity_option_get_name (general_options, &zenity_general_cancel_button), ERROR_SUPPORT);
++
++
+ if (zenity_general_dialog_no_wrap)
+ if (results->mode != MODE_INFO && results->mode != MODE_ERROR && results->mode != MODE_QUESTION && results->mode != MODE_WARNING && results->mode != MODE_TEXTINFO)
+ zenity_option_error (zenity_option_get_name (text_options, &zenity_general_dialog_no_wrap), ERROR_SUPPORT);
+diff -urp zenity-2.32.1_2/src/password.c zenity-2.32.1/src/password.c
+--- zenity-2.32.1_2/src/password.c 2012-02-17 18:03:32.851172001 +0200
++++ zenity-2.32.1/src/password.c 2012-02-17 18:03:51.161171999 +0200
+@@ -45,10 +45,10 @@ void zenity_password_dialog (ZenityData
+ dialog = gtk_dialog_new ();
+
+ gtk_dialog_add_button(GTK_DIALOG(dialog),
+- GTK_STOCK_CANCEL,
++ data->cancel_label != NULL ? data->cancel_label : GTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL);
+ gtk_dialog_add_button(GTK_DIALOG(dialog),
+- GTK_STOCK_OK,
++ data->ok_label != NULL ? data->ok_label : GTK_STOCK_OK,
+ GTK_RESPONSE_OK);
+
+ image = gtk_image_new_from_stock(GTK_STOCK_DIALOG_AUTHENTICATION,
+diff -urp zenity-2.32.1_2/src/progress.c zenity-2.32.1/src/progress.c
+--- zenity-2.32.1_2/src/progress.c 2012-02-17 18:03:32.831172000 +0200
++++ zenity-2.32.1/src/progress.c 2012-02-17 18:03:51.161171999 +0200
+@@ -227,6 +227,7 @@ void
+ zenity_progress (ZenityData *data, ZenityProgressData *progress_data)
+ {
+ GtkWidget *dialog;
++ GtkWidget *button;
+ GObject *text;
+ GObject *progress_bar;
+ GObject *cancel_button,*ok_button;
+@@ -255,6 +256,20 @@ zenity_progress (ZenityData *data, Zenit
+ if (data->width > -1 || data->height > -1)
+ gtk_window_set_default_size (GTK_WINDOW (dialog), data->width, data->height);
+
++ if (data->ok_label) {
++ button = GTK_WIDGET (gtk_builder_get_object (builder, "zenity_progress_ok_button"));
++ gtk_button_set_label (GTK_BUTTON (button), data->ok_label);
++ gtk_button_set_image (GTK_BUTTON (button),
++ gtk_image_new_from_stock (GTK_STOCK_OK, GTK_ICON_SIZE_BUTTON));
++ }
++
++ if (data->cancel_label) {
++ button = GTK_WIDGET (gtk_builder_get_object (builder, "zenity_progress_cancel_button"));
++ gtk_button_set_label (GTK_BUTTON (button), data->cancel_label);
++ gtk_button_set_image (GTK_BUTTON (button),
++ gtk_image_new_from_stock (GTK_STOCK_CANCEL, GTK_ICON_SIZE_BUTTON));
++ }
++
+ text = gtk_builder_get_object (builder, "zenity_progress_text");
+
+ if (progress_data->dialog_text)
+diff -urp zenity-2.32.1_2/src/scale.c zenity-2.32.1/src/scale.c
+--- zenity-2.32.1_2/src/scale.c 2012-02-17 18:03:32.851172001 +0200
++++ zenity-2.32.1/src/scale.c 2012-02-17 18:03:51.161171999 +0200
+@@ -36,6 +36,7 @@ zenity_scale (ZenityData *data, ZenitySc
+ {
+ GtkBuilder *builder;
+ GtkWidget *dialog;
++ GtkWidget *button;
+ GObject *text;
+
+ builder = zenity_util_load_ui_file ("zenity_scale_dialog", "adjustment1", NULL);
+@@ -75,6 +76,20 @@ zenity_scale (ZenityData *data, ZenitySc
+ if (data->width > -1 || data->height > -1)
+ gtk_window_set_default_size (GTK_WINDOW (dialog), data->width, data->height);
+
++ if (data->ok_label) {
++ button = GTK_WIDGET (gtk_builder_get_object (builder, "zenity_scale_ok_button"));
++ gtk_button_set_label (GTK_BUTTON (button), data->ok_label);
++ gtk_button_set_image (GTK_BUTTON (button),
++ gtk_image_new_from_stock (GTK_STOCK_OK, GTK_ICON_SIZE_BUTTON));
++ }
++
++ if (data->cancel_label) {
++ button = GTK_WIDGET (gtk_builder_get_object (builder, "zenity_scale_cancel_button"));
++ gtk_button_set_label (GTK_BUTTON (button), data->cancel_label);
++ gtk_button_set_image (GTK_BUTTON (button),
++ gtk_image_new_from_stock (GTK_STOCK_CANCEL, GTK_ICON_SIZE_BUTTON));
++ }
++
+ if (scale_data->dialog_text)
+ gtk_label_set_markup (GTK_LABEL (text), g_strcompress (scale_data->dialog_text));
+
+diff -urp zenity-2.32.1_2/src/text.c zenity-2.32.1/src/text.c
+--- zenity-2.32.1_2/src/text.c 2012-02-17 18:03:32.831172000 +0200
++++ zenity-2.32.1/src/text.c 2012-02-17 18:03:51.161171999 +0200
+@@ -159,16 +159,22 @@ zenity_text (ZenityData *data, ZenityTex
+ if (text_data->editable)
+ zen_text_data->buffer = text_buffer;
+
+- if (text_data->ok_label)
+- gtk_button_set_label (GTK_BUTTON(ok_button), text_data->ok_label);
++ if (data->ok_label) {
++ gtk_button_set_label (GTK_BUTTON (ok_button), data->ok_label);
++ gtk_button_set_image (GTK_BUTTON (ok_button),
++ gtk_image_new_from_stock (GTK_STOCK_OK, GTK_ICON_SIZE_BUTTON));
++ }
+
+- if (text_data->cancel_label)
+- gtk_button_set_label (GTK_BUTTON(cancel_button), text_data->cancel_label);
++ if (data->cancel_label) {
++ gtk_button_set_label (GTK_BUTTON (cancel_button), data->cancel_label);
++ gtk_button_set_image (GTK_BUTTON (cancel_button),
++ gtk_image_new_from_stock (GTK_STOCK_CANCEL, GTK_ICON_SIZE_BUTTON));
++ }
+
+ if (text_data->checkbox) {
+- gtk_widget_set_visible (GTK_WIDGET(checkbox), TRUE);
+- gtk_widget_set_sensitive (GTK_WIDGET(ok_button), FALSE);
+- gtk_button_set_label (GTK_BUTTON(checkbox), text_data->checkbox);
++ gtk_widget_set_visible (GTK_WIDGET (checkbox), TRUE);
++ gtk_widget_set_sensitive (GTK_WIDGET (ok_button), FALSE);
++ gtk_button_set_label (GTK_BUTTON (checkbox), text_data->checkbox);
+
+ g_signal_connect (G_OBJECT (checkbox), "toggled",
+ G_CALLBACK (zenity_text_toggle_button), ok_button);
+diff -urp zenity-2.32.1_2/src/tree.c zenity-2.32.1/src/tree.c
+--- zenity-2.32.1_2/src/tree.c 2012-02-17 18:03:32.841172001 +0200
++++ zenity-2.32.1/src/tree.c 2012-02-17 18:03:51.161171999 +0200
+@@ -282,6 +282,7 @@ void
+ zenity_tree (ZenityData *data, ZenityTreeData *tree_data)
+ {
+ GtkWidget *dialog;
++ GtkWidget *button;
+ GObject *tree_view;
+ GObject *text;
+ GtkTreeViewColumn *column;
+@@ -339,6 +340,20 @@ zenity_tree (ZenityData *data, ZenityTre
+ if (data->dialog_title)
+ gtk_window_set_title (GTK_WINDOW (dialog), data->dialog_title);
+
++ if (data->ok_label) {
++ button = GTK_WIDGET (gtk_builder_get_object (builder, "zenity_tree_ok_button"));
++ gtk_button_set_label (GTK_BUTTON (button), data->ok_label);
++ gtk_button_set_image (GTK_BUTTON (button),
++ gtk_image_new_from_stock (GTK_STOCK_OK, GTK_ICON_SIZE_BUTTON));
++ }
++
++ if (data->cancel_label) {
++ button = GTK_WIDGET (gtk_builder_get_object (builder, "zenity_tree_cancel_button"));
++ gtk_button_set_label (GTK_BUTTON (button), data->cancel_label);
++ gtk_button_set_image (GTK_BUTTON (button),
++ gtk_image_new_from_stock (GTK_STOCK_CANCEL, GTK_ICON_SIZE_BUTTON));
++ }
++
+ text = gtk_builder_get_object (builder, "zenity_tree_text");
+
+ if (tree_data->dialog_text)
+diff -urp zenity-2.32.1_2/src/zenity.h zenity-2.32.1/src/zenity.h
+--- zenity-2.32.1_2/src/zenity.h 2012-02-17 18:03:32.841172001 +0200
++++ zenity-2.32.1/src/zenity.h 2012-02-17 18:09:27.781172001 +0200
+@@ -26,6 +26,8 @@ G_BEGIN_DECLS
+ typedef struct {
+ gchar *dialog_title;
+ gchar *window_icon;
++ gchar *ok_label;
++ gchar *cancel_label;
+ gint width;
+ gint height;
+ gint exit_code;
+@@ -60,8 +62,6 @@ typedef struct {
+ gchar *dialog_text;
+ MsgMode mode;
+ gboolean no_wrap;
+- gchar *ok_label;
+- gchar *cancel_label;
+ } ZenityMsgData;
+
+ typedef struct {
+@@ -107,8 +107,6 @@ typedef struct {
+ gboolean no_wrap;
+ gchar *font;
+ GtkTextBuffer *buffer;
+- gchar *ok_label;
+- gchar *cancel_label;
+ gchar *checkbox;
+ } ZenityTextData;
+
+diff -urp zenity-2.32.1_2/src/zenity.ui zenity-2.32.1/src/zenity.ui
+--- zenity-2.32.1_2/src/zenity.ui 2012-02-17 18:03:32.831172000 +0200
++++ zenity-2.32.1/src/zenity.ui 2012-02-17 18:03:51.161171999 +0200
+@@ -906,7 +906,7 @@
+ <property name="visible">True</property>
+ <property name="layout_style">end</property>
+ <child>
+- <object class="GtkButton" id="cancelbutton1">
++ <object class="GtkButton" id="zenity_scale_cancel_button">
+ <property name="label">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+@@ -921,7 +921,7 @@
+ </packing>
+ </child>
+ <child>
+- <object class="GtkButton" id="okbutton1">
++ <object class="GtkButton" id="zenity_scale_ok_button">
+ <property name="label">gtk-ok</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+@@ -945,8 +945,8 @@
+ </object>
+ </child>
+ <action-widgets>
+- <action-widget response="-6">cancelbutton1</action-widget>
+- <action-widget response="-5">okbutton1</action-widget>
++ <action-widget response="-6">zenity_scale_cancel_button</action-widget>
++ <action-widget response="-5">zenity_scale_ok_button</action-widget>
+ </action-widgets>
+ </object>
+ <object class="GtkAdjustment" id="adjustment1">