box: Fix rtl allocation with center widget

The code for adjusting the center widget allocation in case
of uneven sides never worked right in RTL. This was finally
noticed for tabs with close button, which commonly use a
centered label.
This commit is contained in:
Matthias Clasen
2016-02-20 16:41:53 -05:00
parent 7fc1fcde1e
commit 4331ff2939

View File

@@ -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)
{