diff options
-rw-r--r-- | gtk/gtkbox.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/gtk/gtkbox.c b/gtk/gtkbox.c index f85459c353..0005413f69 100644 --- a/gtk/gtkbox.c +++ b/gtk/gtkbox.c @@ -1058,7 +1058,8 @@ gtk_box_size_allocate_with_center (GtkWidget *widget, { child_allocation.y = allocation->y; child_allocation.height = MAX (1, allocation->height); - if (packing == GTK_PACK_START) + if ((packing == GTK_PACK_START && direction == GTK_TEXT_DIR_LTR) || + (packing == GTK_PACK_END && direction == GTK_TEXT_DIR_RTL)) x = allocation->x; else x = allocation->x + allocation->width; @@ -1105,7 +1106,8 @@ gtk_box_size_allocate_with_center (GtkWidget *widget, child_allocation.x = x + (child_size - child_allocation.width) / 2; } - if (packing == GTK_PACK_START) + if ((packing == GTK_PACK_START && direction == GTK_TEXT_DIR_LTR) || + (packing == GTK_PACK_END && direction == GTK_TEXT_DIR_RTL)) { x += child_size + priv->spacing; } @@ -1114,10 +1116,6 @@ gtk_box_size_allocate_with_center (GtkWidget *widget, x -= child_size + priv->spacing; child_allocation.x -= child_size; } - - if (direction == GTK_TEXT_DIR_RTL) - child_allocation.x = allocation->x + allocation->width - (child_allocation.x - allocation->x) - child_allocation.width; - } else /* (private->orientation == GTK_ORIENTATION_VERTICAL) */ { @@ -1159,10 +1157,16 @@ gtk_box_size_allocate_with_center (GtkWidget *widget, else center_pos = allocation->y + (box_size - center_size) / 2; - if (center_pos < side[GTK_PACK_START]) - center_pos = side[GTK_PACK_START]; - else if (center_pos + center_size > side[GTK_PACK_END]) - center_pos = side[GTK_PACK_END] - center_size; + if (priv->orientation == GTK_ORIENTATION_HORIZONTAL && + direction == GTK_TEXT_DIR_RTL) + packing = GTK_PACK_END; + else + packing = GTK_PACK_START; + + if (center_pos < side[packing]) + center_pos = side[packing]; + else if (center_pos + center_size > side[1 - packing]) + center_pos = side[1 - packing] - center_size; if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) { |