#include "gtkbox.h"
#include "gtkboxprivate.h"
+#include "gtkintl.h"
#include "gtkorientable.h"
-#include "gtksizerequest.h"
-#include "gtktypebuiltins.h"
+#include "gtkorientableprivate.h"
#include "gtkprivate.h"
-#include "gtkintl.h"
-#include "a11y/gtkboxaccessible.h"
+#include "gtktypebuiltins.h"
+#include "gtksizerequest.h"
+#include "gtkwidgetpath.h"
+#include "gtkwidgetprivate.h"
+#include "a11y/gtkcontaineraccessible.h"
enum {
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,
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;
g_type_class_add_private (object_class, sizeof (GtkBoxPrivate));
- gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_BOX_ACCESSIBLE);
+ gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_FILLER);
}
static void
{
case PROP_ORIENTATION:
private->orientation = g_value_get_enum (value);
+ _gtk_orientable_set_style_classes (GTK_ORIENTABLE (box));
gtk_widget_queue_resize (GTK_WIDGET (box));
break;
case PROP_SPACING:
if (count->widget == widget)
count->found = TRUE;
- else if (count->found)
- count->after++;
- else
+ else if (!count->found)
count->before++;
}
if (!count.found)
return -1;
- 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;
+ return count.before;
}
static GtkWidgetPath *
{
GtkWidgetPath *path, *sibling_path;
GtkBox *box;
- GtkBoxPrivate *private;
GList *list, *children;
box = GTK_BOX (container);
- private = box->priv;
- path = gtk_widget_path_copy (gtk_widget_get_path (GTK_WIDGET (container)));
+ path = _gtk_widget_create_path (GTK_WIDGET (container));
if (gtk_widget_get_visible (child))
{
/* 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)
{
}
static void
-gtk_box_invalidate_order (GtkBox *box)
+gtk_box_invalidate_order_foreach (GtkWidget *widget)
{
- gtk_container_foreach (GTK_CONTAINER (box),
- (GtkCallback) gtk_widget_reset_style,
- NULL);
+ _gtk_widget_invalidate_style_context (widget, GTK_CSS_CHANGE_POSITION | GTK_CSS_CHANGE_SIBLING_POSITION);
}
static void
-gtk_box_direction_changed (GtkWidget *widget,
- GtkTextDirection previous_direction)
+gtk_box_invalidate_order (GtkBox *box)
{
- gtk_box_invalidate_order (GTK_BOX (widget));
+ gtk_container_foreach (GTK_CONTAINER (box),
+ (GtkCallback) gtk_box_invalidate_order_foreach,
+ NULL);
}
static void
pack_type = GTK_PACK_START;
if (child_info->pack != pack_type)
{
- child_info->pack = GTK_PACK_END;
+ child_info->pack = pack_type;
gtk_widget_child_notify (child, "pack-type");
gtk_box_invalidate_order (box);
}
{
gboolean was_visible;
- was_visible = gtk_widget_get_visible (widget);
- gtk_widget_unparent (widget);
-
g_signal_handlers_disconnect_by_func (widget,
box_child_visibility_notify_cb,
box);
+ was_visible = gtk_widget_get_visible (widget);
+ gtk_widget_unparent (widget);
+
priv->children = g_list_remove_link (priv->children, children);
g_list_free (children);
g_free (child);