Index: gtk/gtkvbbox.c
===================================================================
--- gtk/gtkvbbox.c	(revision 9292)
+++ gtk/gtkvbbox.c	(working copy)
@@ -84,7 +84,7 @@ void
 gtk_vbutton_box_set_layout_default (GtkButtonBoxStyle layout)
 {
   g_return_if_fail (layout >= GTK_BUTTONBOX_DEFAULT_STYLE &&
-		    layout <= GTK_BUTTONBOX_END);
+		    layout <= GTK_BUTTONBOX_CENTER);
 
   default_layout_style = layout;
 }
@@ -151,6 +151,7 @@ gtk_vbutton_box_size_request (GtkWidget 
       case GTK_BUTTONBOX_EDGE:
       case GTK_BUTTONBOX_START:
       case GTK_BUTTONBOX_END:
+      case GTK_BUTTONBOX_CENTER:
         requisition->height =
 		nvis_children*child_height + ((nvis_children-1)*spacing);
 	break;
@@ -239,6 +240,16 @@ gtk_vbutton_box_size_allocate (GtkWidget
       - GTK_CONTAINER (box)->border_width;
     secondary_y = allocation->y + GTK_CONTAINER (box)->border_width;
     break;
+  case GTK_BUTTONBOX_CENTER:
+    childspacing = spacing;
+    y = allocation->y + 
+      (allocation->height
+       - (child_height * (nvis_children - n_secondaries)
+	  + spacing * (nvis_children - n_secondaries - 1)))/2
+      + (n_secondaries * child_height + n_secondaries * spacing)/2
+      + GTK_CONTAINER (box)->border_width;
+    secondary_y = allocation->y + GTK_CONTAINER (box)->border_width;
+    break;
   default:
     g_assert_not_reached();
     break;
Index: gtk/gtkhbbox.c
===================================================================
--- gtk/gtkhbbox.c	(revision 9292)
+++ gtk/gtkhbbox.c	(working copy)
@@ -83,7 +83,7 @@ void 
 gtk_hbutton_box_set_layout_default (GtkButtonBoxStyle layout)
 {
   g_return_if_fail (layout >= GTK_BUTTONBOX_DEFAULT_STYLE &&
-		    layout <= GTK_BUTTONBOX_END);
+		    layout <= GTK_BUTTONBOX_CENTER);
 
   default_layout_style = layout;
 }
@@ -148,6 +148,7 @@ gtk_hbutton_box_size_request (GtkWidget 
     case GTK_BUTTONBOX_EDGE:
     case GTK_BUTTONBOX_START:
     case GTK_BUTTONBOX_END:
+    case GTK_BUTTONBOX_CENTER:
       requisition->width = nvis_children*child_width + ((nvis_children-1)*spacing);
       break;
     default:
@@ -235,6 +236,16 @@ gtk_hbutton_box_size_allocate (GtkWidget
       - GTK_CONTAINER (box)->border_width;
     secondary_x = allocation->x + GTK_CONTAINER (box)->border_width;
     break;
+  case GTK_BUTTONBOX_CENTER:
+    childspacing = spacing;
+    x = allocation->x + 
+      (allocation->width
+       - (child_width * (nvis_children - n_secondaries)
+	  + spacing * (nvis_children - n_secondaries - 1)))/2
+      + (n_secondaries * child_width + n_secondaries * spacing)/2
+      + GTK_CONTAINER (box)->border_width;
+    secondary_x = allocation->x + GTK_CONTAINER (box)->border_width;
+    break;
   default:
     g_assert_not_reached();
     break;
Index: gtk/gtkbbox.c
===================================================================
--- gtk/gtkbbox.c	(revision 9292)
+++ gtk/gtkbbox.c	(working copy)
@@ -253,7 +253,7 @@ gtk_button_box_set_layout (GtkButtonBox 
 {
   g_return_if_fail (GTK_IS_BUTTON_BOX (widget));
   g_return_if_fail (layout_style >= GTK_BUTTONBOX_DEFAULT_STYLE &&
-		    layout_style <= GTK_BUTTONBOX_END);
+		    layout_style <= GTK_BUTTONBOX_CENTER);
 
   if (widget->layout_style != layout_style)
     {
Index: gtk/gtkenums.h
===================================================================
--- gtk/gtkenums.h	(revision 9292)
+++ gtk/gtkenums.h	(working copy)
@@ -78,7 +78,8 @@ typedef enum 
   GTK_BUTTONBOX_SPREAD,
   GTK_BUTTONBOX_EDGE,
   GTK_BUTTONBOX_START,
-  GTK_BUTTONBOX_END
+  GTK_BUTTONBOX_END,
+  GTK_BUTTONBOX_CENTER
 } GtkButtonBoxStyle;
 
 /* Curve types */
