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:
24
gtk/gtkbox.c
24
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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user