summaryrefslogtreecommitdiff
path: root/gtk/gtkbox.c
diff options
context:
space:
mode:
authorCosimo Cecchi <cosimoc@gnome.org>2013-02-22 09:14:19 -0500
committerCosimo Cecchi <cosimoc@gnome.org>2013-02-23 14:53:24 -0500
commit61344219d4ba6d81854cc5bea8cf90f600358501 (patch)
tree09035a4caed393428b0d862a8dcba5042fe08c3f /gtk/gtkbox.c
parenta07f767ed417323cf2511f5ada4b2f120904b601 (diff)
downloadgtk+-61344219d4ba6d81854cc5bea8cf90f600358501.tar.gz
Revert "box: Don't special-case RTL hbox child positions anymore"
This reverts commit 6f86e57c4fb2cd76549910302b3a7145e7fd0e8b. https://bugzilla.gnome.org/show_bug.cgi?id=694451
Diffstat (limited to 'gtk/gtkbox.c')
-rw-r--r--gtk/gtkbox.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/gtk/gtkbox.c b/gtk/gtkbox.c
index efd4936657..5c8e6e3ff8 100644
--- a/gtk/gtkbox.c
+++ b/gtk/gtkbox.c
@@ -151,6 +151,8 @@ static void gtk_box_size_allocate (GtkWidget *widget,
static void gtk_box_compute_expand (GtkWidget *widget,
gboolean *hexpand,
gboolean *vexpand);
+static void gtk_box_direction_changed (GtkWidget *widget,
+ GtkTextDirection previous_direction);
static void gtk_box_set_property (GObject *object,
guint prop_id,
@@ -220,6 +222,7 @@ gtk_box_class_init (GtkBoxClass *class)
widget_class->get_preferred_height_for_width = gtk_box_get_preferred_height_for_width;
widget_class->get_preferred_width_for_height = gtk_box_get_preferred_width_for_height;
widget_class->compute_expand = gtk_box_compute_expand;
+ widget_class->direction_changed = gtk_box_direction_changed;
container_class->add = gtk_box_add;
container_class->remove = gtk_box_remove;
@@ -855,7 +858,9 @@ count_widget_position (GtkWidget *widget,
if (count->widget == widget)
count->found = TRUE;
- else if (!count->found)
+ else if (count->found)
+ count->after++;
+ else
count->before++;
}
@@ -877,7 +882,11 @@ gtk_box_get_visible_position (GtkBox *box,
if (!count.found)
return -1;
- return count.before;
+ if (box->priv->orientation == GTK_ORIENTATION_HORIZONTAL &&
+ gtk_widget_get_direction (GTK_WIDGET (box)) == GTK_TEXT_DIR_RTL)
+ return count.after;
+ else
+ return count.before;
}
static GtkWidgetPath *
@@ -886,9 +895,11 @@ gtk_box_get_path_for_child (GtkContainer *container,
{
GtkWidgetPath *path, *sibling_path;
GtkBox *box;
+ GtkBoxPrivate *private;
GList *list, *children;
box = GTK_BOX (container);
+ private = box->priv;
path = _gtk_widget_create_path (GTK_WIDGET (container));
@@ -900,6 +911,9 @@ gtk_box_get_path_for_child (GtkContainer *container,
/* get_children works in visible order */
children = gtk_container_get_children (container);
+ if (private->orientation == GTK_ORIENTATION_HORIZONTAL &&
+ gtk_widget_get_direction (GTK_WIDGET (box)) == GTK_TEXT_DIR_RTL)
+ children = g_list_reverse (children);
for (list = children; list; list = list->next)
{
@@ -941,6 +955,13 @@ gtk_box_invalidate_order (GtkBox *box)
}
static void
+gtk_box_direction_changed (GtkWidget *widget,
+ GtkTextDirection previous_direction)
+{
+ gtk_box_invalidate_order (GTK_BOX (widget));
+}
+
+static void
box_child_visibility_notify_cb (GObject *obj,
GParamSpec *pspec,
gpointer user_data)