Index: gtk/gtkbox.c
===================================================================
--- gtk/gtkbox.c	(revision 22596)
+++ gtk/gtkbox.c	(working copy)
@@ -29,10 +29,17 @@
 #include "gtkbox.h"
 #include "gtkorientable.h"
 #include "gtkprivate.h"
+#include "gtkmarshalers.h"
 #include "gtkintl.h"
 #include "gtkalias.h"
 
 enum {
+  CHILD_ADDED,
+  LAST_SIGNAL
+};
+
+
+enum {
   PROP_0,
   PROP_ORIENTATION,
   PROP_SPACING,
@@ -60,7 +67,6 @@
 
 #define GTK_BOX_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_BOX, GtkBoxPrivate))
 
-
 static void gtk_box_set_property       (GObject        *object,
                                         guint           prop_id,
                                         const GValue   *value,
@@ -95,7 +101,10 @@
                                         GParamSpec     *pspec);
 static GType gtk_box_child_type        (GtkContainer   *container);
 
+/* --- variables --- */
+static guint                 box_signals[LAST_SIGNAL] = { 0 };
 
+
 G_DEFINE_ABSTRACT_TYPE_WITH_CODE (GtkBox, gtk_box, GTK_TYPE_CONTAINER,
                                   G_IMPLEMENT_INTERFACE (GTK_TYPE_ORIENTABLE,
                                                          NULL));
@@ -179,6 +188,16 @@
 								GTK_PARAM_READWRITE));
 
   g_type_class_add_private (object_class, sizeof (GtkBoxPrivate));
+
+  box_signals[CHILD_ADDED] =
+    g_signal_new (I_("child_added"),
+		  G_OBJECT_CLASS_TYPE (object_class),
+		  G_SIGNAL_RUN_FIRST,
+		  0,
+		  NULL, NULL,
+		  _gtk_marshal_VOID__OBJECT,
+		  G_TYPE_NONE, 1,
+		  GTK_TYPE_WIDGET);
 }
 
 static void
@@ -760,6 +779,8 @@
   gtk_widget_child_notify (child, "pack-type");
   gtk_widget_child_notify (child, "position");
   gtk_widget_thaw_child_notify (child);
+
+  g_signal_emit (box, box_signals[CHILD_ADDED], 0, child);
 }
 
 /**
Index: modules/other/gail/ChangeLog
===================================================================
--- modules/other/gail/ChangeLog	(revision 22596)
+++ modules/other/gail/ChangeLog	(working copy)
@@ -1,3 +1,9 @@
+2009-03-30  Mike Gorse  <mgorse@novell.com>
+
+	Bug 577392 - Gail doesn't emit children_changed::add when packing a box
+
+	* gailbox.c, gailbox.h: Listen to child_added signal.
+
 2009-03-25  Tor Lillqvist  <tml@novell.com>
 
 	Bug 575644 - Cygwin gail build patch
Index: modules/other/gail/gailbox.c
===================================================================
--- modules/other/gail/gailbox.c	(revision 22596)
+++ modules/other/gail/gailbox.c	(working copy)
@@ -27,6 +27,12 @@
 static void         gail_box_initialize            (AtkObject     *accessible,
                                                     gpointer       data);
 static AtkStateSet* gail_box_ref_state_set         (AtkObject     *accessible);
+static gint         gail_box_child_added_gtk             (GtkBox *box,
+                                                        GtkWidget          *widget,
+                                                        gpointer           data);
+static gint         gail_box_real_child_added_gtk        (GtkBox       *box,
+                                                        GtkWidget          *widget,
+                                                        gpointer           data);
 
 G_DEFINE_TYPE (GailBox, gail_box, GAIL_TYPE_CONTAINER)
 
@@ -37,6 +43,8 @@
 
   class->initialize = gail_box_initialize;
   class->ref_state_set = gail_box_ref_state_set;
+
+  klass->child_added_gtk = gail_box_real_child_added_gtk;
 }
 
 static void
@@ -49,8 +57,24 @@
                      gpointer  data)
 {
   ATK_OBJECT_CLASS (gail_box_parent_class)->initialize (accessible, data);
+  guint handler_id;
 
   accessible->role = ATK_ROLE_FILLER;
+
+  /* We always get a child_added after an add, and the inverse is not true,
+   * so ignore the former */
+  handler_id = (guint)g_object_get_data (G_OBJECT (accessible), "gail-add-handler-id");
+  g_signal_handler_disconnect (data, handler_id); 
+  /*
+   * We store the handler ids for these signals in case some objects
+   * need to remove these handlers.
+   */
+  handler_id = g_signal_connect (data,
+                                 "child_added",
+                                 G_CALLBACK (gail_box_child_added_gtk),
+                                 accessible);
+  g_object_set_data (G_OBJECT (accessible), "gail-child-added-handler-id", 
+                     GUINT_TO_POINTER (handler_id));
 }
 
 static AtkStateSet*
@@ -72,3 +96,40 @@
 
   return state_set;
 }
+
+static gint
+gail_box_child_added_gtk (GtkBox *box,
+                        GtkWidget    *widget,
+                        gpointer     data)
+{
+  GailBox *gail_box = GAIL_BOX (data);
+  GailBoxClass *klass;
+
+  klass = GAIL_BOX_GET_CLASS (gail_box);
+
+  if (klass->child_added_gtk)
+    return klass->child_added_gtk (box, widget, data);
+  else
+    return 1;
+}
+
+static gint
+gail_box_real_child_added_gtk (GtkBox *box,
+                             GtkWidget    *widget,
+                             gpointer     data)
+{
+  AtkObject* atk_parent = ATK_OBJECT (data);
+  AtkObject* atk_child = gtk_widget_get_accessible (widget);
+  GailContainer *gail_container = GAIL_CONTAINER (atk_parent);
+  gint       index;
+
+  g_object_notify (G_OBJECT (atk_child), "accessible_parent");
+
+  g_list_free (gail_container->children);
+  gail_container->children = gtk_container_get_children (GTK_CONTAINER (box));
+  index = g_list_index (gail_container->children, widget);
+  g_signal_emit_by_name (atk_parent, "children_changed::add", 
+                         index, atk_child, NULL);
+
+  return 1;
+}
Index: modules/other/gail/gailbox.h
===================================================================
--- modules/other/gail/gailbox.h	(revision 22596)
+++ modules/other/gail/gailbox.h	(working copy)
@@ -44,6 +44,10 @@
 struct _GailBoxClass
 {
   GailContainerClass parent_class;
+
+  gint (*child_added_gtk) (GtkBox *box,
+                   GtkWidget    *widget,
+                   gpointer     data);
 };
 
 G_END_DECLS
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 22596)
+++ ChangeLog	(working copy)
@@ -1,3 +1,9 @@
+2009-03-30  Mike Gorse  <mgorse@novell.com>
+
+	Bug 577392 - Gail doesn't emit children-changed::add when packing a box
+
+	* gtk/gtkbox.c, gtk/gtkbox.h: Add child_added signal.
+
 2009-03-29  Christian Persch  <chpe@gnome.org>
 
 	Bug 577224 – crash when setting new icon after setting icon in
