Only in ../gtk-show-all/gtk: RCS
diff -c gtk/gtkcontainer.c ../gtk-show-all/gtk/gtkcontainer.c
*** gtk/gtkcontainer.c	Mon Nov 24 23:37:38 1997
--- ../gtk-show-all/gtk/gtkcontainer.c	Sat Dec 27 19:52:27 1997
***************
*** 83,88 ****
--- 83,91 ----
  					     GtkDirectionType   direction);
  static void gtk_container_children_callback (GtkWidget         *widget,
                                               gpointer           client_data);
+ static void gtk_container_show_all          (GtkWidget         *widget);
+ static void gtk_container_hide_all          (GtkWidget         *widget);
+ 
  
  
  static gint container_signals[LAST_SIGNAL] = { 0 };
***************
*** 168,173 ****
--- 171,183 ----
  
    gtk_object_class_add_signals (object_class, container_signals, LAST_SIGNAL);
  
+   /* Other container classes should overwrite show_all and hide_all,
+      unless they make all their children accessable
+      through gtk_container_foreach.
+   */
+   widget_class->show_all = gtk_container_show_all;
+   widget_class->hide_all = gtk_container_hide_all;  
+   
    class->need_resize = gtk_real_container_need_resize;
    class->focus = gtk_real_container_focus;
  }
***************
*** 842,844 ****
--- 852,890 ----
    children = (GList**) client_data;
    *children = g_list_prepend (*children, widget);
  }
+ 
+ static void
+ gtk_container_show_all (GtkWidget *widget)
+ {
+   GtkContainer *container;
+ 
+   g_return_if_fail (widget != NULL);
+   g_return_if_fail (GTK_IS_CONTAINER (widget));
+   container = GTK_CONTAINER (widget);
+ 
+   /* First show children, then self.
+      This makes sure that toplevel windows get shown as last widget.
+      Otherwise the user would see the widgets get
+      visible one after another.
+   */
+   gtk_container_foreach (container, (GtkCallback) gtk_widget_show_all, NULL);
+   gtk_widget_show (widget);
+ }
+ 
+ 
+ static void
+ gtk_container_hide_all (GtkWidget *widget)
+ {
+   GtkContainer *container;
+ 
+   g_return_if_fail (widget != NULL);
+   g_return_if_fail (GTK_IS_CONTAINER (widget));
+   container = GTK_CONTAINER (widget);
+ 
+   /* First hide self, then children.
+      This is the reverse order of gtk_container_show_all.
+   */
+   gtk_widget_hide (widget);  
+   gtk_container_foreach (container, (GtkCallback) gtk_widget_hide_all, NULL);
+ }
+ 
Only in ../gtk-show-all/gtk: gtkcontainer.c~
diff -c gtk/gtkmenu.c ../gtk-show-all/gtk/gtkmenu.c
*** gtk/gtkmenu.c	Mon Nov 24 23:37:42 1997
--- ../gtk-show-all/gtk/gtkmenu.c	Wed Dec 24 13:04:35 1997
***************
*** 47,52 ****
--- 47,54 ----
  				     GdkEventKey       *event);
  static gint gtk_menu_need_resize    (GtkContainer      *container);
  static void gtk_menu_deactivate     (GtkMenuShell      *menu_shell);
+ static void gtk_menu_show_all       (GtkWidget         *widget);
+ static void gtk_menu_hide_all       (GtkWidget         *widget);
  
  
  guint
***************
*** 93,99 ****
    widget_class->expose_event = gtk_menu_expose;
    widget_class->configure_event = gtk_menu_configure;
    widget_class->key_press_event = gtk_menu_key_press;
! 
    container_class->need_resize = gtk_menu_need_resize;
  
    menu_shell_class->submenu_placement = GTK_LEFT_RIGHT;
--- 95,103 ----
    widget_class->expose_event = gtk_menu_expose;
    widget_class->configure_event = gtk_menu_configure;
    widget_class->key_press_event = gtk_menu_key_press;
!   widget_class->show_all = gtk_menu_show_all;
!   widget_class->hide_all = gtk_menu_hide_all;  
!   
    container_class->need_resize = gtk_menu_need_resize;
  
    menu_shell_class->submenu_placement = GTK_LEFT_RIGHT;
***************
*** 730,732 ****
--- 734,765 ----
    if (parent)
      gtk_menu_shell_deactivate (parent);
  }
