Only in gdl/: .cvsignore Common subdirectories: gdl//.deps and /home/alex/devel/inkscape/trunk-checkout/src/libgdl//.deps Only in /home/alex/devel/inkscape/trunk-checkout/src/libgdl/: .dirstamp Only in gdl/: gdl-combo-button.lo diff -u gdl//gdl-dock-bar.c /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-bar.c --- gdl//gdl-dock-bar.c 2011-07-09 15:29:08.606633870 +0100 +++ /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-bar.c 2011-07-09 14:40:46.486632269 +0100 @@ -65,7 +65,6 @@ struct _GdlDockBarPrivate { GdlDockMaster *master; GSList *items; - GtkTooltips *tooltips; GtkOrientation orientation; GdlDockBarStyle dockbar_style; }; @@ -130,11 +129,8 @@ dockbar->_priv = g_new0 (GdlDockBarPrivate, 1); dockbar->_priv->master = NULL; dockbar->_priv->items = NULL; - dockbar->_priv->tooltips = gtk_tooltips_new (); dockbar->_priv->orientation = GTK_ORIENTATION_VERTICAL; dockbar->_priv->dockbar_style = GDL_DOCK_BAR_BOTH; - g_object_ref (dockbar->_priv->tooltips); - gtk_object_sink (GTK_OBJECT (dockbar->_priv->tooltips)); } static void @@ -208,11 +204,6 @@ priv->master = NULL; } - if (priv->tooltips) { - g_object_unref (priv->tooltips); - priv->tooltips = NULL; - } - dockbar->_priv = NULL; g_free (priv); @@ -255,6 +246,7 @@ { GdlDockBar *dockbar; GdlDockObject *controller; + (void)button; g_return_if_fail (item != NULL); @@ -278,6 +270,7 @@ GtkWidget *button; gchar *stock_id; gchar *name; + GdkPixbuf *pixbuf_icon; GtkWidget *image, *box, *label; g_return_if_fail (GDL_IS_DOCK_BAR (dockbar)); @@ -301,14 +294,15 @@ else box = gtk_vbox_new (FALSE, 0); - g_object_get (item, "stock-id", &stock_id, "long-name", &name, NULL); + g_object_get (item, "stock-id", &stock_id, "pixbuf-icon", &pixbuf_icon, + "long-name", &name, NULL); if (dockbar->_priv->dockbar_style == GDL_DOCK_BAR_TEXT || dockbar->_priv->dockbar_style == GDL_DOCK_BAR_BOTH) { label = gtk_label_new (name); if (dockbar->_priv->orientation == GTK_ORIENTATION_VERTICAL) gtk_label_set_angle (GTK_LABEL (label), 90); - gtk_box_pack_start_defaults (GTK_BOX (box), label); + gtk_box_pack_start (GTK_BOX (box), label, TRUE, TRUE, 0); } /* FIXME: For now AUTO behaves same as BOTH */ @@ -320,17 +314,19 @@ image = gtk_image_new_from_stock (stock_id, GTK_ICON_SIZE_SMALL_TOOLBAR); g_free (stock_id); + } else if (pixbuf_icon) { + image = gtk_image_new_from_pixbuf (pixbuf_icon); } else { image = gtk_image_new_from_stock (GTK_STOCK_NEW, GTK_ICON_SIZE_SMALL_TOOLBAR); } - gtk_box_pack_start_defaults (GTK_BOX (box), image); + gtk_box_pack_start (GTK_BOX (box), image, TRUE, TRUE, 0); } gtk_container_add (GTK_CONTAINER (button), box); gtk_box_pack_start (GTK_BOX (dockbar), button, FALSE, FALSE, 0); - gtk_tooltips_set_tip (priv->tooltips, button, name, name); + gtk_widget_set_tooltip_text (button, name); g_free (name); g_object_set_data (G_OBJECT (item), "GdlDockBar", dockbar); @@ -399,6 +395,7 @@ gdl_dock_bar_layout_changed_cb (GdlDockMaster *master, GdlDockBar *dockbar) { + (void)master; update_dock_items (dockbar, FALSE); } @@ -486,7 +483,7 @@ child = children->data; children = children->next; - if (GTK_WIDGET_VISIBLE (child->widget)) + if (gtk_widget_get_visible (child->widget)) { gtk_widget_size_request (child->widget, &child_requisition); @@ -544,7 +541,7 @@ child = children->data; children = children->next; - if (GTK_WIDGET_VISIBLE (child->widget)) + if (gtk_widget_get_visible (child->widget)) { nvis_children += 1; if (child->expand) @@ -582,7 +579,7 @@ child = children->data; children = children->next; - if ((child->pack == GTK_PACK_START) && GTK_WIDGET_VISIBLE (child->widget)) + if ((child->pack == GTK_PACK_START) && gtk_widget_get_visible (child->widget)) { if (box->homogeneous) { @@ -641,7 +638,7 @@ child = children->data; children = children->next; - if ((child->pack == GTK_PACK_END) && GTK_WIDGET_VISIBLE (child->widget)) + if ((child->pack == GTK_PACK_END) && gtk_widget_get_visible (child->widget)) { GtkRequisition child_requisition; gtk_widget_get_child_requisition (child->widget, &child_requisition); @@ -711,7 +708,7 @@ child = children->data; children = children->next; - if (GTK_WIDGET_VISIBLE (child->widget)) + if (gtk_widget_get_visible (child->widget)) { GtkRequisition child_requisition; @@ -773,7 +770,7 @@ child = children->data; children = children->next; - if (GTK_WIDGET_VISIBLE (child->widget)) + if (gtk_widget_get_visible (child->widget)) { nvis_children += 1; if (child->expand) @@ -811,7 +808,7 @@ child = children->data; children = children->next; - if ((child->pack == GTK_PACK_START) && GTK_WIDGET_VISIBLE (child->widget)) + if ((child->pack == GTK_PACK_START) && gtk_widget_get_visible (child->widget)) { if (box->homogeneous) { @@ -874,7 +871,7 @@ child = children->data; children = children->next; - if ((child->pack == GTK_PACK_END) && GTK_WIDGET_VISIBLE (child->widget)) + if ((child->pack == GTK_PACK_END) && gtk_widget_get_visible (child->widget)) { GtkRequisition child_requisition; gtk_widget_get_child_requisition (child->widget, &child_requisition); diff -u gdl//gdl-dock-bar.h /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-bar.h --- gdl//gdl-dock-bar.h 2011-07-09 15:29:08.616633870 +0100 +++ /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-bar.h 2011-07-09 15:18:02.146633503 +0100 @@ -22,17 +22,18 @@ #ifndef __GDL_DOCK_BAR_H__ #define __GDL_DOCK_BAR_H__ -#include +#include +#include "libgdl/gdl-dock.h" G_BEGIN_DECLS /* standard macros */ #define GDL_TYPE_DOCK_BAR (gdl_dock_bar_get_type ()) -#define GDL_DOCK_BAR(obj) (GTK_CHECK_CAST ((obj), GDL_TYPE_DOCK_BAR, GdlDockBar)) -#define GDL_DOCK_BAR_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_BAR, GdlDockBarClass)) -#define GDL_IS_DOCK_BAR(obj) (GTK_CHECK_TYPE ((obj), GDL_TYPE_DOCK_BAR)) -#define GDL_IS_DOCK_BAR_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_BAR)) -#define GDL_DOCK_BAR_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_DOCK_BAR, GdlDockBarClass)) +#define GDL_DOCK_BAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_BAR, GdlDockBar)) +#define GDL_DOCK_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_BAR, GdlDockBarClass)) +#define GDL_IS_DOCK_BAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_BAR)) +#define GDL_IS_DOCK_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_BAR)) +#define GDL_DOCK_BAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK_BAR, GdlDockBarClass)) /* data types & structures */ typedef struct _GdlDockBar GdlDockBar; Only in gdl/: gdl-dock-bar.lo Only in /home/alex/devel/inkscape/trunk-checkout/src/libgdl/: gdl-dock-bar.o diff -u gdl//gdl-dock.c /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock.c --- gdl//gdl-dock.c 2011-07-09 15:29:08.646633870 +0100 +++ /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock.c 2011-07-09 14:40:46.516632269 +0100 @@ -37,9 +37,6 @@ #include "libgdlmarshal.h" -#ifndef __FUNCTION__ -#define __FUNCTION__ __func__ -#endif /* ----- Private prototypes ----- */ @@ -82,7 +79,7 @@ gboolean include_internals, GtkCallback callback, gpointer callback_data); -static GtkType gdl_dock_child_type (GtkContainer *container); +static GType gdl_dock_child_type (GtkContainer *container); static void gdl_dock_detach (GdlDockObject *object, gboolean recursive); @@ -263,7 +260,7 @@ static void gdl_dock_instance_init (GdlDock *dock) { - GTK_WIDGET_SET_FLAGS (GTK_WIDGET (dock), GTK_NO_WINDOW); + gtk_widget_set_has_window (GTK_WIDGET (dock), FALSE); dock->root = NULL; dock->_priv = g_new0 (GdlDockPrivate, 1); @@ -277,7 +274,9 @@ gpointer user_data) { GdlDock *dock; - + + (void)widget; + g_return_val_if_fail (user_data != NULL && GDL_IS_DOCK (user_data), TRUE); dock = GDL_DOCK (user_data); @@ -331,6 +330,9 @@ gtk_window_set_type_hint (GTK_WINDOW (dock->_priv->window), GDK_WINDOW_TYPE_HINT_NORMAL); + gtk_window_set_skip_taskbar_hint (GTK_WINDOW (dock->_priv->window), + TRUE); + /* metacity ignores this */ gtk_window_move (GTK_WINDOW (dock->_priv->window), dock->_priv->float_x, @@ -510,7 +512,10 @@ gpointer user_data) { GdlDock *dock; - + + (void)pspec; + (void)user_data; + g_return_if_fail (object != NULL || GDL_IS_DOCK (object)); dock = GDL_DOCK (object); @@ -561,7 +566,7 @@ border_width = container->border_width; /* make request to root */ - if (dock->root && GTK_WIDGET_VISIBLE (dock->root)) + if (dock->root && gtk_widget_get_visible( GTK_WIDGET(dock->root) )) gtk_widget_size_request (GTK_WIDGET (dock->root), requisition); else { requisition->width = 0; @@ -597,8 +602,9 @@ allocation->width = MAX (1, allocation->width - 2 * border_width); allocation->height = MAX (1, allocation->height - 2 * border_width); - if (dock->root && GTK_WIDGET_VISIBLE (dock->root)) + if (dock->root && gtk_widget_get_visible( GTK_WIDGET(dock->root) )) { gtk_widget_size_allocate (GTK_WIDGET (dock->root), allocation); + } } static void @@ -616,7 +622,7 @@ if (dock->root) { child = GTK_WIDGET (dock->root); - if (GTK_WIDGET_VISIBLE (child) && !GTK_WIDGET_MAPPED (child)) + if (gtk_widget_get_visible (child) && !gtk_widget_get_mapped (child)) gtk_widget_map (child); } } @@ -636,7 +642,7 @@ if (dock->root) { child = GTK_WIDGET (dock->root); - if (GTK_WIDGET_VISIBLE (child) && GTK_WIDGET_MAPPED (child)) + if (gtk_widget_get_visible (child) && gtk_widget_get_mapped (child)) gtk_widget_unmap (child); } @@ -720,14 +726,14 @@ g_return_if_fail (widget != NULL); dock = GDL_DOCK (container); - was_visible = GTK_WIDGET_VISIBLE (widget); + was_visible = gtk_widget_get_visible (widget); if (GTK_WIDGET (dock->root) == widget) { dock->root = NULL; GDL_DOCK_OBJECT_UNSET_FLAGS (widget, GDL_DOCK_ATTACHED); gtk_widget_unparent (widget); - if (was_visible && GTK_WIDGET_VISIBLE (GTK_WIDGET (container))) + if (was_visible && gtk_widget_get_visible (GTK_WIDGET (container))) gtk_widget_queue_resize (GTK_WIDGET (dock)); } } @@ -740,6 +746,8 @@ { GdlDock *dock; + (void)include_internals; + g_return_if_fail (container != NULL); g_return_if_fail (GDL_IS_DOCK (container)); g_return_if_fail (callback != NULL); @@ -750,9 +758,10 @@ (*callback) (GTK_WIDGET (dock->root), callback_data); } -static GtkType +static GType gdl_dock_child_type (GtkContainer *container) { + (void)container; return GDL_TYPE_DOCK_ITEM; } @@ -927,15 +936,16 @@ /* Realize the item (create its corresponding GdkWindow) when GdlDock has been realized. */ - if (GTK_WIDGET_REALIZED (dock)) + if ( gtk_widget_get_realized( GTK_WIDGET(dock) )) { gtk_widget_realize (widget); - + } + /* Map the widget if it's visible and the parent is visible and has been mapped. This is done to make sure that the GdkWindow is visible. */ - if (GTK_WIDGET_VISIBLE (dock) && - GTK_WIDGET_VISIBLE (widget)) { - if (GTK_WIDGET_MAPPED (dock)) + if (gtk_widget_get_visible( GTK_WIDGET(dock) ) && + gtk_widget_get_visible (widget)) { + if (gtk_widget_get_mapped( GTK_WIDGET(dock) )) gtk_widget_map (widget); /* Make the widget resize. */ @@ -1023,8 +1033,11 @@ { GdlDock *dock = GDL_DOCK (object); - if (dock->_priv->floating) + (void)child; + + if (dock->_priv->floating) { gtk_window_present (GTK_WINDOW (dock->_priv->window)); + } } @@ -1078,14 +1091,10 @@ if (placement == GDL_DOCK_LEFT || placement == GDL_DOCK_RIGHT) { /* Check if dock_object touches center in terms of width */ if (GTK_WIDGET (dock)->allocation.width/2 > object_size.width) { - return GDL_DOCK_CENTER; + return GDL_DOCK_TOP; } - } else if (placement == GDL_DOCK_TOP || placement == GDL_DOCK_BOTTOM) { - /* Check if dock_object touches center in terms of height */ - if (GTK_WIDGET (dock)->allocation.height/2 > object_size.height) { - return GDL_DOCK_CENTER; - } - } + } + return placement; } @@ -1101,6 +1110,8 @@ gint level /* for debugging */) { GtkRequisition size_1, size_2; + + (void)level; g_return_val_if_fail (dock_item_1 != NULL, dock_item_2); g_return_val_if_fail (dock_item_2 != NULL, dock_item_1); @@ -1222,7 +1233,7 @@ /* Non-floating item. */ if (dock->root) { GdlDockPlacement local_placement; - GtkRequisition preferred_size; + /* GtkRequisition preferred_size; */ best_dock_item = gdl_dock_find_best_placement_item (GDL_DOCK_ITEM (dock->root), @@ -1262,10 +1273,11 @@ "floaty", y, NULL)); - if (GTK_WIDGET_VISIBLE (dock)) { + if (gtk_widget_get_visible( GTK_WIDGET(dock) )) { gtk_widget_show (GTK_WIDGET (new_dock)); - if (GTK_WIDGET_MAPPED (dock)) + if (gtk_widget_get_mapped( GTK_WIDGET(dock) )) { gtk_widget_map (GTK_WIDGET (new_dock)); + } /* Make the widget resize. */ gtk_widget_queue_resize (GTK_WIDGET (new_dock)); @@ -1339,7 +1351,7 @@ widget = GTK_WIDGET (dock); if (!dock->_priv->xor_gc) { - if (GTK_WIDGET_REALIZED (widget)) { + if (gtk_widget_get_realized (widget)) { GdkGCValues values; values.function = GDK_INVERT; diff -u gdl//gdl-dock.h /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock.h --- gdl//gdl-dock.h 2011-07-09 15:29:08.646633870 +0100 +++ /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock.h 2011-07-09 15:18:02.186633503 +0100 @@ -23,19 +23,19 @@ #define __GDL_DOCK_H__ #include -#include -#include -#include +#include "libgdl/gdl-dock-object.h" +#include "libgdl/gdl-dock-item.h" +#include "libgdl/gdl-dock-placeholder.h" G_BEGIN_DECLS /* standard macros */ #define GDL_TYPE_DOCK (gdl_dock_get_type ()) -#define GDL_DOCK(obj) (GTK_CHECK_CAST ((obj), GDL_TYPE_DOCK, GdlDock)) -#define GDL_DOCK_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK, GdlDockClass)) -#define GDL_IS_DOCK(obj) (GTK_CHECK_TYPE ((obj), GDL_TYPE_DOCK)) -#define GDL_IS_DOCK_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK)) -#define GDL_DOCK_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_DOCK, GdlDockClass)) +#define GDL_DOCK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK, GdlDock)) +#define GDL_DOCK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK, GdlDockClass)) +#define GDL_IS_DOCK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK)) +#define GDL_IS_DOCK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK)) +#define GDL_DOCK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK, GdlDockClass)) /* data types & structures */ typedef struct _GdlDock GdlDock; Only in gdl/: gdl-dock-item-button-image.lo diff -u gdl//gdl-dock-item.c /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-item.c --- gdl//gdl-dock-item.c 2011-07-09 15:29:08.636633870 +0100 +++ /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-item.c 2011-07-09 14:40:46.516632269 +0100 @@ -79,7 +79,10 @@ gboolean include_internals, GtkCallback callback, gpointer callback_data); -static GtkType gdl_dock_item_child_type (GtkContainer *container); +static GType gdl_dock_item_child_type (GtkContainer *container); + +static void gdl_dock_item_set_focus_child (GtkContainer *container, + GtkWidget *widget); static void gdl_dock_item_size_request (GtkWidget *widget, GtkRequisition *requisition); @@ -93,6 +96,9 @@ static gint gdl_dock_item_expose (GtkWidget *widget, GdkEventExpose *event); +static void gdl_dock_item_move_focus_child (GdlDockItem *item, + GtkDirectionType dir); + static gint gdl_dock_item_button_changed (GtkWidget *widget, GdkEventButton *event); static gint gdl_dock_item_motion (GtkWidget *widget, @@ -157,6 +163,7 @@ DOCK_DRAG_BEGIN, DOCK_DRAG_MOTION, DOCK_DRAG_END, + MOVE_FOCUS_CHILD, LAST_SIGNAL }; @@ -192,6 +199,40 @@ GDL_CLASS_BOILERPLATE (GdlDockItem, gdl_dock_item, GdlDockObject, GDL_TYPE_DOCK_OBJECT); static void +add_tab_bindings (GtkBindingSet *binding_set, + GdkModifierType modifiers, + GtkDirectionType direction) +{ + gtk_binding_entry_add_signal (binding_set, GDK_Tab, modifiers, + "move_focus_child", 1, + GTK_TYPE_DIRECTION_TYPE, direction); + gtk_binding_entry_add_signal (binding_set, GDK_KP_Tab, modifiers, + "move_focus_child", 1, + GTK_TYPE_DIRECTION_TYPE, direction); +} + +static void +add_arrow_bindings (GtkBindingSet *binding_set, + guint keysym, + GtkDirectionType direction) +{ + guint keypad_keysym = keysym - GDK_Left + GDK_KP_Left; + + gtk_binding_entry_add_signal (binding_set, keysym, 0, + "move_focus_child", 1, + GTK_TYPE_DIRECTION_TYPE, direction); + gtk_binding_entry_add_signal (binding_set, keysym, GDK_CONTROL_MASK, + "move_focus_child", 1, + GTK_TYPE_DIRECTION_TYPE, direction); + gtk_binding_entry_add_signal (binding_set, keysym, GDK_CONTROL_MASK, + "move_focus_child", 1, + GTK_TYPE_DIRECTION_TYPE, direction); + gtk_binding_entry_add_signal (binding_set, keypad_keysym, GDK_CONTROL_MASK, + "move_focus_child", 1, + GTK_TYPE_DIRECTION_TYPE, direction); +} + +static void gdl_dock_item_class_init (GdlDockItemClass *klass) { static gboolean style_initialized = FALSE; @@ -201,6 +242,7 @@ GtkWidgetClass *widget_class; GtkContainerClass *container_class; GdlDockObjectClass *object_class; + GtkBindingSet *binding_set; g_object_class = G_OBJECT_CLASS (klass); gtk_object_class = GTK_OBJECT_CLASS (klass); @@ -230,6 +272,7 @@ container_class->remove = gdl_dock_item_remove; container_class->forall = gdl_dock_item_forall; container_class->child_type = gdl_dock_item_child_type; + container_class->set_focus_child = gdl_dock_item_set_focus_child; object_class->is_compound = FALSE; @@ -258,7 +301,7 @@ g_object_class, PROP_RESIZE, g_param_spec_boolean ("resize", _("Resizable"), _("If set, the dock item can be resized when " - "docked in a paned"), + "docked in a panel"), TRUE, G_PARAM_READWRITE)); @@ -332,10 +375,38 @@ 1, G_TYPE_BOOLEAN); + gdl_dock_item_signals [MOVE_FOCUS_CHILD] = + g_signal_new ("move_focus_child", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, + G_STRUCT_OFFSET (GdlDockItemClass, move_focus_child), + NULL, /* accumulator */ + NULL, /* accu_data */ + gdl_marshal_VOID__ENUM, + G_TYPE_NONE, + 1, + GTK_TYPE_DIRECTION_TYPE); + + + /* key bindings */ + + binding_set = gtk_binding_set_by_class (klass); + + add_arrow_bindings (binding_set, GDK_Up, GTK_DIR_UP); + add_arrow_bindings (binding_set, GDK_Down, GTK_DIR_DOWN); + add_arrow_bindings (binding_set, GDK_Left, GTK_DIR_LEFT); + add_arrow_bindings (binding_set, GDK_Right, GTK_DIR_RIGHT); + + add_tab_bindings (binding_set, 0, GTK_DIR_TAB_FORWARD); + add_tab_bindings (binding_set, GDK_CONTROL_MASK, GTK_DIR_TAB_FORWARD); + add_tab_bindings (binding_set, GDK_SHIFT_MASK, GTK_DIR_TAB_BACKWARD); + add_tab_bindings (binding_set, GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_DIR_TAB_BACKWARD); + klass->has_grip = TRUE; klass->dock_drag_begin = NULL; klass->dock_drag_motion = NULL; klass->dock_drag_end = NULL; + klass->move_focus_child = gdl_dock_item_move_focus_child; klass->set_orientation = gdl_dock_item_real_set_orientation; if (!style_initialized) @@ -354,7 +425,8 @@ static void gdl_dock_item_instance_init (GdlDockItem *item) { - GTK_WIDGET_UNSET_FLAGS (GTK_WIDGET (item), GTK_NO_WINDOW); + gtk_widget_set_has_window (GTK_WIDGET (item), TRUE); + gtk_widget_set_can_focus (GTK_WIDGET (item), TRUE); item->child = NULL; @@ -571,7 +643,7 @@ item = GDL_DOCK_ITEM (container); if (item->_priv && widget == item->_priv->grip) { - gboolean grip_was_visible = GTK_WIDGET_VISIBLE (widget); + gboolean grip_was_visible = gtk_widget_get_visible (widget); gtk_widget_unparent (widget); item->_priv->grip = NULL; if (grip_was_visible) @@ -585,7 +657,7 @@ g_return_if_fail (item->child == widget); - was_visible = GTK_WIDGET_VISIBLE (widget); + was_visible = gtk_widget_get_visible (widget); gtk_widget_unparent (widget); item->child = NULL; @@ -611,7 +683,7 @@ (* callback) (item->child, callback_data); } -static GtkType +static GType gdl_dock_item_child_type (GtkContainer *container) { g_return_val_if_fail (GDL_IS_DOCK_ITEM (container), G_TYPE_NONE); @@ -623,6 +695,19 @@ } static void +gdl_dock_item_set_focus_child (GtkContainer *container, + GtkWidget *child) +{ + g_return_if_fail (GDL_IS_DOCK_ITEM (container)); + + if (GTK_CONTAINER_CLASS (parent_class)->set_focus_child) { + (* GTK_CONTAINER_CLASS (parent_class)->set_focus_child) (container, child); + } + + gdl_dock_item_showhide_grip (GDL_DOCK_ITEM (container)); +} + +static void gdl_dock_item_size_request (GtkWidget *widget, GtkRequisition *requisition) { @@ -695,14 +780,14 @@ item->_priv->preferred_height = -1; item->_priv->preferred_width = -1; - if (GTK_WIDGET_REALIZED (widget)) + if (gtk_widget_get_realized (widget)) gdk_window_move_resize (widget->window, widget->allocation.x, widget->allocation.y, widget->allocation.width, widget->allocation.height); - if (item->child && GTK_WIDGET_VISIBLE (item->child)) { + if (item->child && gtk_widget_get_visible (item->child)) { GtkAllocation child_allocation; int border_width; @@ -750,20 +835,20 @@ g_return_if_fail (widget != NULL); g_return_if_fail (GDL_IS_DOCK_ITEM (widget)); - GTK_WIDGET_SET_FLAGS (widget, GTK_MAPPED); + gtk_widget_set_mapped (widget, TRUE); item = GDL_DOCK_ITEM (widget); gdk_window_show (widget->window); if (item->child - && GTK_WIDGET_VISIBLE (item->child) - && !GTK_WIDGET_MAPPED (item->child)) + && gtk_widget_get_visible (item->child) + && !gtk_widget_get_mapped (item->child)) gtk_widget_map (item->child); if (item->_priv->grip - && GTK_WIDGET_VISIBLE (item->_priv->grip) - && !GTK_WIDGET_MAPPED (item->_priv->grip)) + && gtk_widget_get_visible (item->_priv->grip) + && !gtk_widget_get_mapped (item->_priv->grip)) gtk_widget_map (item->_priv->grip); } @@ -775,7 +860,7 @@ g_return_if_fail (widget != NULL); g_return_if_fail (GDL_IS_DOCK_ITEM (widget)); - GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED); + gtk_widget_set_mapped (widget, FALSE); item = GDL_DOCK_ITEM (widget); @@ -797,7 +882,7 @@ item = GDL_DOCK_ITEM (widget); - GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED); + gtk_widget_set_realized (widget, TRUE); /* widget window */ attributes.x = widget->allocation.x; @@ -820,7 +905,7 @@ widget->style = gtk_style_attach (widget->style, widget->window); gtk_style_set_background (widget->style, widget->window, - GTK_WIDGET_STATE (item)); + gtk_widget_get_state (GTK_WIDGET(item))); gdk_window_set_back_pixmap (widget->window, NULL, TRUE); if (item->child) @@ -834,13 +919,15 @@ gdl_dock_item_style_set (GtkWidget *widget, GtkStyle *previous_style) { + (void)previous_style; + g_return_if_fail (widget != NULL); g_return_if_fail (GDL_IS_DOCK_ITEM (widget)); - if (GTK_WIDGET_REALIZED (widget) && !GTK_WIDGET_NO_WINDOW (widget)) { + if (gtk_widget_get_realized (widget) && gtk_widget_get_has_window (widget)) { gtk_style_set_background (widget->style, widget->window, widget->state); - if (GTK_WIDGET_DRAWABLE (widget)) + if (gtk_widget_is_drawable (widget)) gdk_window_clear (widget->window); } } @@ -849,13 +936,9 @@ gdl_dock_item_paint (GtkWidget *widget, GdkEventExpose *event) { - GdlDockItem *item; - - item = GDL_DOCK_ITEM (widget); - gtk_paint_box (widget->style, widget->window, - GTK_WIDGET_STATE (widget), + gtk_widget_get_state (widget), GTK_SHADOW_NONE, &event->area, widget, "dockitem", @@ -870,7 +953,7 @@ g_return_val_if_fail (GDL_IS_DOCK_ITEM (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); - if (GTK_WIDGET_DRAWABLE (widget) && event->window == widget->window) { + if (gtk_widget_is_drawable (widget) && event->window == widget->window) { gdl_dock_item_paint (widget, event); GDL_CALL_PARENT_GBOOLEAN(GTK_WIDGET_CLASS, expose_event, (widget,event)); } @@ -878,6 +961,14 @@ return FALSE; } +static void +gdl_dock_item_move_focus_child (GdlDockItem *item, + GtkDirectionType dir) +{ + g_return_if_fail (GDL_IS_DOCK_ITEM (item)); + gtk_widget_child_focus (GTK_WIDGET (item->child), dir); +} + #define EVENT_IN_GRIP_EVENT_WINDOW(ev,gr) \ ((gr) != NULL && (ev)->window == GDL_DOCK_ITEM_GRIP (gr)->title_window) @@ -922,6 +1013,10 @@ /* Left mousebutton click on dockitem. */ if (!locked && event->button == 1 && event->type == GDK_BUTTON_PRESS) { + + if (!gdl_dock_item_or_child_has_focus (item)) + gtk_widget_grab_focus (GTK_WIDGET (item)); + /* Set in_drag flag, grab pointer and call begin drag operation. */ if (in_handle) { item->_priv->start_x = event->x; @@ -942,6 +1037,7 @@ if (GDL_DOCK_ITEM_IN_DRAG (item)) { /* User dropped widget somewhere. */ gdl_dock_item_drag_end (item, FALSE); + gtk_widget_grab_focus (GTK_WIDGET (item)); event_handled = TRUE; } else if (GDL_DOCK_ITEM_IN_PREDRAG (item)) { @@ -1014,7 +1110,6 @@ GdkEventKey *event) { gboolean event_handled = FALSE; - if (GDL_DOCK_ITEM_IN_DRAG (widget)) { if (event->keyval == GDK_Escape) { gdl_dock_item_drag_end (GDL_DOCK_ITEM (widget), TRUE); @@ -1091,25 +1186,37 @@ request->rect.width = alloc->width; request->rect.height = alloc->height; + GdlDockItemBehavior behavior = GDL_DOCK_ITEM(object)->behavior; + /* Calculate docking indicator rectangle size for new locations. Only do this when we're not over the item's current location. */ if (request->applicant != object) { switch (request->position) { case GDL_DOCK_TOP: + if (behavior & GDL_DOCK_ITEM_BEH_CANT_DOCK_TOP) + return FALSE; request->rect.height *= SPLIT_RATIO; break; case GDL_DOCK_BOTTOM: + if (behavior & GDL_DOCK_ITEM_BEH_CANT_DOCK_BOTTOM) + return FALSE; request->rect.y += request->rect.height * (1 - SPLIT_RATIO); request->rect.height *= SPLIT_RATIO; break; case GDL_DOCK_LEFT: + if (behavior & GDL_DOCK_ITEM_BEH_CANT_DOCK_LEFT) + return FALSE; request->rect.width *= SPLIT_RATIO; break; case GDL_DOCK_RIGHT: + if (behavior & GDL_DOCK_ITEM_BEH_CANT_DOCK_RIGHT) + return FALSE; request->rect.x += request->rect.width * (1 - SPLIT_RATIO); request->rect.width *= SPLIT_RATIO; break; case GDL_DOCK_CENTER: + if (behavior & GDL_DOCK_ITEM_BEH_CANT_DOCK_CENTER) + return FALSE; request->rect.x = request->rect.width * SPLIT_RATIO/2; request->rect.y = request->rect.height * SPLIT_RATIO/2; request->rect.width = (request->rect.width * @@ -1189,7 +1296,7 @@ } if (req.width > 1) g_object_set (object, "preferred-width", req.width, NULL); - if (req.height > 1) + if (req.height > 1 && object_req.height > req.height) g_object_set (object, "preferred-height", object_req.height - req.height, NULL); break; @@ -1325,7 +1432,7 @@ gtk_container_add (GTK_CONTAINER (parent), GTK_WIDGET (new_parent)); /* show automatic object */ - if (GTK_WIDGET_VISIBLE (object)) + if (gtk_widget_get_visible (GTK_WIDGET (object))) { gtk_widget_show (GTK_WIDGET (new_parent)); GDL_DOCK_OBJECT_UNSET_FLAGS (object, GDL_DOCK_IN_REFLOW); @@ -1359,15 +1466,18 @@ if (parent) gdl_dock_object_thaw (parent); + + } static void gdl_dock_item_detach_menu (GtkWidget *widget, GtkMenu *menu) { - GdlDockItem *item; - - item = GDL_DOCK_ITEM (widget); + GdlDockItem *item = GDL_DOCK_ITEM(widget); + + (void)menu; + item->_priv->menu = NULL; } @@ -1417,7 +1527,7 @@ { GdkCursor *fleur; - if (!GTK_WIDGET_REALIZED (item)) + if (!gtk_widget_get_realized (GTK_WIDGET (item))) gtk_widget_realize (GTK_WIDGET (item)); GDL_DOCK_ITEM_SET_FLAGS (item, GDL_DOCK_IN_DRAG); @@ -1450,12 +1560,13 @@ GdkEventButton *event, gpointer data) { - GdlDockItem *item; + GdlDockItem *item = GDL_DOCK_ITEM(data); - item = GDL_DOCK_ITEM (data); + (void)widget; - if (!GDL_DOCK_ITEM_NOT_LOCKED (item)) + if (!GDL_DOCK_ITEM_NOT_LOCKED (item)) { return; + } switch (event->button) { case 1: @@ -1487,11 +1598,10 @@ gdl_dock_item_hide_cb (GtkWidget *widget, GdlDockItem *item) { - GdlDockMaster *master; - + (void)widget; + g_return_if_fail (item != NULL); - master = GDL_DOCK_OBJECT_GET_MASTER (item); gdl_dock_item_hide_item (item); } @@ -1501,6 +1611,8 @@ { g_return_if_fail (item != NULL); + (void)widget; + gdl_dock_item_lock (item); } @@ -1510,6 +1622,8 @@ { g_return_if_fail (item != NULL); + (void)widget; + gdl_dock_item_unlock (item); } @@ -1543,7 +1657,7 @@ { item->orientation = orientation; - if (GTK_WIDGET_DRAWABLE (item)) + if (gtk_widget_is_drawable (GTK_WIDGET (item))) gtk_widget_queue_draw (GTK_WIDGET (item)); gtk_widget_queue_resize (GTK_WIDGET (item)); } @@ -1565,7 +1679,6 @@ NULL)); GDL_DOCK_OBJECT_UNSET_FLAGS (item, GDL_DOCK_AUTOMATIC); gdl_dock_item_set_tablabel (item, gtk_label_new (long_name)); - return GTK_WIDGET (item); } @@ -1589,6 +1702,27 @@ return GTK_WIDGET (item); } +GtkWidget * +gdl_dock_item_new_with_pixbuf_icon (const gchar *name, + const gchar *long_name, + const GdkPixbuf *pixbuf_icon, + GdlDockItemBehavior behavior) +{ + GdlDockItem *item; + + item = GDL_DOCK_ITEM (g_object_new (GDL_TYPE_DOCK_ITEM, + "name", name, + "long-name", long_name, + "pixbuf-icon", pixbuf_icon, + "behavior", behavior, + NULL)); + + GDL_DOCK_OBJECT_UNSET_FLAGS (item, GDL_DOCK_AUTOMATIC); + gdl_dock_item_set_tablabel (item, gtk_label_new (long_name)); + + return GTK_WIDGET (item); +} + /* convenient function (and to preserve source compat) */ void gdl_dock_item_dock_to (GdlDockItem *item, @@ -1596,6 +1730,8 @@ GdlDockPlacement position, gint docking_param) { + (void)docking_param; + g_return_if_fail (item != NULL); g_return_if_fail (item != target); g_return_if_fail (target != NULL || position == GDL_DOCK_FLOATING); @@ -1673,13 +1809,12 @@ NULL, item); g_object_set (item->_priv->tab_label, "item", NULL, NULL); } - gtk_widget_unref (item->_priv->tab_label); + g_object_unref (item->_priv->tab_label); item->_priv->tab_label = NULL; } if (tablabel) { - gtk_widget_ref (tablabel); - gtk_object_sink (GTK_OBJECT (tablabel)); + g_object_ref_sink (G_OBJECT (tablabel)); item->_priv->tab_label = tablabel; if (GDL_IS_DOCK_TABLABEL (tablabel)) { g_object_set (tablabel, "item", item, NULL); @@ -1774,8 +1909,7 @@ "floatx", x, "floaty", y, NULL)); - g_object_ref (item->_priv->ph); - gtk_object_sink (GTK_OBJECT (item->_priv->ph)); + g_object_ref_sink (item->_priv->ph); } gdl_dock_object_freeze (GDL_DOCK_OBJECT (item)); @@ -1879,8 +2013,7 @@ if (reference && GDL_DOCK_OBJECT_ATTACHED (reference)) { if (GDL_IS_DOCK_PLACEHOLDER (reference)) { - g_object_ref (reference); - gtk_object_sink (GTK_OBJECT (reference)); + g_object_ref_sink (reference); item->_priv->ph = GDL_DOCK_PLACEHOLDER (reference); } else { item->_priv->ph = GDL_DOCK_PLACEHOLDER ( @@ -1888,8 +2021,7 @@ "sticky", TRUE, "host", reference, NULL)); - g_object_ref (item->_priv->ph); - gtk_object_sink (GTK_OBJECT (item->_priv->ph)); + g_object_ref_sink (item->_priv->ph); } } } @@ -1908,6 +2040,26 @@ } +gboolean +gdl_dock_item_or_child_has_focus (GdlDockItem *item) +{ + GtkWidget *item_child; + gboolean item_or_child_has_focus; + + g_return_val_if_fail (GDL_IS_DOCK_ITEM (item), FALSE); + + for (item_child = GTK_CONTAINER (item)->focus_child; + item_child && GTK_IS_CONTAINER (item_child) && GTK_CONTAINER (item_child)->focus_child; + item_child = GTK_CONTAINER (item_child)->focus_child) ; + + item_or_child_has_focus = + (gtk_widget_has_focus (GTK_WIDGET (item)) || + (GTK_IS_WIDGET (item_child) && gtk_widget_has_focus (item_child))); + + return item_or_child_has_focus; +} + + /* ----- gtk orientation type exporter/importer ----- */ static void diff -u gdl//gdl-dock-item-grip.c /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-item-grip.c --- gdl//gdl-dock-item-grip.c 2011-07-09 15:29:08.616633870 +0100 +++ /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-item-grip.c 2011-07-09 14:40:46.516632269 +0100 @@ -17,9 +17,7 @@ #include "gdl-i18n.h" #include #include -#include -#include -#include +#include #include "gdl-dock-item.h" #include "gdl-dock-item-grip.h" #include "gdl-stock.h" @@ -35,7 +33,6 @@ struct _GdlDockItemGripPrivate { GtkWidget *close_button; GtkWidget *iconify_button; - GtkTooltips *tooltips; gboolean icon_pixbuf_valid; GdkPixbuf *icon_pixbuf; @@ -62,10 +59,10 @@ alloc_height = MAX (grip->_priv->close_button->allocation.height, alloc_height); alloc_height = MAX (grip->_priv->iconify_button->allocation.height, alloc_height); - if (GTK_WIDGET_VISIBLE (grip->_priv->close_button)) { + if (gtk_widget_get_visible (grip->_priv->close_button)) { area->width -= grip->_priv->close_button->allocation.width; } - if (GTK_WIDGET_VISIBLE (grip->_priv->iconify_button)) { + if (gtk_widget_get_visible (grip->_priv->iconify_button)) { area->width -= grip->_priv->iconify_button->allocation.width; } @@ -81,6 +78,7 @@ ensure_title_and_icon_pixbuf (GdlDockItemGrip *grip) { gchar *stock_id; + GdkPixbuf *pixbuf; g_return_if_fail (GDL_IS_DOCK_ITEM_GRIP (grip)); @@ -100,8 +98,18 @@ stock_id, GTK_ICON_SIZE_MENU, ""); g_free (stock_id); + grip->_priv->icon_pixbuf_valid = TRUE; + } + } + + /* retrieve pixbuf icon, if any */ + if (!grip->_priv->icon_pixbuf_valid) { + g_object_get (G_OBJECT (grip->item), "pixbuf-icon", &pixbuf, NULL); + + if (pixbuf) { + grip->_priv->icon_pixbuf = pixbuf; + grip->_priv->icon_pixbuf_valid = TRUE; } - grip->_priv->icon_pixbuf_valid = TRUE; } /* create layout: the actual text is reset at size_allocate */ @@ -119,6 +127,7 @@ GdlDockItemGrip *grip; GdkRectangle title_area; GdkRectangle expose_area; + GdkGC *bg_style; gint layout_width; gint layout_height; gint text_x; @@ -127,6 +136,16 @@ grip = GDL_DOCK_ITEM_GRIP (widget); gdl_dock_item_grip_get_title_area (grip, &title_area); + /* draw background, highlight it if the dock item or any of its + * descendants have focus */ + bg_style = (gdl_dock_item_or_child_has_focus (grip->item) ? + gtk_widget_get_style (widget)->dark_gc[widget->state] : + gtk_widget_get_style (widget)->mid_gc[widget->state]); + + + gdk_draw_rectangle (GDK_DRAWABLE (widget->window), bg_style, TRUE, + 1, 0, widget->allocation.width - 1, widget->allocation.height); + if (grip->_priv->icon_pixbuf) { GdkRectangle pixbuf_rect; @@ -182,6 +201,7 @@ { GdlDockItemGrip *grip; gboolean cursor; + (void)master; grip = GDL_DOCK_ITEM_GRIP (data); @@ -244,11 +264,6 @@ priv->icon_pixbuf = NULL; } - if (priv->tooltips) { - g_object_unref (priv->tooltips); - priv->tooltips = NULL; - } - if (grip->item) g_signal_handlers_disconnect_by_func (grip->item, gdl_dock_item_grip_item_notify, @@ -304,6 +319,7 @@ gdl_dock_item_grip_close_clicked (GtkWidget *widget, GdlDockItemGrip *grip) { + (void)widget; g_return_if_fail (grip->item != NULL); gdl_dock_item_hide_item (grip->item); @@ -313,6 +329,7 @@ gdl_dock_item_grip_iconify_clicked (GtkWidget *widget, GdlDockItemGrip *grip) { + (void)widget; g_return_if_fail (grip->item != NULL); gdl_dock_item_iconify_item (grip->item); @@ -327,7 +344,7 @@ { GtkWidget *image; - GTK_WIDGET_SET_FLAGS (grip, GTK_NO_WINDOW); + gtk_widget_set_has_window (GTK_WIDGET (grip), FALSE); grip->_priv = g_new0 (GdlDockItemGripPrivate, 1); grip->_priv->icon_pixbuf_valid = FALSE; @@ -338,7 +355,7 @@ grip->_priv->close_button = gtk_button_new (); gtk_widget_pop_composite_child (); - GTK_WIDGET_UNSET_FLAGS (grip->_priv->close_button, GTK_CAN_FOCUS); + gtk_widget_set_can_focus (grip->_priv->close_button, FALSE); gtk_widget_set_parent (grip->_priv->close_button, GTK_WIDGET (grip)); gtk_button_set_relief (GTK_BUTTON (grip->_priv->close_button), GTK_RELIEF_NONE); gtk_widget_show (grip->_priv->close_button); @@ -354,25 +371,22 @@ grip->_priv->iconify_button = gtk_button_new (); gtk_widget_pop_composite_child (); - GTK_WIDGET_UNSET_FLAGS (grip->_priv->iconify_button, GTK_CAN_FOCUS); + gtk_widget_set_can_focus (grip->_priv->iconify_button, FALSE); gtk_widget_set_parent (grip->_priv->iconify_button, GTK_WIDGET (grip)); gtk_button_set_relief (GTK_BUTTON (grip->_priv->iconify_button), GTK_RELIEF_NONE); gtk_widget_show (grip->_priv->iconify_button); - image = gtk_image_new_from_stock (GDL_STOCK_MENU_LEFT, GTK_ICON_SIZE_MENU); + image = gtk_image_new_from_stock (GDL_STOCK_MENU_RIGHT, GTK_ICON_SIZE_MENU); gtk_container_add (GTK_CONTAINER (grip->_priv->iconify_button), image); gtk_widget_show (image); g_signal_connect (G_OBJECT (grip->_priv->iconify_button), "clicked", G_CALLBACK (gdl_dock_item_grip_iconify_clicked), grip); - grip->_priv->tooltips = gtk_tooltips_new (); - g_object_ref (grip->_priv->tooltips); - gtk_object_sink (GTK_OBJECT (grip->_priv->tooltips)); - gtk_tooltips_set_tip (grip->_priv->tooltips, grip->_priv->iconify_button, - _("Iconify"), _("Iconify this dock")); - gtk_tooltips_set_tip (grip->_priv->tooltips, grip->_priv->close_button, - _("Close"), _("Close this dock")); + gtk_widget_set_tooltip_text (grip->_priv->iconify_button, + _("Iconify")); + gtk_widget_set_tooltip_text (grip->_priv->close_button, + _("Close")); } static void @@ -545,8 +559,9 @@ { GdlDockItemGrip *grip; GtkContainer *container; - GtkRequisition button_requisition = { 0, }; + GtkRequisition button_requisition; GtkAllocation child_allocation; + memset(&button_requisition, 0, sizeof(button_requisition)); g_return_if_fail (GDL_IS_DOCK_ITEM_GRIP (widget)); g_return_if_fail (allocation != NULL); @@ -614,6 +629,8 @@ gdl_dock_item_grip_add (GtkContainer *container, GtkWidget *widget) { + (void)container; + (void)widget; g_warning ("gtk_container_add not implemented for GdlDockItemGrip"); } @@ -621,6 +638,8 @@ gdl_dock_item_grip_remove (GtkContainer *container, GtkWidget *widget) { + (void)container; + (void)widget; g_warning ("gtk_container_remove not implemented for GdlDockItemGrip"); } @@ -642,9 +661,10 @@ } } -static GtkType +static GType gdl_dock_item_grip_child_type (GtkContainer *container) { + (void)container; return G_TYPE_NONE; } diff -u gdl//gdl-dock-item-grip.h /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-item-grip.h --- gdl//gdl-dock-item-grip.h 2011-07-09 15:29:08.616633870 +0100 +++ /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-item-grip.h 2011-07-09 15:18:02.206633503 +0100 @@ -13,22 +13,22 @@ #ifndef _GDL_DOCK_ITEM_GRIP_H_ #define _GDL_DOCK_ITEM_GRIP_H_ -#include -#include +#include +#include "libgdl/gdl-dock-item.h" G_BEGIN_DECLS #define GDL_TYPE_DOCK_ITEM_GRIP (gdl_dock_item_grip_get_type()) #define GDL_DOCK_ITEM_GRIP(obj) \ - (GTK_CHECK_CAST ((obj), GDL_TYPE_DOCK_ITEM_GRIP, GdlDockItemGrip)) + (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_ITEM_GRIP, GdlDockItemGrip)) #define GDL_DOCK_ITEM_GRIP_CLASS(klass) \ - (GTK_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_ITEM_GRIP, GdlDockItemGripClass)) + (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_ITEM_GRIP, GdlDockItemGripClass)) #define GDL_IS_DOCK_ITEM_GRIP(obj) \ - (GTK_CHECK_TYPE ((obj), GDL_TYPE_DOCK_ITEM_GRIP)) + (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_ITEM_GRIP)) #define GDL_IS_DOCK_ITEM_GRIP_CLASS(klass) \ - (GTK_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_ITEM_GRIP)) + (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_ITEM_GRIP)) #define GDL_DOCK_ITEM_GRIP_GET_CLASS(obj) \ - (GTK_CHECK_GET_CLASS ((obj), GDL_TYPE_DOCK_ITEM_GRIP, GdlDockItemGripClass)) + (G_TYPE_INSTANCE_GET_CLASS ((obj), GDL_TYPE_DOCK_ITEM_GRIP, GdlDockItemGripClass)) typedef struct _GdlDockItemGrip GdlDockItemGrip; typedef struct _GdlDockItemGripClass GdlDockItemGripClass; Only in gdl/: gdl-dock-item-grip.lo Only in /home/alex/devel/inkscape/trunk-checkout/src/libgdl/: gdl-dock-item-grip.o diff -u gdl//gdl-dock-item.h /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-item.h --- gdl//gdl-dock-item.h 2011-07-09 15:29:08.636633870 +0100 +++ /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-item.h 2011-07-09 15:18:02.226633503 +0100 @@ -30,17 +30,17 @@ #ifndef __GDL_DOCK_ITEM_H__ #define __GDL_DOCK_ITEM_H__ -#include +#include "libgdl/gdl-dock-object.h" G_BEGIN_DECLS /* standard macros */ #define GDL_TYPE_DOCK_ITEM (gdl_dock_item_get_type ()) -#define GDL_DOCK_ITEM(obj) (GTK_CHECK_CAST ((obj), GDL_TYPE_DOCK_ITEM, GdlDockItem)) -#define GDL_DOCK_ITEM_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_ITEM, GdlDockItemClass)) -#define GDL_IS_DOCK_ITEM(obj) (GTK_CHECK_TYPE ((obj), GDL_TYPE_DOCK_ITEM)) -#define GDL_IS_DOCK_ITEM_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_ITEM)) -#define GDL_DOCK_ITEM_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_DOCK_ITEM, GdlDockItemClass)) +#define GDL_DOCK_ITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_ITEM, GdlDockItem)) +#define GDL_DOCK_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_ITEM, GdlDockItemClass)) +#define GDL_IS_DOCK_ITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_ITEM)) +#define GDL_IS_DOCK_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_ITEM)) +#define GDL_DOCK_ITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK_ITEM, GdlDockItemClass)) /* data types & structures */ typedef enum { @@ -93,15 +93,17 @@ gboolean has_grip; /* virtuals */ - void (* dock_drag_begin) (GdlDockItem *item); - void (* dock_drag_motion) (GdlDockItem *item, - gint x, - gint y); - void (* dock_drag_end) (GdlDockItem *item, - gboolean cancelled); + void (* dock_drag_begin) (GdlDockItem *item); + void (* dock_drag_motion) (GdlDockItem *item, + gint x, + gint y); + void (* dock_drag_end) (GdlDockItem *item, + gboolean cancelled); + void (* move_focus_child) (GdlDockItem *item, + GtkDirectionType direction); - void (* set_orientation) (GdlDockItem *item, - GtkOrientation orientation); + void (* set_orientation) (GdlDockItem *item, + GtkOrientation orientation); }; /* additional macros */ @@ -143,6 +145,11 @@ const gchar *stock_id, GdlDockItemBehavior behavior); +GtkWidget *gdl_dock_item_new_with_pixbuf_icon (const gchar *name, + const gchar *long_name, + const GdkPixbuf *pixbuf_icon, + GdlDockItemBehavior behavior); + GType gdl_dock_item_get_type (void); void gdl_dock_item_dock_to (GdlDockItem *item, @@ -181,6 +188,7 @@ void gdl_dock_item_preferred_size (GdlDockItem *item, GtkRequisition *req); +gboolean gdl_dock_item_or_child_has_focus (GdlDockItem *item); G_END_DECLS Only in gdl/: gdl-dock-item.lo Only in /home/alex/devel/inkscape/trunk-checkout/src/libgdl/: gdl-dock-item.o Only in /home/alex/devel/inkscape/trunk-checkout/src/libgdl/: .gdl-dock-layout.c.swp diff -u gdl//gdl-dock-layout.h /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-layout.h --- gdl//gdl-dock-layout.h 2011-07-09 15:29:08.636633870 +0100 +++ /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-layout.h 2011-07-09 15:18:02.246633503 +0100 @@ -24,8 +24,8 @@ #define __GDL_DOCK_LAYOUT_H__ #include -#include -#include +#include "libgdl/gdl-dock-master.h" +#include "libgdl/gdl-dock.h" G_BEGIN_DECLS Only in gdl/: gdl-dock-layout.lo Only in gdl/: gdl-dock.lo diff -u gdl//gdl-dock-master.c /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-master.c --- gdl//gdl-dock-master.c 2011-07-09 15:29:08.636633870 +0100 +++ /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-master.c 2011-07-09 14:40:46.516632269 +0100 @@ -33,6 +33,9 @@ #include "gdl-dock-item.h" #include "libgdlmarshal.h" #include "libgdltypebuiltins.h" +#ifdef WIN32 +#include "gdl-win32.h" +#endif /* ----- Private prototypes ----- */ @@ -79,7 +82,8 @@ PROP_0, PROP_DEFAULT_TITLE, PROP_LOCKED, - PROP_SWITCHER_STYLE + PROP_SWITCHER_STYLE, + PROP_EXPANSION_DIRECTION }; enum { @@ -109,6 +113,8 @@ GHashTable *unlocked_items; GdlSwitcherStyle switcher_style; + + GdlDockExpansionDirection expansion_direction; }; #define COMPUTE_LOCKED(master) \ @@ -157,6 +163,15 @@ GDL_SWITCHER_STYLE_BOTH, G_PARAM_READWRITE)); + g_object_class_install_property ( + g_object_class, PROP_EXPANSION_DIRECTION, + g_param_spec_enum ("expand-direction", _("Expand direction"), + _("Allow the master's dock items to expand their container " + "dock objects in the given direction"), + GDL_TYPE_EXPANSION_DIRECTION, + GDL_DOCK_EXPANSION_DIRECTION_NONE, + G_PARAM_READWRITE)); + master_signals [LAYOUT_CHANGED] = g_signal_new ("layout-changed", G_TYPE_FROM_CLASS (klass), @@ -183,6 +198,7 @@ master->_priv = g_new0 (GdlDockMasterPrivate, 1); master->_priv->number = 1; master->_priv->switcher_style = GDL_SWITCHER_STYLE_BOTH; + master->_priv->expansion_direction = GDL_DOCK_EXPANSION_DIRECTION_NONE; master->_priv->locked_items = g_hash_table_new (g_direct_hash, g_direct_equal); master->_priv->unlocked_items = g_hash_table_new (g_direct_hash, g_direct_equal); } @@ -246,6 +262,7 @@ gpointer value, GSList **slist) { + (void)key; *slist = g_slist_prepend (*slist, value); } @@ -359,6 +376,9 @@ case PROP_SWITCHER_STYLE: gdl_dock_master_set_switcher_style (master, g_value_get_enum (value)); break; + case PROP_EXPANSION_DIRECTION: + master->_priv->expansion_direction = g_value_get_enum (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -383,6 +403,9 @@ case PROP_SWITCHER_STYLE: g_value_set_enum (value, master->_priv->switcher_style); break; + case PROP_EXPANSION_DIRECTION: + g_value_set_enum (value, master->_priv->expansion_direction); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -567,7 +590,7 @@ my_request.rect.width == request->rect.width && my_request.rect.height == request->rect.height && dock == master->_priv->rect_owner)) { - + /* erase the previous rectangle */ if (master->_priv->rect_drawn) gdl_dock_master_xor_rect (master); @@ -587,6 +610,7 @@ gpointer value, gpointer user_data) { + (void)key; struct { GFunc function; gpointer user_data; @@ -625,8 +649,20 @@ window, &values, GDK_GC_FUNCTION | GDK_GC_SUBWINDOW); }; +#ifdef WIN32 + GdkLineStyle lineStyle = GDK_LINE_ON_OFF_DASH; + if (is_os_vista()) + { + // On Vista the dash-line is increadibly slow to draw, it takes several minutes to draw the tracking lines + // With GDK_LINE_SOLID it is parts of a second + // No performance issue on WinXP + lineStyle = GDK_LINE_SOLID; + } +#else + GdkLineStyle lineStyle = GDK_LINE_ON_OFF_DASH; +#endif gdk_gc_set_line_attributes (master->_priv->root_xor_gc, 1, - GDK_LINE_ON_OFF_DASH, + lineStyle, GDK_CAP_NOT_LAST, GDK_JOIN_BEVEL); @@ -683,7 +719,11 @@ gpointer user_data) { GdlDockMaster *master = user_data; - + + (void)object; + (void)position; + (void)other_data; + g_return_if_fail (requestor && GDL_IS_DOCK_OBJECT (requestor)); g_return_if_fail (master && GDL_IS_DOCK_MASTER (master)); @@ -705,6 +745,8 @@ { GdlDockMaster *master = user_data; + (void)recursive; + g_return_if_fail (object && GDL_IS_DOCK_OBJECT (object)); g_return_if_fail (master && GDL_IS_DOCK_MASTER (master)); @@ -725,6 +767,8 @@ gint locked = COMPUTE_LOCKED (master); gboolean item_locked; + (void)pspec; + g_object_get (object, "locked", &item_locked, NULL); if (item_locked) { @@ -763,8 +807,7 @@ master, object, object->name, found_object); } else { - g_object_ref (object); - gtk_object_sink (GTK_OBJECT (object)); + g_object_ref_sink (object); g_hash_table_insert (master->dock_objects, g_strdup (object->name), object); } } diff -u gdl//gdl-dock-master.h /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-master.h --- gdl//gdl-dock-master.h 2011-07-09 15:29:08.636633870 +0100 +++ /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-master.h 2011-07-09 15:18:02.246633503 +0100 @@ -25,19 +25,19 @@ #define __GDL_DOCK_MASTER_H__ #include -#include -#include +#include +#include "libgdl/gdl-dock-object.h" G_BEGIN_DECLS /* standard macros */ #define GDL_TYPE_DOCK_MASTER (gdl_dock_master_get_type ()) -#define GDL_DOCK_MASTER(obj) (GTK_CHECK_CAST ((obj), GDL_TYPE_DOCK_MASTER, GdlDockMaster)) -#define GDL_DOCK_MASTER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_MASTER, GdlDockMasterClass)) -#define GDL_IS_DOCK_MASTER(obj) (GTK_CHECK_TYPE ((obj), GDL_TYPE_DOCK_MASTER)) -#define GDL_IS_DOCK_MASTER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_MASTER)) -#define GDL_DOCK_MASTER_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_DOCK_MASTER, GdlDockMasterClass)) +#define GDL_DOCK_MASTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_MASTER, GdlDockMaster)) +#define GDL_DOCK_MASTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_MASTER, GdlDockMasterClass)) +#define GDL_IS_DOCK_MASTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_MASTER)) +#define GDL_IS_DOCK_MASTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_MASTER)) +#define GDL_DOCK_MASTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK_MASTER, GdlDockMasterClass)) /* data types & structures */ typedef struct _GdlDockMaster GdlDockMaster; Only in gdl/: gdl-dock-master.lo Only in /home/alex/devel/inkscape/trunk-checkout/src/libgdl/: gdl-dock-master.o diff -u gdl//gdl-dock-notebook.c /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-notebook.c --- gdl//gdl-dock-notebook.c 2011-07-09 15:29:08.636633870 +0100 +++ /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-notebook.c 2011-07-09 14:40:46.516632269 +0100 @@ -60,7 +60,7 @@ GValue *other_data); static void gdl_dock_notebook_switch_page_cb (GtkNotebook *nb, - GtkNotebookPage *page, + GtkWidget *page, gint page_num, gpointer data); @@ -157,6 +157,7 @@ gpointer user_data) { g_return_if_fail (user_data != NULL && GDL_IS_DOCK_NOTEBOOK (user_data)); + (void)g_object; /* chain the notify signal */ g_object_notify (G_OBJECT (user_data), pspec->name); @@ -167,10 +168,12 @@ GdkEventButton *event, gpointer user_data) { - if (event->type == GDK_BUTTON_PRESS) + (void)widget; + if (event->type == GDK_BUTTON_PRESS) { GDL_DOCK_ITEM_SET_FLAGS (user_data, GDL_DOCK_USER_ACTION); - else + } else { GDL_DOCK_ITEM_UNSET_FLAGS (user_data, GDL_DOCK_USER_ACTION); + } return FALSE; } @@ -261,12 +264,13 @@ static void gdl_dock_notebook_switch_page_cb (GtkNotebook *nb, - GtkNotebookPage *page, + GtkWidget *page, gint page_num, gpointer data) { GdlDockNotebook *notebook; GtkWidget *tablabel; + (void)page_num; notebook = GDL_DOCK_NOTEBOOK (data); @@ -281,7 +285,7 @@ /* activate new label */ tablabel = gtk_notebook_get_tab_label ( - nb, gtk_notebook_get_nth_page (nb, page_num)); + nb, page); if (tablabel && GDL_IS_DOCK_TABLABEL (tablabel)) gdl_dock_tablabel_activate (GDL_DOCK_TABLABEL (tablabel)); @@ -332,6 +336,7 @@ static GType gdl_dock_notebook_child_type (GtkContainer *container) { + (void)container; return GDL_TYPE_DOCK_ITEM; } @@ -383,11 +388,12 @@ GdlDockItem *item = GDL_DOCK_ITEM (object); GdlDockItem *requestor_item = GDL_DOCK_ITEM (requestor); gchar *long_name, *stock_id; + GdkPixbuf *pixbuf_icon; GtkWidget *label; gint position = -1; g_object_get (requestor_item, "long-name", &long_name, - "stock-id", &stock_id, NULL); + "stock-id", &stock_id, "pixbuf-icon", &pixbuf_icon, NULL); label = gdl_dock_item_get_tablabel (requestor_item); if (!label) { label = gtk_label_new (long_name); @@ -407,7 +413,7 @@ position = gdl_switcher_insert_page (GDL_SWITCHER (item->child), GTK_WIDGET (requestor), label, long_name, long_name, - stock_id, position); + stock_id, pixbuf_icon, position); GDL_DOCK_OBJECT_SET_FLAGS (requestor, GDL_DOCK_ATTACHED); diff -u gdl//gdl-dock-notebook.h /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-notebook.h --- gdl//gdl-dock-notebook.h 2011-07-09 15:29:08.636633870 +0100 +++ /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-notebook.h 2011-07-09 15:18:02.256633503 +0100 @@ -22,17 +22,17 @@ #ifndef __GDL_DOCK_NOTEBOOK_H__ #define __GDL_DOCK_NOTEBOOK_H__ -#include +#include "libgdl/gdl-dock-item.h" G_BEGIN_DECLS /* standard macros */ #define GDL_TYPE_DOCK_NOTEBOOK (gdl_dock_notebook_get_type ()) -#define GDL_DOCK_NOTEBOOK(obj) (GTK_CHECK_CAST ((obj), GDL_TYPE_DOCK_NOTEBOOK, GdlDockNotebook)) -#define GDL_DOCK_NOTEBOOK_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_NOTEBOOK, GdlDockNotebookClass)) -#define GDL_IS_DOCK_NOTEBOOK(obj) (GTK_CHECK_TYPE ((obj), GDL_TYPE_DOCK_NOTEBOOK)) -#define GDL_IS_DOCK_NOTEBOOK_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_NOTEBOOK)) -#define GDL_DOCK_NOTEBOOK_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_DOCK_NOTEBOOK, GdlDockNotebookClass)) +#define GDL_DOCK_NOTEBOOK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_NOTEBOOK, GdlDockNotebook)) +#define GDL_DOCK_NOTEBOOK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_NOTEBOOK, GdlDockNotebookClass)) +#define GDL_IS_DOCK_NOTEBOOK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_NOTEBOOK)) +#define GDL_IS_DOCK_NOTEBOOK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_NOTEBOOK)) +#define GDL_DOCK_NOTEBOOK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK_NOTEBOOK, GdlDockNotebookClass)) /* data types & structures */ typedef struct _GdlDockNotebook GdlDockNotebook; Only in gdl/: gdl-dock-notebook.lo Only in /home/alex/devel/inkscape/trunk-checkout/src/libgdl/: gdl-dock-notebook.o Only in /home/alex/devel/inkscape/trunk-checkout/src/libgdl/: gdl-dock.o diff -u gdl//gdl-dock-object.c /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-object.c --- gdl//gdl-dock-object.c 2011-07-09 15:29:08.636633870 +0100 +++ /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-object.c 2011-07-09 14:40:46.516632269 +0100 @@ -81,6 +81,7 @@ PROP_NAME, PROP_LONG_NAME, PROP_STOCK_ID, + PROP_PIXBUF_ICON, PROP_MASTER, PROP_EXPORT_PROPERTIES }; @@ -137,6 +138,12 @@ G_PARAM_READWRITE)); g_object_class_install_property ( + g_object_class, PROP_PIXBUF_ICON, + g_param_spec_pointer ("pixbuf-icon", _("Pixbuf Icon"), + _("Pixbuf icon for the dock object"), + G_PARAM_READWRITE)); + + g_object_class_install_property ( g_object_class, PROP_MASTER, g_param_spec_object ("master", _("Dock master"), _("Dock master this dock object is bound to"), @@ -213,6 +220,9 @@ g_free (object->stock_id); object->stock_id = g_value_dup_string (value); break; + case PROP_PIXBUF_ICON: + object->pixbuf_icon = g_value_get_pointer (value); + break; case PROP_MASTER: if (g_value_get_object (value)) gdl_dock_object_bind (object, g_value_get_object (value)); @@ -243,6 +253,9 @@ case PROP_STOCK_ID: g_value_set_string (value, object->stock_id); break; + case PROP_PIXBUF_ICON: + g_value_set_pointer (value, object->pixbuf_icon); + break; case PROP_MASTER: g_value_set_object (value, object->master); break; @@ -267,6 +280,7 @@ object->long_name = NULL; g_free (object->stock_id); object->stock_id = NULL; + object->pixbuf_icon = NULL; GDL_CALL_PARENT (G_OBJECT_CLASS, finalize, (g_object)); } @@ -275,6 +289,7 @@ gdl_dock_object_foreach_detach (GdlDockObject *object, gpointer user_data) { + (void)user_data; gdl_dock_object_detach (object, TRUE); } @@ -425,7 +440,7 @@ /* sink the widget, so any automatic floating widget is destroyed */ - gtk_object_sink (GTK_OBJECT (object)); + g_object_ref_sink (object); /* don't reenter */ object->reduce_pending = FALSE; gdl_dock_object_thaw (object); @@ -441,6 +456,9 @@ GdlDockPlacement position, GValue *other_data) { + (void)requestor; + (void)position; + (void)other_data; g_warning (_("Call to gdl_dock_object_dock in a dock object %p " "(object type is %s) which hasn't implemented this method"), object, G_OBJECT_TYPE_NAME (object)); @@ -450,6 +468,7 @@ gdl_dock_object_real_present (GdlDockObject *object, GdlDockObject *child) { + (void)child; gtk_widget_show (GTK_WIDGET (object)); } @@ -551,7 +570,7 @@ GdlDockRequest *request) { g_return_val_if_fail (object != NULL && request != NULL, FALSE); - + return GDL_CALL_VIRTUAL_WITH_DEFAULT (object, GDL_DOCK_OBJECT_GET_CLASS, dock_request, @@ -843,7 +862,7 @@ static GType our_type = 0; if (our_type == 0) { - GTypeInfo tinfo = { 0, }; + GTypeInfo tinfo = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; our_type = g_type_register_static (G_TYPE_STRING, "GdlDockParam", &tinfo, 0); /* register known transform functions */ diff -u gdl//gdl-dock-object.h /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-object.h --- gdl//gdl-dock-object.h 2011-07-09 15:29:08.646633870 +0100 +++ /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-object.h 2011-07-09 15:18:02.256633503 +0100 @@ -24,17 +24,17 @@ #ifndef __GDL_DOCK_OBJECT_H__ #define __GDL_DOCK_OBJECT_H__ -#include +#include G_BEGIN_DECLS /* standard macros */ #define GDL_TYPE_DOCK_OBJECT (gdl_dock_object_get_type ()) -#define GDL_DOCK_OBJECT(obj) (GTK_CHECK_CAST ((obj), GDL_TYPE_DOCK_OBJECT, GdlDockObject)) -#define GDL_DOCK_OBJECT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_OBJECT, GdlDockObjectClass)) -#define GDL_IS_DOCK_OBJECT(obj) (GTK_CHECK_TYPE ((obj), GDL_TYPE_DOCK_OBJECT)) -#define GDL_IS_DOCK_OBJECT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_OBJECT)) -#define GDL_DOCK_OBJECT_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_DOCK_OBJECT, GdlDockObjectClass)) +#define GDL_DOCK_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_OBJECT, GdlDockObject)) +#define GDL_DOCK_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_OBJECT, GdlDockObjectClass)) +#define GDL_IS_DOCK_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_OBJECT)) +#define GDL_IS_DOCK_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_OBJECT)) +#define GDL_DOCK_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK_OBJECT, GdlDockObjectClass)) /* data types & structures */ typedef enum { @@ -66,6 +66,14 @@ GDL_DOCK_FLOATING } GdlDockPlacement; +typedef enum { + GDL_DOCK_EXPANSION_DIRECTION_NONE = 0, + GDL_DOCK_EXPANSION_DIRECTION_UP, + GDL_DOCK_EXPANSION_DIRECTION_DOWN, + GDL_DOCK_EXPANSION_DIRECTION_LEFT, + GDL_DOCK_EXPANSION_DIRECTION_RIGHT +} GdlDockExpansionDirection; + typedef struct _GdlDockObject GdlDockObject; typedef struct _GdlDockObjectClass GdlDockObjectClass; typedef struct _GdlDockRequest GdlDockRequest; @@ -88,6 +96,7 @@ gchar *name; gchar *long_name; gchar *stock_id; + GdkPixbuf *pixbuf_icon; gboolean reduce_pending; }; Only in gdl/: gdl-dock-object.lo Only in /home/alex/devel/inkscape/trunk-checkout/src/libgdl/: gdl-dock-object.o diff -u gdl//gdl-dock-paned.c /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-paned.c --- gdl//gdl-dock-paned.c 2011-07-09 15:29:08.646633870 +0100 +++ /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-paned.c 2011-07-09 14:40:46.516632269 +0100 @@ -27,8 +27,7 @@ #include "gdl-i18n.h" #include -#include -#include +#include #include "gdl-tools.h" #include "gdl-dock-paned.h" @@ -140,6 +139,64 @@ gdl_dock_paned_instance_init (GdlDockPaned *paned) { paned->position_changed = FALSE; + paned->in_drag = FALSE; + paned->last_drag_position = -1; +} + +static void +gdl_dock_paned_resize_paned_ancestors (GdlDockPaned *paned, + GdlDockExpansionDirection expansion_direction, + gint diff) +{ + GtkWidget *widget, *last_widget; + + g_return_if_fail (GDL_IS_DOCK_PANED (paned)); + + last_widget = GTK_WIDGET (paned); + + /* make sure resizing only can be done in the drag direction */ + if (expansion_direction == GDL_DOCK_EXPANSION_DIRECTION_NONE || + ((expansion_direction == GDL_DOCK_EXPANSION_DIRECTION_DOWN || + expansion_direction == GDL_DOCK_EXPANSION_DIRECTION_UP) && + !GTK_IS_VPANED (GDL_DOCK_ITEM (paned)->child)) || + ((expansion_direction == GDL_DOCK_EXPANSION_DIRECTION_LEFT || + expansion_direction == GDL_DOCK_EXPANSION_DIRECTION_RIGHT) && + !GTK_IS_HPANED (GDL_DOCK_ITEM (paned)->child))) + { + return; + } + + for (widget = GTK_WIDGET (paned)->parent; widget != NULL; + widget = widget->parent) { + + if (GTK_IS_PANED (widget)) { + + GtkPaned *paned = GTK_PANED (widget); + + if (last_widget == paned->child1) { + + if (!GDL_IS_DOCK_OBJECT(widget->parent)) { + GtkRequisition requisition; + GtkAllocation allocation = paned->child1->allocation; + + gtk_widget_size_request (paned->child1, &requisition); + + gint new_height = + (allocation.height > requisition.height && diff > 0 ? + allocation.height : requisition.height) + diff; + + gtk_widget_set_size_request (paned->child1, -1, new_height); + } + + gtk_paned_set_position (paned, gtk_paned_get_position (paned) + diff); + } + + } else if (!GDL_IS_DOCK_OBJECT (widget)) { + break; + } + + last_widget = widget; + } } static void @@ -148,7 +205,8 @@ gpointer user_data) { GdlDockPaned *paned; - + (void)g_object; + g_return_if_fail (user_data != NULL && GDL_IS_DOCK_PANED (user_data)); /* chain the notification to the GdlDockPaned */ @@ -156,8 +214,40 @@ paned = GDL_DOCK_PANED (user_data); - if (GDL_DOCK_ITEM_USER_ACTION (user_data) && !strcmp (pspec->name, "position")) + if (GDL_DOCK_ITEM_USER_ACTION (user_data) && !strcmp (pspec->name, "position")) { + + GdlDockExpansionDirection expansion_direction; + paned->position_changed = TRUE; + + g_object_get (GDL_DOCK_OBJECT(paned)->master, + "expand-direction", &expansion_direction, + NULL); + + switch (expansion_direction) { + case GDL_DOCK_EXPANSION_DIRECTION_DOWN: + if (paned->in_drag) { + gint max_position, position, diff; + g_object_get (GDL_DOCK_ITEM (paned)->child, + "max-position", &max_position, + "position", &position, + NULL); + + diff = position - paned->last_drag_position; + paned->last_drag_position = position; + + if (diff > 0 && position == max_position) { + gdl_dock_paned_resize_paned_ancestors (paned, expansion_direction, diff + 1); + } else { + gdl_dock_paned_resize_paned_ancestors (paned, expansion_direction, diff); + } + + } + break; + default: + ; + } + } } static gboolean @@ -166,13 +256,48 @@ gpointer user_data) { GdlDockPaned *paned; + (void)widget; g_return_val_if_fail (user_data != NULL && GDL_IS_DOCK_PANED (user_data), FALSE); paned = GDL_DOCK_PANED (user_data); if (event->button == 1) { - if (event->type == GDK_BUTTON_PRESS) + if (event->type == GDK_BUTTON_PRESS) { + + GdlDockExpansionDirection expansion_direction; + GDL_DOCK_ITEM_SET_FLAGS (user_data, GDL_DOCK_USER_ACTION); + + paned->in_drag = TRUE; + + g_object_get (GDL_DOCK_OBJECT (paned)->master, + "expand-direction", &expansion_direction, + NULL); + + switch (expansion_direction) { + case GDL_DOCK_EXPANSION_DIRECTION_DOWN: + { + gint max_position, position; + g_object_get (GDL_DOCK_ITEM (paned)->child, + "max-position", &max_position, + "position", &position, + NULL); + + paned->last_drag_position = position; + /* expand the paned's ancestors a bit if the separator is in max position + * to allow dragging in all directions */ + if (position == max_position) + gdl_dock_paned_resize_paned_ancestors (paned, expansion_direction, 1); + break; + } + default: + ; + } + } + else if (event->type == GDK_BUTTON_RELEASE) { + paned->last_drag_position = -1; + paned->in_drag = FALSE; + } else { GDL_DOCK_ITEM_UNSET_FLAGS (user_data, GDL_DOCK_USER_ACTION); if (paned->position_changed) { @@ -570,7 +695,7 @@ gtk_paned_pack1 (paned, GTK_WIDGET (requestor), hresize, FALSE); done = TRUE; } else if (!paned->child2 && position == GDL_DOCK_BOTTOM) { - gtk_paned_pack2 (paned, GTK_WIDGET (requestor), hresize, FALSE); + gtk_paned_pack2 (paned, GTK_WIDGET (requestor), TRUE, FALSE); done = TRUE; } break; @@ -581,7 +706,7 @@ if (!done) { /* this will create another paned and reparent us there */ GDL_CALL_PARENT (GDL_DOCK_OBJECT_CLASS, dock, (object, requestor, position, - other_data)); + other_data)); } else { gdl_dock_item_show_grip (GDL_DOCK_ITEM (requestor)); @@ -671,4 +796,3 @@ return GTK_WIDGET (paned); } - diff -u gdl//gdl-dock-paned.h /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-paned.h --- gdl//gdl-dock-paned.h 2011-07-09 15:29:08.646633870 +0100 +++ /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-paned.h 2011-07-09 15:18:02.256633503 +0100 @@ -24,17 +24,17 @@ #ifndef __GDL_DOCK_PANED_H__ #define __GDL_DOCK_PANED_H__ -#include +#include "libgdl/gdl-dock-item.h" G_BEGIN_DECLS /* standard macros */ #define GDL_TYPE_DOCK_PANED (gdl_dock_paned_get_type ()) -#define GDL_DOCK_PANED(obj) (GTK_CHECK_CAST ((obj), GDL_TYPE_DOCK_PANED, GdlDockPaned)) -#define GDL_DOCK_PANED_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_PANED, GdlDockPanedClass)) -#define GDL_IS_DOCK_PANED(obj) (GTK_CHECK_TYPE ((obj), GDL_TYPE_DOCK_PANED)) -#define GDL_IS_DOCK_PANED_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_PANED)) -#define GDL_DOCK_PANED_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GDL_TYE_DOCK_PANED, GdlDockPanedClass)) +#define GDL_DOCK_PANED(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_PANED, GdlDockPaned)) +#define GDL_DOCK_PANED_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_PANED, GdlDockPanedClass)) +#define GDL_IS_DOCK_PANED(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_PANED)) +#define GDL_IS_DOCK_PANED_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_PANED)) +#define GDL_DOCK_PANED_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDL_TYE_DOCK_PANED, GdlDockPanedClass)) /* data types & structures */ typedef struct _GdlDockPaned GdlDockPaned; @@ -44,6 +44,8 @@ GdlDockItem dock_item; gboolean position_changed; + gboolean in_drag; + gint last_drag_position; }; struct _GdlDockPanedClass { Only in gdl/: gdl-dock-paned.lo Only in /home/alex/devel/inkscape/trunk-checkout/src/libgdl/: gdl-dock-paned.o diff -u gdl//gdl-dock-placeholder.c /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-placeholder.c --- gdl//gdl-dock-placeholder.c 2011-07-09 15:29:08.646633870 +0100 +++ /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-placeholder.c 2011-07-09 14:40:46.516632269 +0100 @@ -215,8 +215,9 @@ static void gdl_dock_placeholder_instance_init (GdlDockPlaceholder *ph) { - GTK_WIDGET_SET_FLAGS (ph, GTK_NO_WINDOW); - GTK_WIDGET_UNSET_FLAGS (ph, GTK_CAN_FOCUS); + gtk_widget_set_has_window (GTK_WIDGET (ph), FALSE); + + gtk_widget_set_can_focus (GTK_WIDGET (ph), FALSE); ph->_priv = g_new0 (GdlDockPlaceholderPrivate, 1); } @@ -333,7 +334,7 @@ GtkWidget *widget) { GdlDockPlaceholder *ph; - GdlDockPlacement pos = GDL_DOCK_CENTER; /* default position */ + GdlDockPlacement pos = GDL_DOCK_TOP; /* default position */ g_return_if_fail (GDL_IS_DOCK_PLACEHOLDER (container)); g_return_if_fail (GDL_IS_DOCK_ITEM (widget)); @@ -351,6 +352,7 @@ gboolean recursive) { GdlDockPlaceholder *ph = GDL_DOCK_PLACEHOLDER (object); + (void)recursive; /* disconnect handlers */ disconnect_host (ph); @@ -365,6 +367,7 @@ static void gdl_dock_placeholder_reduce (GdlDockObject *object) { + (void)object; /* placeholders are not reduced */ return; } @@ -491,7 +494,7 @@ GdlDockObject *toplevel; if (!gdl_dock_object_is_bound (GDL_DOCK_OBJECT (ph))) { - g_warning (_("Attempt to dock a dock object to an unbound placeholder")); + g_warning ("%s",_("Attempt to dock a dock object to an unbound placeholder")); return; } @@ -531,6 +534,8 @@ gdl_dock_placeholder_present (GdlDockObject *object, GdlDockObject *child) { + (void)object; + (void)child; /* do nothing */ return; } @@ -573,7 +578,8 @@ GObject *old_object) { GdlDockPlaceholder *ph; - + (void)old_object; + g_return_if_fail (data != NULL && GDL_IS_DOCK_PLACEHOLDER (data)); ph = GDL_DOCK_PLACEHOLDER (data); @@ -605,6 +611,7 @@ { GdlDockPlaceholder *ph; GdlDockObject *new_host, *obj; + (void)recursive; g_return_if_fail (user_data != NULL && GDL_IS_DOCK_PLACEHOLDER (user_data)); @@ -734,7 +741,9 @@ { GdlDockPlacement pos = GDL_DOCK_NONE; GdlDockPlaceholder *ph; - + (void)position; + (void)other_data; + g_return_if_fail (user_data != NULL && GDL_IS_DOCK_PLACEHOLDER (user_data)); ph = GDL_DOCK_PLACEHOLDER (user_data); g_return_if_fail (ph->_priv->host == object); diff -u gdl//gdl-dock-placeholder.h /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-placeholder.h --- gdl//gdl-dock-placeholder.h 2011-07-09 15:29:08.646633870 +0100 +++ /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-placeholder.h 2011-07-09 15:18:02.256633503 +0100 @@ -24,17 +24,17 @@ #ifndef __GDL_DOCK_PLACEHOLDER_H__ #define __GDL_DOCK_PLACEHOLDER_H__ -#include +#include "libgdl/gdl-dock-object.h" G_BEGIN_DECLS /* standard macros */ #define GDL_TYPE_DOCK_PLACEHOLDER (gdl_dock_placeholder_get_type ()) -#define GDL_DOCK_PLACEHOLDER(obj) (GTK_CHECK_CAST ((obj), GDL_TYPE_DOCK_PLACEHOLDER, GdlDockPlaceholder)) -#define GDL_DOCK_PLACEHOLDER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_PLACEHOLDER, GdlDockPlaceholderClass)) -#define GDL_IS_DOCK_PLACEHOLDER(obj) (GTK_CHECK_TYPE ((obj), GDL_TYPE_DOCK_PLACEHOLDER)) -#define GDL_IS_DOCK_PLACEHOLDER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_PLACEHOLDER)) -#define GDL_DOCK_PLACEHOLDER_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_DOCK_PLACEHOLDER, GdlDockPlaceholderClass)) +#define GDL_DOCK_PLACEHOLDER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_PLACEHOLDER, GdlDockPlaceholder)) +#define GDL_DOCK_PLACEHOLDER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_PLACEHOLDER, GdlDockPlaceholderClass)) +#define GDL_IS_DOCK_PLACEHOLDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_PLACEHOLDER)) +#define GDL_IS_DOCK_PLACEHOLDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_PLACEHOLDER)) +#define GDL_DOCK_PLACEHOLDER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK_PLACEHOLDER, GdlDockPlaceholderClass)) /* data types & structures */ typedef struct _GdlDockPlaceholder GdlDockPlaceholder; Only in gdl/: gdl-dock-placeholder.lo Only in /home/alex/devel/inkscape/trunk-checkout/src/libgdl/: gdl-dock-placeholder.o diff -u gdl//gdl-dock-tablabel.c /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-tablabel.c --- gdl//gdl-dock-tablabel.c 2011-07-09 15:29:08.646633870 +0100 +++ /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-tablabel.c 2011-07-09 14:40:46.516632269 +0100 @@ -254,6 +254,7 @@ gboolean locked; gchar *label; GtkBin *bin; + (void)pspec; g_object_get (master, "locked", &locked, @@ -324,14 +325,14 @@ widget->allocation = *allocation; - if (GTK_WIDGET_REALIZED (widget)) + if (gtk_widget_get_realized (widget)) gdk_window_move_resize (tablabel->event_window, allocation->x, allocation->y, allocation->width, allocation->height); - if (bin->child && GTK_WIDGET_VISIBLE (bin->child)) { + if (bin->child && gtk_widget_get_visible (bin->child)) { GtkAllocation child_allocation; child_allocation.x = widget->allocation.x + border_width; @@ -386,7 +387,7 @@ g_return_val_if_fail (GDL_IS_DOCK_TABLABEL (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); - if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_MAPPED (widget)) { + if (gtk_widget_get_visible (widget) && gtk_widget_get_mapped (widget)) { GDL_CALL_PARENT_GBOOLEAN(GTK_WIDGET_CLASS, expose_event, (widget,event)); gdl_dock_tablabel_paint (widget, event); }; @@ -550,7 +551,7 @@ widget->style = gtk_style_attach (widget->style, widget->window); - GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED); + gtk_widget_set_realized (widget, TRUE); } static void diff -u gdl//gdl-dock-tablabel.h /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-tablabel.h --- gdl//gdl-dock-tablabel.h 2011-07-09 15:29:08.646633870 +0100 +++ /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-dock-tablabel.h 2011-07-09 15:18:02.256633503 +0100 @@ -25,18 +25,18 @@ #define __GDL_DOCK_TABLABEL_H__ #include -#include +#include "libgdl/gdl-dock-item.h" G_BEGIN_DECLS /* standard macros */ #define GDL_TYPE_DOCK_TABLABEL (gdl_dock_tablabel_get_type ()) -#define GDL_DOCK_TABLABEL(obj) (GTK_CHECK_CAST ((obj), GDL_TYPE_DOCK_TABLABEL, GdlDockTablabel)) -#define GDL_DOCK_TABLABEL_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_TABLABEL, GdlDockTablabelClass)) -#define GDL_IS_DOCK_TABLABEL(obj) (GTK_CHECK_TYPE ((obj), GDL_TYPE_DOCK_TABLABEL)) -#define GDL_IS_DOCK_TABLABEL_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_TABLABEL)) -#define GDL_DOCK_TABLABEL_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_DOCK_TABLABEL, GdlDockTablabelClass)) +#define GDL_DOCK_TABLABEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_TABLABEL, GdlDockTablabel)) +#define GDL_DOCK_TABLABEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_TABLABEL, GdlDockTablabelClass)) +#define GDL_IS_DOCK_TABLABEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_TABLABEL)) +#define GDL_IS_DOCK_TABLABEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_TABLABEL)) +#define GDL_DOCK_TABLABEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK_TABLABEL, GdlDockTablabelClass)) /* data types & structures */ typedef struct _GdlDockTablabel GdlDockTablabel; Only in gdl/: gdl-dock-tablabel.lo Only in /home/alex/devel/inkscape/trunk-checkout/src/libgdl/: gdl-dock-tablabel.o diff -u gdl//gdl.h /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl.h --- gdl//gdl.h 2011-07-09 15:29:08.656633870 +0100 +++ /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl.h 2011-07-09 15:18:02.276633503 +0100 @@ -23,17 +23,17 @@ #ifndef __GDL_H__ #define __GDL_H__ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include "libgdl/gdl-tools.h" +#include "libgdl/gdl-dock-object.h" +#include "libgdl/gdl-dock-master.h" +#include "libgdl/gdl-dock.h" +#include "libgdl/gdl-dock-item.h" +#include "libgdl/gdl-dock-layout.h" +#include "libgdl/gdl-dock-paned.h" +#include "libgdl/gdl-dock-notebook.h" +#include "libgdl/gdl-dock-tablabel.h" +#include "libgdl/gdl-dock-bar.h" +#include "libgdl/gdl-combo-button.h" +#include "libgdl/gdl-switcher.h" #endif diff -u gdl//gdl-i18n.c /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-i18n.c --- gdl//gdl-i18n.c 2011-07-09 15:29:08.646633870 +0100 +++ /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-i18n.c 2011-07-09 14:40:46.516632269 +0100 @@ -32,7 +32,7 @@ static gboolean initialized = FALSE; if (!initialized) { - bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR); +/* bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR); */ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); initialized = TRUE; } Only in gdl/: gdl-i18n.lo Only in /home/alex/devel/inkscape/trunk-checkout/src/libgdl/: gdl-i18n.o Only in gdl/: gdl-preview-window.lo diff -u gdl//gdl-stock.c /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-stock.c --- gdl//gdl-stock.c 2011-07-09 15:29:08.646633870 +0100 +++ /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-stock.c 2011-07-09 14:40:46.526632269 +0100 @@ -24,15 +24,14 @@ #endif #include -#include -#include "gdl-stock.h" -#include "gdl-stock-icons.h" +#include "gdl-stock.h" +#include "gdl-stock-icons.h" static GtkIconFactory *gdl_stock_factory = NULL; static struct { const gchar *stock_id; - const guint8 *icon_data; + const guint8 *icon_data; const guint data_size; } gdl_icons[] = @@ -44,7 +43,7 @@ static void icon_set_from_data (GtkIconSet *set, - const guint8 *icon_data, + const guint8 *icon_data, const guint data_size, GtkIconSize size, gboolean fallback) @@ -60,8 +59,8 @@ pixbuf = gdk_pixbuf_new_from_inline (data_size, icon_data, FALSE, &err); if (err) { - g_warning (err->message); - g_error_free (err); + g_warning ("%s",err->message); + g_error_free (err); err = NULL; g_object_unref (source); return; @@ -84,7 +83,7 @@ static void add_icon (GtkIconFactory *factory, const gchar *stock_id, - const guint8 *icon_data, + const guint8 *icon_data, const guint data_size) { GtkIconSet *set; @@ -117,7 +116,7 @@ for (i = 0; i < G_N_ELEMENTS (gdl_icons); i++) { add_icon (gdl_stock_factory, gdl_icons[i].stock_id, - gdl_icons[i].icon_data, + gdl_icons[i].icon_data, gdl_icons[i].data_size); } diff -u gdl//gdl-stock.h /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-stock.h --- gdl//gdl-stock.h 2011-07-09 15:29:08.646633870 +0100 +++ /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-stock.h 2011-07-09 15:18:02.346633503 +0100 @@ -22,6 +22,8 @@ #ifndef __GDL_STOCK_H__ #define __GDL_STOCK_H__ +#include // G_BEGIN_DECLS + G_BEGIN_DECLS #define GDL_STOCK_CLOSE "gdl-close" Only in /home/alex/devel/inkscape/trunk-checkout/src/libgdl/: gdl-stock.o diff -u gdl//gdl-switcher.c /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-switcher.c --- gdl//gdl-switcher.c 2011-07-09 15:29:08.656633870 +0100 +++ /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-switcher.c 2011-07-09 14:40:46.526632269 +0100 @@ -35,14 +35,9 @@ #include "libgdltypebuiltins.h" #include -#include -#include -#include -#include #if HAVE_GNOME #include -#include #endif static void gdl_switcher_set_property (GObject *object, @@ -58,6 +53,7 @@ const gchar *label, const gchar *tooltips, const gchar *stock_id, + const GdkPixbuf *pixbuf_icon, gint switcher_id); /* static void gdl_switcher_remove_button (GdlSwitcher *switcher, gint switcher_id); */ static void gdl_switcher_select_page (GdlSwitcher *switcher, gint switcher_id); @@ -78,7 +74,6 @@ GtkWidget *icon; GtkWidget *arrow; GtkWidget *hbox; - GtkTooltips *tooltips; int id; } Button; @@ -107,7 +102,7 @@ static Button * button_new (GtkWidget *button_widget, GtkWidget *label, GtkWidget *icon, - GtkTooltips *tooltips, GtkWidget *arrow, GtkWidget *hbox, int id) + GtkWidget *arrow, GtkWidget *hbox, int id) { Button *button = g_new (Button, 1); @@ -116,7 +111,6 @@ button->icon = icon; button->arrow = arrow; button->hbox = hbox; - button->tooltips = tooltips; button->id = id; g_object_ref (button_widget); @@ -124,7 +118,6 @@ g_object_ref (icon); g_object_ref (arrow); g_object_ref (hbox); - g_object_ref (tooltips); return button; } @@ -136,7 +129,6 @@ g_object_unref (button->label); g_object_unref (button->icon); g_object_unref (button->hbox); - g_object_unref (button->tooltips); g_free (button); } @@ -286,8 +278,8 @@ rows_count = num_btns / btns_per_row; if (num_btns % btns_per_row != 0) - rows_count++; - + rows_count++; + /* Assign buttons to rows */ rows = g_new0 (GSList *, rows_count); @@ -617,20 +609,22 @@ GdlSwitcher *switcher) { gboolean show_tabs; + (void)g_object; + (void)pspec; g_return_if_fail (switcher != NULL && GDL_IS_SWITCHER (switcher)); show_tabs = gtk_notebook_get_show_tabs (GTK_NOTEBOOK (switcher)); gdl_switcher_set_show_buttons (switcher, !show_tabs); } static void -gdl_switcher_switch_page_cb (GtkNotebook *nb, GtkNotebookPage *page, +gdl_switcher_switch_page_cb (GtkNotebook *nb, GtkWidget *page_widget, gint page_num, GdlSwitcher *switcher) { - GtkWidget *page_widget; gint switcher_id; - + + (void)nb; + (void)page_num; /* Change switcher button */ - page_widget = gtk_notebook_get_nth_page (nb, page_num); switcher_id = gdl_switcher_get_page_id (page_widget); gdl_switcher_select_button (GDL_SWITCHER (switcher), switcher_id); } @@ -640,10 +634,12 @@ gint page_num, GdlSwitcher *switcher) { gint switcher_id; - + + (void)nb; + (void)page_num; switcher_id = gdl_switcher_get_page_id (page); - gdl_switcher_add_button (GDL_SWITCHER (switcher), NULL, NULL, NULL, + gdl_switcher_add_button (GDL_SWITCHER (switcher), NULL, NULL, NULL, NULL, switcher_id); gdl_switcher_select_button (GDL_SWITCHER (switcher), switcher_id); } @@ -713,7 +709,7 @@ { GdlSwitcherPrivate *priv; - GTK_WIDGET_SET_FLAGS (switcher, GTK_NO_WINDOW); + gtk_widget_set_has_window (GTK_WIDGET (switcher), FALSE); priv = g_new0 (GdlSwitcherPrivate, 1); switcher->priv = priv; @@ -745,14 +741,13 @@ void gdl_switcher_add_button (GdlSwitcher *switcher, const gchar *label, const gchar *tooltips, const gchar *stock_id, - gint switcher_id) + const GdkPixbuf *pixbuf_icon, gint switcher_id) { GtkWidget *button_widget; GtkWidget *hbox; GtkWidget *icon_widget; GtkWidget *label_widget; GtkWidget *arrow; - GtkTooltips *button_tooltips; button_widget = gtk_toggle_button_new (); if (switcher->priv->show) @@ -765,7 +760,14 @@ gtk_container_add (GTK_CONTAINER (button_widget), hbox); gtk_widget_show (hbox); - icon_widget = gtk_image_new_from_stock (stock_id, GTK_ICON_SIZE_MENU); + if (stock_id) { + icon_widget = gtk_image_new_from_stock (stock_id, GTK_ICON_SIZE_MENU); + } else if (pixbuf_icon) { + icon_widget = gtk_image_new_from_pixbuf (pixbuf_icon); + } else { + icon_widget = gtk_image_new_from_stock (GTK_STOCK_NEW, GTK_ICON_SIZE_MENU); + } + gtk_widget_show (icon_widget); if (!label) { @@ -777,24 +779,19 @@ } gtk_misc_set_alignment (GTK_MISC (label_widget), 0.0, 0.5); gtk_widget_show (label_widget); - button_tooltips = gtk_tooltips_new(); - gtk_tooltips_set_tip (GTK_TOOLTIPS (button_tooltips), button_widget, - tooltips, NULL); + gtk_widget_set_tooltip_text (button_widget, tooltips); switch (INTERNAL_MODE (switcher)) { case GDL_SWITCHER_STYLE_TEXT: gtk_box_pack_start (GTK_BOX (hbox), label_widget, TRUE, TRUE, 0); - gtk_tooltips_disable (button_tooltips); break; case GDL_SWITCHER_STYLE_ICON: gtk_box_pack_start (GTK_BOX (hbox), icon_widget, TRUE, TRUE, 0); - gtk_tooltips_enable (button_tooltips); break; case GDL_SWITCHER_STYLE_BOTH: default: gtk_box_pack_start (GTK_BOX (hbox), icon_widget, FALSE, TRUE, 0); gtk_box_pack_start (GTK_BOX (hbox), label_widget, TRUE, TRUE, 0); - gtk_tooltips_disable (button_tooltips); break; } arrow = gtk_arrow_new (GTK_ARROW_UP, GTK_SHADOW_NONE); @@ -804,7 +801,7 @@ switcher->priv->buttons = g_slist_append (switcher->priv->buttons, button_new (button_widget, label_widget, - icon_widget, button_tooltips, + icon_widget, arrow, hbox, switcher_id)); gtk_widget_set_parent (button_widget, GTK_WIDGET (switcher)); @@ -844,7 +841,7 @@ gdl_switcher_insert_page (GdlSwitcher *switcher, GtkWidget *page, GtkWidget *tab_widget, const gchar *label, const gchar *tooltips, const gchar *stock_id, - gint position) + const GdkPixbuf *pixbuf_icon, gint position) { gint ret_position; gint switcher_id; @@ -857,7 +854,7 @@ gtk_widget_show (tab_widget); } switcher_id = gdl_switcher_get_page_id (page); - gdl_switcher_add_button (switcher, label, tooltips, stock_id, switcher_id); + gdl_switcher_add_button (switcher, label, tooltips, stock_id, pixbuf_icon, switcher_id); ret_position = gtk_notebook_insert_page (GTK_NOTEBOOK (switcher), page, tab_widget, position); g_signal_handlers_unblock_by_func (switcher, @@ -899,7 +896,6 @@ gtk_box_pack_start (GTK_BOX (button->hbox), button->label, TRUE, TRUE, 0); gtk_widget_show (button->label); - gtk_tooltips_disable (button->tooltips); } break; case GDL_SWITCHER_STYLE_ICON: @@ -912,7 +908,6 @@ } else gtk_container_child_set (GTK_CONTAINER (button->hbox), button->icon, "expand", TRUE, NULL); - gtk_tooltips_enable (button->tooltips); break; case GDL_SWITCHER_STYLE_BOTH: if (INTERNAL_MODE (switcher) @@ -927,7 +922,6 @@ button->icon, "expand", FALSE, NULL); } - gtk_tooltips_disable (button->tooltips); gtk_box_pack_start (GTK_BOX (button->hbox), button->label, TRUE, TRUE, 0); gtk_widget_show (button->label); diff -u gdl//gdl-switcher.h /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-switcher.h --- gdl//gdl-switcher.h 2011-07-09 15:29:08.656633870 +0100 +++ /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-switcher.h 2011-07-09 15:18:02.366633503 +0100 @@ -25,7 +25,7 @@ #ifndef _GDL_SWITCHER_H_ #define _GDL_SWITCHER_H_ -#include +#include G_BEGIN_DECLS @@ -66,6 +66,7 @@ const gchar *label, const gchar *tooltips, const gchar *stock_id, + const GdkPixbuf *pixbuf_icon, gint position); G_END_DECLS Only in gdl/: gdl-switcher.lo Only in /home/alex/devel/inkscape/trunk-checkout/src/libgdl/: gdl-switcher.o diff -u gdl//gdl-tools.h /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-tools.h --- gdl//gdl-tools.h 2011-07-09 15:29:08.656633870 +0100 +++ /home/alex/devel/inkscape/trunk-checkout/src/libgdl//gdl-tools.h 2011-07-09 15:18:02.406633503 +0100 @@ -25,7 +25,7 @@ #define __GDL_TOOLS_H__ #include -#include +#include /* FIXME: Toggle this */ @@ -104,6 +104,7 @@ type_as_function ## _class_init_trampoline (gpointer klass, \ gpointer data) \ { \ + (void)data; \ parent_class = (parent_type ## Class *)g_type_class_ref ( \ parent_type_macro); \ type_as_function ## _class_init ((type ## Class *)klass); \ @@ -122,7 +123,8 @@ NULL, /* class_data */ \ sizeof (type), \ 0, /* n_preallocs */ \ - (GInstanceInitFunc) type_as_function ## _instance_init \ + (GInstanceInitFunc) type_as_function ## _instance_init , \ + NULL, /* value_table */ \ }; \ object_type = register_type_macro \ (type, type_as_function, corba_type, \ @@ -143,6 +145,7 @@ ((parent_class_cast(parent_class)->name != NULL) ? \ parent_class_cast(parent_class)->name args : (gboolean)0) + /* Same as above, but in case there is no implementation, it evaluates * to def_return */ #define GDL_CALL_PARENT_WITH_DEFAULT(parent_class_cast, \ Only in /home/alex/devel/inkscape/trunk-checkout/src/libgdl/: gdl-win32.o Only in gdl/: layout.glade Only in gdl/: libgdl-3.la Only in /home/alex/devel/inkscape/trunk-checkout/src/libgdl/: libgdl.a diff -u gdl//libgdlmarshal.list /home/alex/devel/inkscape/trunk-checkout/src/libgdl//libgdlmarshal.list --- gdl//libgdlmarshal.list 2011-07-09 15:29:08.656633870 +0100 +++ /home/alex/devel/inkscape/trunk-checkout/src/libgdl//libgdlmarshal.list 2011-06-23 23:06:36.689476000 +0100 @@ -1,4 +1,5 @@ VOID:VOID +VOID:ENUM VOID:INT,INT VOID:UINT,UINT VOID:BOOLEAN Only in gdl/: libgdlmarshal.lo Only in /home/alex/devel/inkscape/trunk-checkout/src/libgdl/: libgdlmarshal.o Only in gdl/: libgdltypebuiltins.lo Only in /home/alex/devel/inkscape/trunk-checkout/src/libgdl/: libgdltypebuiltins.o Only in gdl/: .libs Only in /home/alex/devel/inkscape/trunk-checkout/src/libgdl/: makefile Only in gdl/: Makefile Only in gdl/: Makefile.am Only in /home/alex/devel/inkscape/trunk-checkout/src/libgdl/: makefile.in Only in gdl/: Makefile.in Only in /home/alex/devel/inkscape/trunk-checkout/src/libgdl/: Makefile_insert Only in gdl/: program.xpm Only in gdl/: shared.xpm Only in gdl/: static.xpm Only in gdl/: stock-close-12.png Only in gdl/: stock-menu-left-12.png Only in gdl/: stock-menu-right-12.png Only in gdl/: test-dock Only in gdl/: test-dock.o Only in gdl/: tree-contract.xpm Only in gdl/: tree-expand.xpm