diff options
author | Cosimo Cecchi <cosimoc@gnome.org> | 2013-02-22 09:14:19 -0500 |
---|---|---|
committer | Cosimo Cecchi <cosimoc@gnome.org> | 2013-02-23 14:53:24 -0500 |
commit | 61344219d4ba6d81854cc5bea8cf90f600358501 (patch) | |
tree | 09035a4caed393428b0d862a8dcba5042fe08c3f /gtk/gtkbox.c | |
parent | a07f767ed417323cf2511f5ada4b2f120904b601 (diff) | |
download | gtk+-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.c | 25 |
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) |