+#include "a11y/gtkpanedaccessible.h"
+
+/**
+ * SECTION:gtkpaned
+ * @Short_description: A widget with two adjustable panes
+ * @Title: GtkPaned
+ *
+ * #GtkPaned has two panes, arranged either
+ * horizontally or vertically. The division between
+ * the two panes is adjustable by the user by dragging
+ * a handle.
+ *
+ * Child widgets are
+ * added to the panes of the widget with gtk_paned_pack1() and
+ * gtk_paned_pack2(). The division between the two children is set by default
+ * from the size requests of the children, but it can be adjusted by the
+ * user.
+ *
+ * A paned widget draws a separator between the two child widgets and a
+ * small handle that the user can drag to adjust the division. It does not
+ * draw any relief around the children or around the separator. (The space
+ * in which the separator is called the gutter.) Often, it is useful to put
+ * each child inside a #GtkFrame with the shadow type set to %GTK_SHADOW_IN
+ * so that the gutter appears as a ridge. No separator is drawn if one of
+ * the children is missing.
+ *
+ * Each child has two options that can be set, @resize and @shrink. If
+ * @resize is true, then when the #GtkPaned is resized, that child will
+ * expand or shrink along with the paned widget. If @shrink is true, then
+ * that child can be made smaller than its requisition by the user.
+ * Setting @shrink to %FALSE allows the application to set a minimum size.
+ * If @resize is false for both children, then this is treated as if
+ * @resize is true for both children.
+ *
+ * The application can set the position of the slider as if it were set
+ * by the user, by calling gtk_paned_set_position().
+ *
+ * <example>
+ * <title>Creating a paned widget with minimum sizes.</title>
+ * <programlisting>
+ * GtkWidget *hpaned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL);
+ * GtkWidget *frame1 = gtk_frame_new (NULL);
+ * GtkWidget *frame2 = gtk_frame_new (NULL);
+ * gtk_frame_set_shadow_type (GTK_FRAME (frame1), GTK_SHADOW_IN);
+ * gtk_frame_set_shadow_type (GTK_FRAME (frame2), GTK_SHADOW_IN);
+ *
+ * gtk_widget_set_size_request (hpaned, 200, -1);
+ *
+ * gtk_paned_pack1 (GTK_PANED (hpaned), frame1, TRUE, FALSE);
+ * gtk_widget_set_size_request (frame1, 50, -1);
+ *
+ * gtk_paned_pack2 (GTK_PANED (hpaned), frame2, FALSE, FALSE);
+ * gtk_widget_set_size_request (frame2, 50, -1);
+ * </programlisting>
+ * </example>
+ */
+
+enum {
+ CHILD1,
+ CHILD2
+};
+
+struct _GtkPanedPrivate
+{
+ GtkPaned *first_paned;
+ GtkWidget *child1;
+ GtkWidget *child2;
+ GdkWindow *child1_window;
+ GdkWindow *child2_window;
+ GtkWidget *last_child1_focus;
+ GtkWidget *last_child2_focus;
+ GtkWidget *saved_focus;
+ GtkOrientation orientation;
+
+ GdkCursorType cursor_type;
+ GdkDevice *grab_device;
+ GdkRectangle handle_pos;
+ GdkWindow *handle;
+
+ gint child1_size;
+ gint drag_pos;
+ gint last_allocation;
+ gint max_position;
+ gint min_position;
+ gint original_position;
+
+ guint32 grab_time;
+
+ guint handle_prelit : 1;
+ guint in_drag : 1;
+ guint in_recursion : 1;
+ guint child1_resize : 1;
+ guint child1_shrink : 1;
+ guint child2_resize : 1;
+ guint child2_shrink : 1;
+ guint position_set : 1;
+};