+ 
+ 
+ static void
+ gtk_menu_show_all (GtkWidget *widget)
+ {
+   GtkContainer *container;
+ 
+   g_return_if_fail (widget != NULL);
+   g_return_if_fail (GTK_IS_MENU (widget));
+   container = GTK_CONTAINER (widget);
+ 
+   /* Show children, but not self. */
+   gtk_container_foreach (container, (GtkCallback) gtk_widget_show_all, NULL);
+ }
+ 
+ 
+ static void
+ gtk_menu_hide_all (GtkWidget *widget)
+ {
+   GtkContainer *container;
+ 
+   g_return_if_fail (widget != NULL);
+   g_return_if_fail (GTK_IS_MENU (widget));
+   container = GTK_CONTAINER (widget);
+ 
+   /* Hide children, but not self. */
+   gtk_container_foreach (container, (GtkCallback) gtk_widget_hide_all, NULL);
+ }
+ 
Only in ../gtk-show-all/gtk: gtkmenu.c~
diff -c gtk/gtkmenuitem.c ../gtk-show-all/gtk/gtkmenuitem.c
*** gtk/gtkmenuitem.c	Mon Nov 24 23:37:43 1997
--- ../gtk-show-all/gtk/gtkmenuitem.c	Wed Dec 24 12:17:34 1997
***************
*** 65,70 ****
--- 65,72 ----
  					  gint             *x,
  					  gint             *y,
  					  gpointer          user_data);
+ static void gtk_menu_item_show_all       (GtkWidget        *widget);
+ static void gtk_menu_item_hide_all       (GtkWidget        *widget);
  
  static GtkItemClass *parent_class;
  static gint menu_item_signals[LAST_SIGNAL] = { 0 };
***************
*** 127,132 ****
--- 129,136 ----
    widget_class->expose_event = gtk_menu_item_expose;
    widget_class->enter_notify_event = gtk_menu_item_enter;
    widget_class->leave_notify_event = gtk_menu_item_leave;
+   widget_class->show_all = gtk_menu_item_show_all;
+   widget_class->hide_all = gtk_menu_item_hide_all;  
  
    item_class->select = gtk_real_menu_item_select;
    item_class->deselect = gtk_real_menu_item_deselect;
***************
*** 744,746 ****
--- 748,793 ----
  
    menuitem->right_justify = 1;
  }
+ 
+ 
+ 
+ 
+ static void
+ gtk_menu_item_show_all (GtkWidget *widget)
+ {
+   GtkContainer *container;
+   GtkMenuItem  *menu_item;
+ 
+   g_return_if_fail (widget != NULL);
+   g_return_if_fail (GTK_IS_MENU_ITEM (widget));
+   container = GTK_CONTAINER (widget);
+   menu_item = GTK_MENU_ITEM (widget);
+ 
+   /* Show children, traverse to submenu, show self. */
+   gtk_container_foreach (container, (GtkCallback) gtk_widget_show_all, NULL);
+   if (menu_item->submenu)
+     gtk_widget_show_all (menu_item->submenu);
+   gtk_widget_show (widget);
+ }
+ 
+ 
+ static void
+ gtk_menu_item_hide_all (GtkWidget *widget)
+ {
+   GtkContainer *container;
+   GtkMenuItem  *menu_item;
+ 
+   g_return_if_fail (widget != NULL);
+   g_return_if_fail (GTK_IS_MENU_ITEM (widget));
+   container = GTK_CONTAINER (widget);
+   menu_item = GTK_MENU_ITEM (widget);
+ 
+   /* Reverse order of gtk_menu_item_show_all */
+   gtk_widget_hide (widget);
+   if (menu_item->submenu)
+     gtk_widget_hide_all (menu_item->submenu);
+   gtk_container_foreach (container, (GtkCallback) gtk_widget_hide_all, NULL);
+ }
+ 
+ 
+ 
Only in ../gtk-show-all/gtk: gtkmenuitem.c~
diff -c gtk/gtkoptionmenu.c ../gtk-show-all/gtk/gtkoptionmenu.c
*** gtk/gtkoptionmenu.c	Wed Dec  3 17:38:54 1997
--- ../gtk-show-all/gtk/gtkoptionmenu.c	Sat Dec 27 19:32:25 1997
***************
*** 54,59 ****
--- 54,61 ----
  					     gint               *x,
  					     gint               *y,
  					     gpointer            user_data);
+ static void gtk_option_menu_show_all        (GtkWidget          *widget);
+ static void gtk_option_menu_hide_all        (GtkWidget          *widget);
  
  
  static GtkButtonClass *parent_class = NULL;
***************
*** 103,108 ****
--- 105,112 ----
    widget_class->size_allocate = gtk_option_menu_size_allocate;
    widget_class->expose_event = gtk_option_menu_expose;
    widget_class->button_press_event = gtk_option_menu_button_press;
+   widget_class->show_all = gtk_option_menu_show_all;
+   widget_class->hide_all = gtk_option_menu_hide_all;
  }
  
  static void
***************
*** 583,585 ****
--- 587,624 ----
    *x = menu_xpos;
    *y = menu_ypos;
  }
