a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b *
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b * gdl-dock-paned.h
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b *
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b * This file is part of the GNOME Devtools Libraries.
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b *
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b * Copyright (C) 2002 Gustavo Gir�ldez <gustavo.giraldez@gmx.net>
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b *
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b * This library is free software; you can redistribute it and/or
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b * modify it under the terms of the GNU Lesser General Public
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b * License as published by the Free Software Foundation; either
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b * version 2.1 of the License, or (at your option) any later version.
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b *
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b * This library is distributed in the hope that it will be useful,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b * but WITHOUT ANY WARRANTY; without even the implied warranty of
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b * Lesser General Public License for more details.
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b *
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b * You should have received a copy of the GNU Lesser General Public
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b * License along with this library; if not, write to the Free Software
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b */
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b#ifdef HAVE_CONFIG_H
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b#include <config.h>
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b#endif
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b#include "gdl-i18n.h"
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b#include <string.h>
70207641401debe608223aa2febe3c50f412bcbdAlex Valavanis#include <gtk/gtk.h>
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b#include "gdl-dock-paned.h"
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b/* Private prototypes */
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bstatic void gdl_dock_paned_class_init (GdlDockPanedClass *klass);
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanisstatic void gdl_dock_paned_init (GdlDockPaned *paned);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bstatic GObject *gdl_dock_paned_constructor (GType type,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b guint n_construct_properties,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GObjectConstructParam *construct_param);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bstatic void gdl_dock_paned_set_property (GObject *object,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b guint prop_id,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b const GValue *value,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GParamSpec *pspec);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bstatic void gdl_dock_paned_get_property (GObject *object,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b guint prop_id,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GValue *value,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GParamSpec *pspec);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bstatic void gdl_dock_paned_destroy (GtkObject *object);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bstatic void gdl_dock_paned_add (GtkContainer *container,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GtkWidget *widget);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bstatic void gdl_dock_paned_forall (GtkContainer *container,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gboolean include_internals,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GtkCallback callback,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gpointer callback_data);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bstatic GType gdl_dock_paned_child_type (GtkContainer *container);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bstatic gboolean gdl_dock_paned_dock_request (GdlDockObject *object,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gint x,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gint y,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockRequest *request);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bstatic void gdl_dock_paned_dock (GdlDockObject *object,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockObject *requestor,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockPlacement position,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GValue *other_data);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bstatic void gdl_dock_paned_set_orientation (GdlDockItem *item,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GtkOrientation orientation);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bstatic gboolean gdl_dock_paned_child_placement (GdlDockObject *object,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockObject *child,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockPlacement *placement);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b/* ----- Class variables and definitions ----- */
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b#define SPLIT_RATIO 0.3
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_benum {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b PROP_0,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b PROP_POSITION
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b};
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b/* ----- Private functions ----- */
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex ValavanisG_DEFINE_TYPE (GdlDockPaned, gdl_dock_paned, GDL_TYPE_DOCK_ITEM);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bstatic void
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bgdl_dock_paned_class_init (GdlDockPanedClass *klass)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b{
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GObjectClass *g_object_class;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GtkObjectClass *gtk_object_class;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GtkWidgetClass *widget_class;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GtkContainerClass *container_class;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockObjectClass *object_class;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockItemClass *item_class;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_object_class = G_OBJECT_CLASS (klass);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gtk_object_class = GTK_OBJECT_CLASS (klass);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b widget_class = GTK_WIDGET_CLASS (klass);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b container_class = GTK_CONTAINER_CLASS (klass);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b object_class = GDL_DOCK_OBJECT_CLASS (klass);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b item_class = GDL_DOCK_ITEM_CLASS (klass);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_object_class->set_property = gdl_dock_paned_set_property;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_object_class->get_property = gdl_dock_paned_get_property;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_object_class->constructor = gdl_dock_paned_constructor;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gtk_object_class->destroy = gdl_dock_paned_destroy;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b container_class->add = gdl_dock_paned_add;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b container_class->forall = gdl_dock_paned_forall;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b container_class->child_type = gdl_dock_paned_child_type;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b object_class->is_compound = TRUE;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b object_class->dock_request = gdl_dock_paned_dock_request;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b object_class->dock = gdl_dock_paned_dock;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b object_class->child_placement = gdl_dock_paned_child_placement;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b item_class->has_grip = FALSE;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b item_class->set_orientation = gdl_dock_paned_set_orientation;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_object_class_install_property (
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_object_class, PROP_POSITION,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_param_spec_uint ("position", _("Position"),
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b _("Position of the divider in pixels"),
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b 0, G_MAXINT, 0,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b G_PARAM_READWRITE |
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GDL_DOCK_PARAM_EXPORT | GDL_DOCK_PARAM_AFTER));
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b}
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bstatic void
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanisgdl_dock_paned_init (GdlDockPaned *paned)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b{
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b paned->position_changed = FALSE;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b}
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bstatic void
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bgdl_dock_paned_notify_cb (GObject *g_object,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GParamSpec *pspec,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gpointer user_data)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b{
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockPaned *paned;
9da72320667347f97b641753dd3b4591f95df939Alex Valavanis
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_return_if_fail (user_data != NULL && GDL_IS_DOCK_PANED (user_data));
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b /* chain the notification to the GdlDockPaned */
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_object_notify (G_OBJECT (user_data), pspec->name);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b paned = GDL_DOCK_PANED (user_data);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
9da72320667347f97b641753dd3b4591f95df939Alex Valavanis if (GDL_DOCK_ITEM_USER_ACTION (user_data) && !strcmp (pspec->name, "position"))
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b paned->position_changed = TRUE;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b}
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bstatic gboolean
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bgdl_dock_paned_button_cb (GtkWidget *widget,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdkEventButton *event,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gpointer user_data)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b{
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockPaned *paned;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_return_val_if_fail (user_data != NULL && GDL_IS_DOCK_PANED (user_data), FALSE);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b paned = GDL_DOCK_PANED (user_data);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (event->button == 1) {
9da72320667347f97b641753dd3b4591f95df939Alex Valavanis if (event->type == GDK_BUTTON_PRESS)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GDL_DOCK_ITEM_SET_FLAGS (user_data, GDL_DOCK_USER_ACTION);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b else {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GDL_DOCK_ITEM_UNSET_FLAGS (user_data, GDL_DOCK_USER_ACTION);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (paned->position_changed) {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b /* emit pending layout changed signal to track separator position */
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (GDL_DOCK_OBJECT (paned)->master)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_signal_emit_by_name (GDL_DOCK_OBJECT (paned)->master, "layout-changed");
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b paned->position_changed = FALSE;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b }
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b }
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b }
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b return FALSE;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b}
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bstatic void
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bgdl_dock_paned_create_child (GdlDockPaned *paned,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GtkOrientation orientation)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b{
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockItem *item;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b item = GDL_DOCK_ITEM (paned);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (item->child)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gtk_widget_unparent (GTK_WIDGET (item->child));
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b /* create the container paned */
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (orientation == GTK_ORIENTATION_HORIZONTAL)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b item->child = gtk_hpaned_new ();
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b else
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b item->child = gtk_vpaned_new ();
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b /* get notification for propagation */
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_signal_connect (item->child, "notify::position",
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b (GCallback) gdl_dock_paned_notify_cb, (gpointer) item);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_signal_connect (item->child, "button-press-event",
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b (GCallback) gdl_dock_paned_button_cb, (gpointer) item);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_signal_connect (item->child, "button-release-event",
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b (GCallback) gdl_dock_paned_button_cb, (gpointer) item);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gtk_widget_set_parent (item->child, GTK_WIDGET (item));
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gtk_widget_show (item->child);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b}
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bstatic GObject *
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bgdl_dock_paned_constructor (GType type,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b guint n_construct_properties,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GObjectConstructParam *construct_param)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b{
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GObject *g_object;
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis g_object = G_OBJECT_CLASS (gdl_dock_paned_parent_class)-> constructor (type,
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis n_construct_properties,
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis construct_param);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (g_object) {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockItem *item = GDL_DOCK_ITEM (g_object);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (!item->child)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gdl_dock_paned_create_child (GDL_DOCK_PANED (g_object),
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b item->orientation);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b /* otherwise, the orientation was set as a construction
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b parameter and the child is already created */
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b }
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b return g_object;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b}
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bstatic void
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bgdl_dock_paned_set_property (GObject *object,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b guint prop_id,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b const GValue *value,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GParamSpec *pspec)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b{
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockItem *item = GDL_DOCK_ITEM (object);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b switch (prop_id) {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b case PROP_POSITION:
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (item->child && GTK_IS_PANED (item->child))
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gtk_paned_set_position (GTK_PANED (item->child),
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_value_get_uint (value));
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b break;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b default:
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b break;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b }
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b}
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bstatic void
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bgdl_dock_paned_get_property (GObject *object,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b guint prop_id,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GValue *value,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GParamSpec *pspec)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b{
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockItem *item = GDL_DOCK_ITEM (object);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b switch (prop_id) {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b case PROP_POSITION:
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (item->child && GTK_IS_PANED (item->child))
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_value_set_uint (value,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gtk_paned_get_position (GTK_PANED (item->child)));
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b else
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_value_set_uint (value, 0);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b break;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b default:
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b break;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b }
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b}
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bstatic void
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bgdl_dock_paned_destroy (GtkObject *object)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b{
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockItem *item = GDL_DOCK_ITEM (object);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b /* we need to call the virtual first, since in GdlDockDestroy our
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b children dock objects are detached */
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis GTK_OBJECT_CLASS (gdl_dock_paned_parent_class)->destroy (object);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b /* after that we can remove the GtkNotebook */
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (item->child) {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gtk_widget_unparent (item->child);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b item->child = NULL;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b };
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b}
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bstatic void
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bgdl_dock_paned_add (GtkContainer *container,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GtkWidget *widget)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b{
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockItem *item;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockPlacement pos = GDL_DOCK_NONE;
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis GtkPaned *paned;
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis GtkWidget *child1, *child2;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_return_if_fail (container != NULL && widget != NULL);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_return_if_fail (GDL_IS_DOCK_PANED (container));
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_return_if_fail (GDL_IS_DOCK_ITEM (widget));
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b item = GDL_DOCK_ITEM (container);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_return_if_fail (item->child != NULL);
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b paned = GTK_PANED (item->child);
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis child1 = gtk_paned_get_child1 (paned);
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis child2 = gtk_paned_get_child2 (paned);
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis g_return_if_fail (!child1 || !child2);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis if (!child1)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b pos = item->orientation == GTK_ORIENTATION_HORIZONTAL ?
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GDL_DOCK_LEFT : GDL_DOCK_TOP;
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis else if (!child2)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b pos = item->orientation == GTK_ORIENTATION_HORIZONTAL ?
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GDL_DOCK_RIGHT : GDL_DOCK_BOTTOM;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (pos != GDL_DOCK_NONE)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gdl_dock_object_dock (GDL_DOCK_OBJECT (container),
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GDL_DOCK_OBJECT (widget),
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b pos, NULL);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b}
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bstatic void
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bgdl_dock_paned_forall (GtkContainer *container,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gboolean include_internals,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GtkCallback callback,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gpointer callback_data)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b{
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockItem *item;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_return_if_fail (container != NULL);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_return_if_fail (GDL_IS_DOCK_PANED (container));
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_return_if_fail (callback != NULL);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (include_internals) {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b /* use GdlDockItem's forall */
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis GTK_CONTAINER_CLASS (gdl_dock_paned_parent_class)->forall
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis (container, include_internals, callback, callback_data);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b }
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b else {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b item = GDL_DOCK_ITEM (container);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (item->child)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gtk_container_foreach (GTK_CONTAINER (item->child), callback, callback_data);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b }
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b}
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bstatic GType
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bgdl_dock_paned_child_type (GtkContainer *container)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b{
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockItem *item = GDL_DOCK_ITEM (container);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (gtk_container_child_type (GTK_CONTAINER (item->child)) == G_TYPE_NONE)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b return G_TYPE_NONE;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b else
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b return GDL_TYPE_DOCK_ITEM;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b}
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bstatic void
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bgdl_dock_paned_request_foreach (GdlDockObject *object,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gpointer user_data)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b{
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b struct {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gint x, y;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockRequest *request;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gboolean may_dock;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b } *data = user_data;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockRequest my_request;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gboolean may_dock;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b my_request = *data->request;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b may_dock = gdl_dock_object_dock_request (object, data->x, data->y, &my_request);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (may_dock) {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b data->may_dock = TRUE;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b *data->request = my_request;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b }
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b}
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bstatic gboolean
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bgdl_dock_paned_dock_request (GdlDockObject *object,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gint x,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gint y,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockRequest *request)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b{
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockItem *item;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b guint bw;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gint rel_x, rel_y;
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis GtkAllocation alloc;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gboolean may_dock = FALSE;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockRequest my_request;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_return_val_if_fail (GDL_IS_DOCK_ITEM (object), FALSE);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b /* we get (x,y) in our allocation coordinates system */
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b item = GDL_DOCK_ITEM (object);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b /* Get item's allocation. */
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis gtk_widget_get_allocation (GTK_WIDGET (object), &alloc);
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis bw = gtk_container_get_border_width (GTK_CONTAINER (object));
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b /* Get coordinates relative to our window. */
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis rel_x = x - alloc.x;
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis rel_y = y - alloc.y;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (request)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b my_request = *request;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b /* Check if coordinates are inside the widget. */
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis if (rel_x > 0 && rel_x < alloc.width &&
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis rel_y > 0 && rel_y < alloc.height) {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GtkRequisition my, other;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gint divider = -1;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gdl_dock_item_preferred_size (GDL_DOCK_ITEM (my_request.applicant), &other);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gdl_dock_item_preferred_size (GDL_DOCK_ITEM (object), &my);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b /* It's inside our area. */
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b may_dock = TRUE;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b /* Set docking indicator rectangle to the widget size. */
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b my_request.rect.x = bw;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b my_request.rect.y = bw;
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis my_request.rect.width = alloc.width - 2*bw;
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis my_request.rect.height = alloc.height - 2*bw;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b my_request.target = object;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b /* See if it's in the border_width band. */
590e6c721a8540ebed996b273c08f35b1888426eJohan B. C. Engelen if (rel_x < (gint)bw) {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b my_request.position = GDL_DOCK_LEFT;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b my_request.rect.width *= SPLIT_RATIO;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b divider = other.width;
590e6c721a8540ebed996b273c08f35b1888426eJohan B. C. Engelen } else if (rel_x > alloc.width - (gint)bw) {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b my_request.position = GDL_DOCK_RIGHT;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b my_request.rect.x += my_request.rect.width * (1 - SPLIT_RATIO);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b my_request.rect.width *= SPLIT_RATIO;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b divider = MAX (0, my.width - other.width);
590e6c721a8540ebed996b273c08f35b1888426eJohan B. C. Engelen } else if (rel_y < (gint)bw) {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b my_request.position = GDL_DOCK_TOP;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b my_request.rect.height *= SPLIT_RATIO;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b divider = other.height;
590e6c721a8540ebed996b273c08f35b1888426eJohan B. C. Engelen } else if (rel_y > alloc.height - (gint)bw) {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b my_request.position = GDL_DOCK_BOTTOM;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b my_request.rect.y += my_request.rect.height * (1 - SPLIT_RATIO);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b my_request.rect.height *= SPLIT_RATIO;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b divider = MAX (0, my.height - other.height);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b } else { /* Otherwise try our children. */
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b struct {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gint x, y;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockRequest *request;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gboolean may_dock;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b } data;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b /* give them coordinates in their allocation system... the
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GtkPaned has no window, so our children allocation
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b coordinates are our window coordinates */
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b data.x = rel_x;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b data.y = rel_y;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b data.request = &my_request;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b data.may_dock = FALSE;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gtk_container_foreach (GTK_CONTAINER (object),
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b (GtkCallback) gdl_dock_paned_request_foreach,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b &data);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b may_dock = data.may_dock;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (!may_dock) {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b /* the pointer is on the handle, so snap to top/bottom
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b or left/right */
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b may_dock = TRUE;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (item->orientation == GTK_ORIENTATION_HORIZONTAL) {
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis if (rel_y < alloc.height / 2) {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b my_request.position = GDL_DOCK_TOP;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b my_request.rect.height *= SPLIT_RATIO;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b divider = other.height;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b } else {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b my_request.position = GDL_DOCK_BOTTOM;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b my_request.rect.y += my_request.rect.height * (1 - SPLIT_RATIO);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b my_request.rect.height *= SPLIT_RATIO;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b divider = MAX (0, my.height - other.height);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b }
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b } else {
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis if (rel_x < alloc.width / 2) {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b my_request.position = GDL_DOCK_LEFT;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b my_request.rect.width *= SPLIT_RATIO;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b divider = other.width;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b } else {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b my_request.position = GDL_DOCK_RIGHT;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b my_request.rect.x += my_request.rect.width * (1 - SPLIT_RATIO);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b my_request.rect.width *= SPLIT_RATIO;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b divider = MAX (0, my.width - other.width);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b }
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b }
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b }
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b }
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (divider >= 0 && my_request.position != GDL_DOCK_CENTER) {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (G_IS_VALUE (&my_request.extra))
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_value_unset (&my_request.extra);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_value_init (&my_request.extra, G_TYPE_UINT);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_value_set_uint (&my_request.extra, (guint) divider);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b }
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (may_dock) {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b /* adjust returned coordinates so they are relative to
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b our allocation */
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis my_request.rect.x += alloc.x;
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis my_request.rect.y += alloc.y;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b }
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b }
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (may_dock && request)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b *request = my_request;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b return may_dock;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b}
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bstatic void
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bgdl_dock_paned_dock (GdlDockObject *object,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockObject *requestor,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockPlacement position,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GValue *other_data)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b{
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GtkPaned *paned;
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis GtkWidget *child1, *child2;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gboolean done = FALSE;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gboolean hresize = FALSE;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gboolean wresize = FALSE;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gint temp = 0;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_return_if_fail (GDL_IS_DOCK_PANED (object));
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_return_if_fail (GDL_DOCK_ITEM (object)->child != NULL);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b paned = GTK_PANED (GDL_DOCK_ITEM (object)->child);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (GDL_IS_DOCK_ITEM (requestor)) {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_object_get (G_OBJECT (requestor), "preferred_height", &temp, NULL);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (temp == -2)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b hresize = TRUE;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b temp = 0;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_object_get (G_OBJECT (requestor), "preferred_width", &temp, NULL);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (temp == -2)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b wresize = TRUE;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b }
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis child1 = gtk_paned_get_child1 (paned);
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis child2 = gtk_paned_get_child2 (paned);
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b /* see if we can dock the item in our paned */
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b switch (GDL_DOCK_ITEM (object)->orientation) {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b case GTK_ORIENTATION_HORIZONTAL:
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis if (!child1 && position == GDL_DOCK_LEFT) {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gtk_paned_pack1 (paned, GTK_WIDGET (requestor), FALSE, FALSE);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b done = TRUE;
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis } else if (!child2 && position == GDL_DOCK_RIGHT) {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gtk_paned_pack2 (paned, GTK_WIDGET (requestor), TRUE, FALSE);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b done = TRUE;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b }
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b break;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b case GTK_ORIENTATION_VERTICAL:
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis if (!child1 && position == GDL_DOCK_TOP) {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gtk_paned_pack1 (paned, GTK_WIDGET (requestor), hresize, FALSE);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b done = TRUE;
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis } else if (!child2 && position == GDL_DOCK_BOTTOM) {
9da72320667347f97b641753dd3b4591f95df939Alex Valavanis gtk_paned_pack2 (paned, GTK_WIDGET (requestor), hresize, FALSE);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b done = TRUE;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b }
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b break;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b default:
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b break;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b }
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (!done) {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b /* this will create another paned and reparent us there */
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis GDL_DOCK_OBJECT_CLASS (gdl_dock_paned_parent_class)->dock (object, requestor, position,
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis other_data);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b }
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b else {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gdl_dock_item_show_grip (GDL_DOCK_ITEM (requestor));
2eefc362ae6a0a94b84ee5bc9e7844ef45c3642cAlex Valavanis gtk_widget_show (GTK_WIDGET (requestor));
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GDL_DOCK_OBJECT_SET_FLAGS (requestor, GDL_DOCK_ATTACHED);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b }
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b}
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bstatic void
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bgdl_dock_paned_set_orientation (GdlDockItem *item,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GtkOrientation orientation)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b{
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GtkPaned *old_paned = NULL, *new_paned;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GtkWidget *child1, *child2;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_return_if_fail (GDL_IS_DOCK_PANED (item));
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (item->child) {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b old_paned = GTK_PANED (item->child);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_object_ref (old_paned);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gtk_widget_unparent (GTK_WIDGET (old_paned));
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b item->child = NULL;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b }
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gdl_dock_paned_create_child (GDL_DOCK_PANED (item), orientation);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (old_paned) {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b new_paned = GTK_PANED (item->child);
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis child1 = gtk_paned_get_child1 (old_paned);
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis child2 = gtk_paned_get_child2 (old_paned);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (child1) {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_object_ref (child1);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gtk_container_remove (GTK_CONTAINER (old_paned), child1);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gtk_paned_pack1 (new_paned, child1, TRUE, FALSE);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_object_unref (child1);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b }
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (child2) {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_object_ref (child2);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gtk_container_remove (GTK_CONTAINER (old_paned), child2);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b gtk_paned_pack1 (new_paned, child2, TRUE, FALSE);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b g_object_unref (child2);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b }
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b }
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis GDL_DOCK_ITEM_CLASS (gdl_dock_paned_parent_class)->set_orientation (item, orientation);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b}
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bstatic gboolean
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bgdl_dock_paned_child_placement (GdlDockObject *object,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockObject *child,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockPlacement *placement)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b{
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockItem *item = GDL_DOCK_ITEM (object);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GtkPaned *paned;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockPlacement pos = GDL_DOCK_NONE;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (item->child) {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b paned = GTK_PANED (item->child);
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis if (GTK_WIDGET (child) == gtk_paned_get_child1 (paned))
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b pos = item->orientation == GTK_ORIENTATION_HORIZONTAL ?
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GDL_DOCK_LEFT : GDL_DOCK_TOP;
d19de0ff8b0793e74e98429ded50868ce7e9f75cAlex Valavanis else if (GTK_WIDGET (child) == gtk_paned_get_child2 (paned))
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b pos = item->orientation == GTK_ORIENTATION_HORIZONTAL ?
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GDL_DOCK_RIGHT : GDL_DOCK_BOTTOM;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b }
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (pos != GDL_DOCK_NONE) {
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b if (placement)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b *placement = pos;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b return TRUE;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b }
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b else
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b return FALSE;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b}
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b/* ----- Public interface ----- */
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bGtkWidget *
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_bgdl_dock_paned_new (GtkOrientation orientation)
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b{
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GdlDockPaned *paned;
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b paned = GDL_DOCK_PANED (g_object_new (GDL_TYPE_DOCK_PANED,
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b "orientation", orientation, NULL));
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b GDL_DOCK_OBJECT_UNSET_FLAGS (paned, GDL_DOCK_AUTOMATIC);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b return GTK_WIDGET (paned);
a0df1b8dd5b14367c583ce2f72a2ca6bf1cde799gustav_b}
9da72320667347f97b641753dd3b4591f95df939Alex Valavanis