* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
+#include <config.h>
#include "gtkhpaned.h"
static void gtk_hpaned_class_init (GtkHPanedClass *klass);
static gpointer parent_class;
-GtkType
+GType
gtk_hpaned_get_type (void)
{
- static GtkType hpaned_type = 0;
+ static GType hpaned_type = 0;
if (!hpaned_type)
{
- static const GtkTypeInfo hpaned_info =
+ static const GTypeInfo hpaned_info =
{
- "GtkHPaned",
- sizeof (GtkHPaned),
sizeof (GtkHPanedClass),
- (GtkClassInitFunc) gtk_hpaned_class_init,
- (GtkObjectInitFunc) gtk_hpaned_init,
- /* reserved_1 */ NULL,
- /* reserved_2 */ NULL,
- (GtkClassInitFunc) NULL,
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ (GClassInitFunc) gtk_hpaned_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof (GtkHPaned),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) gtk_hpaned_init,
};
- hpaned_type = gtk_type_unique (GTK_TYPE_PANED, &hpaned_info);
+ hpaned_type = g_type_register_static (GTK_TYPE_PANED, "GtkHPaned",
+ &hpaned_info, 0);
}
return hpaned_type;
{
GtkWidgetClass *widget_class;
- parent_class = gtk_type_class (GTK_TYPE_PANED);
+ parent_class = g_type_class_peek_parent (class);
widget_class = (GtkWidgetClass *) class;
{
GtkHPaned *hpaned;
- hpaned = gtk_type_new (GTK_TYPE_HPANED);
+ hpaned = g_object_new (GTK_TYPE_HPANED, NULL);
return GTK_WIDGET (hpaned);
}
}
}
+static void
+flip_child (GtkWidget *widget, GtkAllocation *child_pos)
+{
+ gint x = widget->allocation.x;
+ gint width = widget->allocation.width;
+
+ child_pos->x = 2 * x + width - child_pos->x - child_pos->width;
+}
+
static void
gtk_hpaned_size_allocate (GtkWidget *widget,
GtkAllocation *allocation)
paned->handle_pos.y = widget->allocation.y + border_width;
paned->handle_pos.width = handle_size;
paned->handle_pos.height = MAX (1, widget->allocation.height - 2 * border_width);
+
+ child1_allocation.height = child2_allocation.height = MAX (1, (gint) allocation->height - border_width * 2);
+ child1_allocation.width = MAX (1, paned->child1_size);
+ child1_allocation.x = widget->allocation.x + border_width;
+ child1_allocation.y = child2_allocation.y = widget->allocation.y + border_width;
+
+ child2_allocation.x = child1_allocation.x + paned->child1_size + paned->handle_pos.width;
+ child2_allocation.width = MAX (1, widget->allocation.x + widget->allocation.width - child2_allocation.x - border_width);
+
+ if (gtk_widget_get_direction (GTK_WIDGET (widget)) == GTK_TEXT_DIR_RTL)
+ {
+ flip_child (widget, &(child2_allocation));
+ flip_child (widget, &(child1_allocation));
+ flip_child (widget, &(paned->handle_pos));
+ }
if (GTK_WIDGET_REALIZED (widget))
{
paned->handle_pos.height);
}
- child1_allocation.height = child2_allocation.height = MAX (1, (gint) allocation->height - border_width * 2);
- child1_allocation.width = MAX (1, paned->child1_size);
- child1_allocation.x = widget->allocation.x + border_width;
- child1_allocation.y = child2_allocation.y = widget->allocation.y + border_width;
-
- child2_allocation.x = child1_allocation.x + paned->child1_size + paned->handle_pos.width;
- child2_allocation.width = MAX (1, widget->allocation.x + widget->allocation.width - child2_allocation.x - border_width);
-
/* Now allocate the childen, making sure, when resizing not to
* overlap the windows
*/
if (GTK_WIDGET_REALIZED (widget))
gdk_window_hide (paned->handle);
-
- gtk_widget_set_child_visible (paned->child1, TRUE);
- gtk_widget_set_child_visible (paned->child2, TRUE);
+
+ if (paned->child1)
+ gtk_widget_set_child_visible (paned->child1, TRUE);
+ if (paned->child2)
+ gtk_widget_set_child_visible (paned->child2, TRUE);
child_allocation.x = widget->allocation.x + border_width;
child_allocation.y = widget->allocation.y + border_width;