+ 
+ 
+ static void
+ gtk_option_menu_show_all (GtkWidget *widget)
+ {
+   GtkContainer *container;
+   GtkOptionMenu *option_menu;
+   
+   g_return_if_fail (widget != NULL);
+   g_return_if_fail (GTK_IS_OPTION_MENU (widget));
+   container = GTK_CONTAINER (widget);
+   option_menu = GTK_OPTION_MENU (widget);
+ 
+   gtk_widget_show (widget);
+   gtk_container_foreach (container, (GtkCallback) gtk_widget_show_all, NULL);
+   if (option_menu->menu)
+     gtk_widget_show_all (option_menu->menu);
+   if (option_menu->menu_item)
+     gtk_widget_show_all (option_menu->menu_item);
+ }
+ 
+ 
+ static void
+ gtk_option_menu_hide_all (GtkWidget *widget)
+ {
+   GtkContainer *container;
+ 
+   g_return_if_fail (widget != NULL);
+   g_return_if_fail (GTK_IS_OPTION_MENU (widget));
+   container = GTK_CONTAINER (widget);
+ 
+   gtk_widget_hide (widget);
+   gtk_container_foreach (container, (GtkCallback) gtk_widget_hide_all, NULL);
+ }
+ 
Only in ../gtk-show-all/gtk: gtkoptionmenu.c~
diff -c gtk/gtkwidget.c ../gtk-show-all/gtk/gtkwidget.c
*** gtk/gtkwidget.c	Fri Nov 28 07:47:01 1997
--- ../gtk-show-all/gtk/gtkwidget.c	Sat Dec 27 19:01:05 1997
***************
*** 594,599 ****
--- 594,601 ----
    klass->activate_signal = 0;
    klass->show = gtk_real_widget_show;
    klass->hide = gtk_real_widget_hide;
+   klass->show_all = gtk_real_widget_show;
+   klass->hide_all = gtk_real_widget_hide;
    klass->map = gtk_real_widget_map;
    klass->unmap = gtk_real_widget_unmap;
    klass->realize = gtk_real_widget_realize;
***************
*** 997,1002 ****
--- 999,1056 ----
    
    if (GTK_WIDGET_VISIBLE (widget))
      gtk_signal_emit (GTK_OBJECT (widget), widget_signals[HIDE]);
+ }
+ 
+ /*****************************************
+  * gtk_widget_show_all:
+  *
+  *   Shows the widget and all children.
+  *
+  *   Container classes overwrite
+  *   show_all and hide_all to call
+  *   show_all (hide_all) on both themselves
+  *   and on their child widgets.
+  *
+  *   arguments:
+  *
+  *   results:
+  *****************************************/
+ 
+ void
+ gtk_widget_show_all (GtkWidget *widget)
+ {
+   GtkWidgetClass *widget_class;
+   
+   g_return_if_fail (widget != NULL);
+   
+   /* show_all shouldn't be invoked through a signal,
+      because in this case it would be quite slow - there would
+      be a show and show_all signal emitted for every child widget.
+    */
+   widget_class = GTK_WIDGET_CLASS(GTK_OBJECT(widget)->klass);
+   widget_class->show_all (widget);
+ }
+ 
+ /*****************************************
+  * gtk_widget_hide_all:
+  *
+  *   Hides the widget and all children.
+  *   See gtk_widget_show_all.
+  *
+  *   arguments:
+  *
+  *   results:
+  *****************************************/
+ 
+ void
+ gtk_widget_hide_all (GtkWidget *widget)
+ {
+   GtkWidgetClass *widget_class;
+ 
+   g_return_if_fail (widget != NULL);
+ 
+   widget_class = GTK_WIDGET_CLASS(GTK_OBJECT(widget)->klass);
+   widget_class->hide_all (widget);
  }
  
  /*****************************************
Only in ../gtk-show-all/gtk: gtkwidget.c~
diff -c gtk/gtkwidget.h ../gtk-show-all/gtk/gtkwidget.h
*** gtk/gtkwidget.h	Mon Nov 24 23:37:49 1997
--- ../gtk-show-all/gtk/gtkwidget.h	Wed Dec 24 11:33:32 1997
***************
*** 243,248 ****
--- 243,250 ----
    /* basics */
    void (* show)                (GtkWidget      *widget);
    void (* hide)                (GtkWidget      *widget);
+   void (* show_all)            (GtkWidget      *widget);
+   void (* hide_all)            (GtkWidget      *widget);
    void (* map)                 (GtkWidget      *widget);
    void (* unmap)               (GtkWidget      *widget);
    void (* realize)             (GtkWidget      *widget);
***************
*** 362,367 ****
--- 364,371 ----
  void       gtk_widget_unparent            (GtkWidget           *widget);
  void       gtk_widget_show                (GtkWidget           *widget);
  void       gtk_widget_hide                (GtkWidget           *widget);
+ void       gtk_widget_show_all            (GtkWidget           *widget);
+ void       gtk_widget_hide_all            (GtkWidget           *widget);
  void       gtk_widget_map                 (GtkWidget           *widget);
  void       gtk_widget_unmap               (GtkWidget           *widget);
  void       gtk_widget_realize             (GtkWidget           *widget);
Only in ../gtk-show-all/gtk: gtkwidget.h~
Only in ../gtk-show-all/gtk: mt
Only in ../gtk-show-all/gtk: mt~
Only in ../gtk-show-all/gtk: testgtk.c.sav
Only in ../gtk-show-all/gtk: testgtk.c.sav2
Only in ../gtk-show-all/gtk: testgtk.c~
