diff -Naupr ./source/zenity/src/calendar.c ./my-zenity/src/calendar.c
--- ./source/zenity/src/calendar.c	2005-04-25 08:50:45.000000000 +0530
+++ ./my-zenity/src/calendar.c	2005-06-26 21:27:57.403637792 +0530
@@ -58,6 +58,10 @@ zenity_calendar (ZenityData *data, Zenit
   if (data->dialog_title)	
     gtk_window_set_title (GTK_WINDOW (dialog), data->dialog_title);
 
+  if(data->extrabtn_text) {
+    gtk_dialog_add_button(GTK_DIALOG(dialog),data->extrabtn_text,GTK_RESPONSE_HELP-1);
+  }
+
   zenity_util_set_window_icon (dialog, data->window_icon, ZENITY_IMAGE_FULLPATH ("zenity-calendar.png"));
 
   if (data->width > -1 || data->height > -1)
diff -Naupr ./source/zenity/src/CVS/Entries ./my-zenity/src/CVS/Entries
--- ./source/zenity/src/CVS/Entries	2005-06-26 19:21:44.000000000 +0530
+++ ./my-zenity/src/CVS/Entries	2005-06-12 16:33:24.000000000 +0530
@@ -9,6 +9,7 @@
 /gdialog.in/1.8/Mon Dec  1 23:27:45 2003//
 /main.c/1.46/Mon Apr 25 03:20:45 2005//
 /msg.c/1.16/Mon Apr 25 03:20:45 2005//
+/notification.c/1.7/Mon Apr 25 03:20:45 2005//
 /option.c/1.10/Mon Apr 25 03:20:45 2005//
 /option.h/1.1/Tue Dec  7 00:55:26 2004//
 /progress.c/1.21/Mon Apr 25 03:20:45 2005//
@@ -18,5 +19,4 @@
 /util.h/1.10/Wed Feb 16 10:32:15 2005//
 /zenity.glade/1.18/Tue Apr 27 20:34:56 2004//
 /zenity.h/1.25/Wed Apr 20 03:00:57 2005//
-/notification.c/1.8/Sun Jun 26 13:51:44 2005//
 D
diff -Naupr ./source/zenity/src/entry.c ./my-zenity/src/entry.c
--- ./source/zenity/src/entry.c	2005-04-25 08:50:45.000000000 +0530
+++ ./my-zenity/src/entry.c	2005-06-26 21:27:43.205796192 +0530
@@ -53,6 +53,11 @@ zenity_entry (ZenityData *data, ZenityEn
 
   if (data->dialog_title)
     gtk_window_set_title (GTK_WINDOW (dialog), data->dialog_title);
+
+  if(data->extrabtn_text) {
+    gtk_dialog_add_button(GTK_DIALOG(dialog),data->extrabtn_text,GTK_RESPONSE_HELP-1);
+  }
+
 	
   zenity_util_set_window_icon (dialog, data->window_icon, ZENITY_IMAGE_FULLPATH ("zenity-entry.png"));
 
@@ -77,6 +82,7 @@ zenity_entry (ZenityData *data, ZenityEn
 
   gtk_label_set_mnemonic_widget (GTK_LABEL (text), entry);
 
+
   zenity_util_show_dialog (dialog);
 
   gtk_main ();
diff -Naupr ./source/zenity/src/fileselection.c ./my-zenity/src/fileselection.c
--- ./source/zenity/src/fileselection.c	2005-04-25 08:50:45.000000000 +0530
+++ ./my-zenity/src/fileselection.c	2005-06-26 21:28:25.591352608 +0530
@@ -59,6 +59,10 @@ void zenity_fileselection (ZenityData *d
 
   if (data->dialog_title)
     gtk_window_set_title (GTK_WINDOW (dialog), data->dialog_title);
+
+  if(data->extrabtn_text) {
+    gtk_dialog_add_button(GTK_DIALOG(dialog),data->extrabtn_text,GTK_RESPONSE_HELP-1);
+  }
 	
   zenity_util_set_window_icon (dialog, data->window_icon, ZENITY_IMAGE_FULLPATH ("zenity-file.png"));
 
diff -Naupr ./source/zenity/src/msg.c ./my-zenity/src/msg.c
--- ./source/zenity/src/msg.c	2005-04-25 08:50:45.000000000 +0530
+++ ./my-zenity/src/msg.c	2005-06-26 21:40:29.844249432 +0530
@@ -110,6 +110,55 @@ zenity_msg (ZenityData *data, ZenityMsgD
   if (msg_data->dialog_text)
     gtk_label_set_markup (GTK_LABEL (text), msg_data->dialog_text);
 
+  if(data->extrabtn_text) {
+    gtk_dialog_add_button(GTK_DIALOG(dialog),data->extrabtn_text,GTK_RESPONSE_HELP-1);
+  }
+
+#if 0
+  if (data->dialog_icon)  {
+      GList *iter=NULL;
+
+      iter=GTK_BOX(GTK_DIALOG(dialog)->vbox)->children;
+
+      for(;iter!=NULL; iter=iter->next){
+	GtkBoxChild *boxc=NULL;
+	
+	boxc=((GtkBoxChild *)iter->data);
+
+	if(GTK_IS_HBOX(boxc->widget) || GTK_IS_VBOX(boxc->widget)){	
+	  GtkBox *box=GTK_BOX(boxc->widget);
+	  GtkBoxChild *temp_bc=NULL;
+	  GList *it=NULL;
+	  
+	  it=box->children;
+	  temp_bc=(GtkBoxChild *)it->data;
+	  
+	  if(GTK_IS_BOX(temp_bc->widget)) {
+	    box=GTK_BOX(temp_bc->widget);
+	    boxc=temp_bc;
+	  }
+	  
+	  gtk_widget_freeze_child_notify(boxc->widget);
+	  for(it=box->children;it!=NULL;it=it->next) {	
+	    GtkBoxChild *bc=(GtkBoxChild *)it->data;
+	    
+	    if(GTK_IS_IMAGE(bc->widget)) {
+	      gtk_container_remove(GTK_CONTAINER(boxc->widget),bc->widget);
+	      bc->widget=gtk_image_new_from_file(data->dialog_icon);
+	      gtk_widget_show(bc->widget);
+	      gtk_container_add(GTK_CONTAINER(boxc->widget),bc->widget);
+	      box->children=g_list_reverse(g_list_remove(box->children,it));
+	      break;
+	    }
+	  }
+	  gtk_widget_thaw_child_notify(boxc->widget);
+	  
+	  break;
+	}
+      }
+    }
+#endif
+  
   if (msg_data->no_wrap)
     gtk_label_set_line_wrap (GTK_LABEL (text), FALSE);
 
diff -Naupr ./source/zenity/src/notification.c ./my-zenity/src/notification.c
--- ./source/zenity/src/notification.c	2005-06-26 19:21:44.000000000 +0530
+++ ./my-zenity/src/notification.c	2005-04-25 08:50:45.000000000 +0530
@@ -184,9 +184,12 @@ zenity_notification_handle_stdin (GIOCha
 	gtk_tooltips_set_tip (tooltips, icon_event_box, value, value);
       } else if (!strcmp (command, "visible")) {
 	if (!strcasecmp (value, "false")) {
-	  gtk_widget_hide (GTK_WIDGET (tray_icon));
+          /* We need to get the parent, because just hiding the tray_icon
+           * doesn't save on space. See #161539 for details
+           */
+	  gtk_widget_hide (gtk_widget_get_parent (GTK_WIDGET (tray_icon)));
 	} else {
-	  gtk_widget_show (GTK_WIDGET (tray_icon));
+	  gtk_widget_show (gtk_widget_get_parent (GTK_WIDGET (tray_icon)));
 	}
       } else {
 	g_warning ("Unknown command '%s'", command);
diff -Naupr ./source/zenity/src/option.c ./my-zenity/src/option.c
--- ./source/zenity/src/option.c	2005-04-25 08:50:45.000000000 +0530
+++ ./my-zenity/src/option.c	2005-06-26 21:14:43.442338256 +0530
@@ -35,6 +35,9 @@ gchar   *zenity_general_separator;
 gboolean zenity_general_editable;
 gchar   *zenity_general_uri;
 gboolean zenity_general_dialog_no_wrap;
+gboolean zenity_general_extrabtn_active;
+gchar   *zenity_general_extrabtn_text;
+
 
 /* Calendar Dialog Options */
 gboolean zenity_calendar_active;
@@ -128,6 +131,24 @@ GOptionEntry general_options[] = {
     N_("HEIGHT")
   },
   {
+    "extra-button",
+    '\0',
+    G_OPTION_FLAG_IN_MAIN,
+    G_OPTION_ARG_NONE,
+    &zenity_general_extrabtn_active,
+    N_("Set text for extra button"),
+    NULL
+  },
+  {
+    "extra-label",
+    '\0',
+    0,
+    G_OPTION_ARG_STRING,
+    &zenity_general_extrabtn_text,
+    N_("Set text for extra button"),
+    NULL
+  },
+  {
     NULL
   }
 };
@@ -743,6 +764,7 @@ zenity_general_pre_callback (GOptionCont
   zenity_general_editable = FALSE;
   zenity_general_uri = NULL;
   zenity_general_dialog_no_wrap = FALSE;
+  zenity_general_extrabtn_text = NULL;
 
   return TRUE;
 }
@@ -910,6 +932,8 @@ 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->dialog_icon = NULL;
+  results->data->extrabtn_text=zenity_general_extrabtn_text;
 
   return TRUE;
 }
diff -Naupr ./source/zenity/src/option.h ./my-zenity/src/option.h
--- ./source/zenity/src/option.h	2004-12-07 06:25:26.000000000 +0530
+++ ./my-zenity/src/option.h	2005-06-26 21:42:20.082490672 +0530
@@ -56,10 +56,10 @@ typedef enum {
   ERROR_LAST
 } ZenityError;
 
+
 typedef struct {
   ZenityDialogMode mode;
   ZenityData      *data;
-
   ZenityCalendarData     *calendar_data;
   ZenityMsgData          *msg_data;
   ZenityFileData         *file_data;
diff -Naupr ./source/zenity/src/progress.c ./my-zenity/src/progress.c
--- ./source/zenity/src/progress.c	2005-04-25 08:50:45.000000000 +0530
+++ ./my-zenity/src/progress.c	2005-06-26 21:29:29.321664128 +0530
@@ -197,6 +197,10 @@ zenity_progress (ZenityData *data, Zenit
   if (data->dialog_title)
     gtk_window_set_title (GTK_WINDOW (dialog), data->dialog_title);
 
+  if(data->extrabtn_text) {
+    gtk_dialog_add_button(GTK_DIALOG(dialog),data->extrabtn_text,GTK_RESPONSE_HELP-1);
+  }
+
   zenity_util_set_window_icon (dialog, data->window_icon, ZENITY_IMAGE_FULLPATH ("zenity-progress.png"));
 
   if (data->width > -1 || data->height > -1)
diff -Naupr ./source/zenity/src/text.c ./my-zenity/src/text.c
--- ./source/zenity/src/text.c	2005-04-25 08:50:45.000000000 +0530
+++ ./my-zenity/src/text.c	2005-06-26 21:29:41.882754552 +0530
@@ -128,6 +128,10 @@ zenity_text (ZenityData *data, ZenityTex
   if (data->dialog_title)
     gtk_window_set_title (GTK_WINDOW (dialog), data->dialog_title);
 
+  if(data->extrabtn_text) {
+    gtk_dialog_add_button(GTK_DIALOG(dialog),data->extrabtn_text,GTK_RESPONSE_HELP-1);
+  }
+
   zenity_util_set_window_icon (dialog, data->window_icon, ZENITY_IMAGE_FULLPATH ("zenity-text.png"));
 
   gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_CLOSE);
diff -Naupr ./source/zenity/src/tree.c ./my-zenity/src/tree.c
--- ./source/zenity/src/tree.c	2005-04-25 08:50:45.000000000 +0530
+++ ./my-zenity/src/tree.c	2005-06-26 21:30:03.163519384 +0530
@@ -315,6 +315,9 @@ zenity_tree (ZenityData *data, ZenityTre
 
   if (data->dialog_title)
     gtk_window_set_title (GTK_WINDOW (dialog), data->dialog_title);
+  if(data->extrabtn_text) {
+    gtk_dialog_add_button(GTK_DIALOG(dialog),data->extrabtn_text,GTK_RESPONSE_HELP-1);
+  }
 
   text = glade_xml_get_widget (glade_dialog, "zenity_tree_text");
                                                                                 
diff -Naupr ./source/zenity/src/zenity.h ./my-zenity/src/zenity.h
--- ./source/zenity/src/zenity.h	2005-04-20 08:30:57.000000000 +0530
+++ ./my-zenity/src/zenity.h	2005-06-26 21:14:28.321636952 +0530
@@ -29,6 +29,8 @@ typedef struct {
   gint   width;
   gint   height;
   gint   exit_code;
+  gchar *dialog_icon; /* Add a member for --icon option */
+  gchar *extrabtn_text;
 } ZenityData;
 
 typedef enum {
