[gtk+] box: Fix rtl allocation with center widget



commit 6b53138a013dc487f8ab84e67efd8fb81ee7ec10
Author: Matthias Clasen <mclasen redhat com>
Date:   Sat Feb 20 16:41:53 2016 -0500

    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.

 gtk/gtkbox.c |   24 ++++++++++++++----------
 1 files changed, 14 insertions(+), 10 deletions(-)
---
diff --git a/gtk/gtkbox.c b/gtk/gtkbox.c
index d0e9d3d..16df01d 100644
--- a/gtk/gtkbox.c
+++ b/gtk/gtkbox.c
@@ -1063,7 +1063,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;
@@ -1110,7 +1111,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;
                 }
@@ -1119,10 +1121,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) */
             {
@@ -1164,10 +1162,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)
     {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]