Only in src/libgdl/: CMakeLists.txt Only in /home/alex/devel/gdl/gdl: .cvsignore Only in src/libgdl/: .deps Only in src/libgdl/: .dirstamp diff -u /home/alex/devel/gdl/gdl/gdl-dock-bar.c src/libgdl//gdl-dock-bar.c --- /home/alex/devel/gdl/gdl/gdl-dock-bar.c 2011-12-22 16:14:27.740702752 +0000 +++ src/libgdl//gdl-dock-bar.c 2011-12-22 16:00:21.928701278 +0000 @@ -244,6 +244,7 @@ { GdlDockBar *dockbar; GdlDockObject *controller; + (void)button; g_return_if_fail (item != NULL); @@ -267,6 +268,7 @@ GtkWidget *button; gchar *stock_id; gchar *name; + GdkPixbuf *pixbuf_icon; GtkWidget *image, *box, *label; g_return_if_fail (GDL_IS_DOCK_BAR (dockbar)); @@ -290,7 +292,8 @@ 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) { @@ -309,6 +312,8 @@ 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); @@ -388,6 +393,7 @@ gdl_dock_bar_layout_changed_cb (GdlDockMaster *master, GdlDockBar *dockbar) { + (void)master; update_dock_items (dockbar, FALSE); } Only in src/libgdl/: gdl-dock-bar.o diff -u /home/alex/devel/gdl/gdl/gdl-dock.c src/libgdl//gdl-dock.c --- /home/alex/devel/gdl/gdl/gdl-dock.c 2011-12-22 16:14:27.752702752 +0000 +++ src/libgdl//gdl-dock.c 2011-12-22 16:01:05.596701354 +0000 @@ -36,9 +36,6 @@ #include "libgdlmarshal.h" -#ifndef __FUNCTION__ -#define __FUNCTION__ __func__ -#endif /* ----- Private prototypes ----- */ @@ -275,7 +272,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); @@ -325,6 +324,9 @@ dock->_priv->height); 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), @@ -487,7 +489,10 @@ { GdlDock *dock; gchar* long_name; - + + (void)pspec; + (void)user_data; + g_return_if_fail (object != NULL || GDL_IS_DOCK (object)); g_object_get (object, "long-name", &long_name, NULL); @@ -723,6 +728,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); @@ -736,6 +743,7 @@ static GType gdl_dock_child_type (GtkContainer *container) { + (void)container; return GDL_TYPE_DOCK_ITEM; } @@ -914,7 +922,7 @@ GdlDock has been realized. */ 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. */ @@ -1008,8 +1016,11 @@ { GdlDock *dock = GDL_DOCK (object); - if (dock->_priv->floating) + (void)child; + + if (dock->_priv->floating) { gtk_window_present (GTK_WINDOW (dock->_priv->window)); + } } @@ -1066,14 +1077,10 @@ if (placement == GDL_DOCK_LEFT || placement == GDL_DOCK_RIGHT) { /* Check if dock_object touches center in terms of width */ if (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 (allocation.height/2 > object_size.height) { - return GDL_DOCK_CENTER; - } - } + } + return placement; } @@ -1089,6 +1096,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); @@ -1212,7 +1221,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), diff -u /home/alex/devel/gdl/gdl/gdl-dock.h src/libgdl//gdl-dock.h --- /home/alex/devel/gdl/gdl/gdl-dock.h 2011-12-22 16:14:27.752702752 +0000 +++ src/libgdl//gdl-dock.h 2011-12-22 16:01:05.596701354 +0000 @@ -23,9 +23,9 @@ #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 Only in src/libgdl/: gdl-dock-item-button-image.o diff -u /home/alex/devel/gdl/gdl/gdl-dock-item.c src/libgdl//gdl-dock-item.c --- /home/alex/devel/gdl/gdl/gdl-dock-item.c 2011-12-22 16:14:27.744702753 +0000 +++ src/libgdl//gdl-dock-item.c 2011-12-22 16:08:20.396702112 +0000 @@ -79,6 +79,9 @@ gpointer callback_data); 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); static void gdl_dock_item_size_allocate (GtkWidget *widget, @@ -91,6 +94,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, @@ -156,6 +162,7 @@ DOCK_DRAG_MOTION, DOCK_DRAG_END, SELECTED, + MOVE_FOCUS_CHILD, LAST_SIGNAL }; @@ -194,6 +201,40 @@ G_DEFINE_TYPE (GdlDockItem, gdl_dock_item, 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; @@ -203,6 +244,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); @@ -232,6 +274,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; @@ -381,11 +424,39 @@ g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); + + 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) @@ -405,6 +476,7 @@ gdl_dock_item_init (GdlDockItem *item) { gtk_widget_set_has_window (GTK_WIDGET (item), TRUE); + gtk_widget_set_can_focus (GTK_WIDGET (item), TRUE); item->child = NULL; @@ -724,6 +796,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 (gdl_dock_item_parent_class)->set_focus_child) { + (* GTK_CONTAINER_CLASS (gdl_dock_item_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) { @@ -947,6 +1032,7 @@ GtkStyle *previous_style) { GdkWindow *window; + (void)previous_style; g_return_if_fail (widget != NULL); g_return_if_fail (GDL_IS_DOCK_ITEM (widget)); @@ -998,6 +1084,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) @@ -1045,6 +1139,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; @@ -1065,6 +1163,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)) { @@ -1137,7 +1236,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); @@ -1211,25 +1309,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 * @@ -1311,7 +1421,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; @@ -1485,15 +1595,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; } @@ -1578,11 +1691,14 @@ { GdlDockItem *item; GtkAllocation allocation; + + 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: @@ -1615,11 +1731,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); } @@ -1629,6 +1744,8 @@ { g_return_if_fail (item != NULL); + (void)widget; + gdl_dock_item_lock (item); } @@ -1638,6 +1755,8 @@ { g_return_if_fail (item != NULL); + (void)widget; + gdl_dock_item_unlock (item); } @@ -1738,6 +1857,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) */ /** * gdl_dock_item_dock_to: @@ -1754,6 +1894,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); @@ -2217,6 +2359,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 /home/alex/devel/gdl/gdl/gdl-dock-item-grip.c src/libgdl//gdl-dock-item-grip.c --- /home/alex/devel/gdl/gdl/gdl-dock-item-grip.c 2011-12-22 16:14:27.740702752 +0000 +++ src/libgdl//gdl-dock-item-grip.c 2011-12-22 16:00:42.308701315 +0000 @@ -67,10 +67,12 @@ GtkLabel *label; gchar *stock_id = NULL; gchar *title = NULL; + GdkPixbuf *pixbuf; label_box = (GtkHBox*)gtk_hbox_new (FALSE, 0); g_object_get (G_OBJECT (grip->item), "stock-id", &stock_id, NULL); + g_object_get (G_OBJECT (grip->item), "pixbuf-icon", &pixbuf, NULL); if(stock_id) { image = GTK_IMAGE(gtk_image_new_from_stock (stock_id, GTK_ICON_SIZE_MENU)); @@ -79,6 +81,12 @@ g_free (stock_id); } + else if (pixbuf) { + image = GTK_IMAGE(gtk_image_new_from_pixbuf (pixbuf)); + + gtk_widget_show (GTK_WIDGET(image)); + gtk_box_pack_start(GTK_BOX(label_box), GTK_WIDGET(image), FALSE, TRUE, 0); + } g_object_get (G_OBJECT (grip->item), "long-name", &title, NULL); if (title) { @@ -151,6 +159,7 @@ { GdlDockItemGrip *grip; gboolean cursor; + (void)master; grip = GDL_DOCK_ITEM_GRIP (data); @@ -252,6 +261,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); @@ -302,6 +312,7 @@ { GtkWidget *parent; + (void)widget; g_return_if_fail (grip->item != NULL); /* Workaround to unhighlight the iconify button. */ @@ -630,6 +641,8 @@ gdl_dock_item_grip_add (GtkContainer *container, GtkWidget *widget) { + (void)container; + (void)widget; g_warning ("gtk_container_add not implemented for GdlDockItemGrip"); } @@ -637,6 +650,7 @@ gdl_dock_item_grip_remove (GtkContainer *container, GtkWidget *widget) { + (void)widget; gdl_dock_item_grip_set_label (GDL_DOCK_ITEM_GRIP (container), NULL); } @@ -666,6 +680,7 @@ static GType gdl_dock_item_grip_child_type (GtkContainer *container) { + (void)container; return G_TYPE_NONE; } diff -u /home/alex/devel/gdl/gdl/gdl-dock-item-grip.h src/libgdl//gdl-dock-item-grip.h --- /home/alex/devel/gdl/gdl/gdl-dock-item-grip.h 2011-12-22 16:14:27.740702752 +0000 +++ src/libgdl//gdl-dock-item-grip.h 2011-12-22 16:00:42.308701315 +0000 @@ -31,7 +31,7 @@ #define _GDL_DOCK_ITEM_GRIP_H_ #include -#include +#include "libgdl/gdl-dock-item.h" G_BEGIN_DECLS Only in src/libgdl/: gdl-dock-item-grip.o diff -u /home/alex/devel/gdl/gdl/gdl-dock-item.h src/libgdl//gdl-dock-item.h --- /home/alex/devel/gdl/gdl/gdl-dock-item.h 2011-12-22 16:14:27.744702753 +0000 +++ src/libgdl//gdl-dock-item.h 2011-12-22 16:08:20.396702112 +0000 @@ -30,7 +30,7 @@ #ifndef __GDL_DOCK_ITEM_H__ #define __GDL_DOCK_ITEM_H__ -#include +#include "libgdl/gdl-dock-object.h" G_BEGIN_DECLS @@ -99,6 +99,8 @@ 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); }; @@ -142,6 +144,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, @@ -182,6 +189,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 src/libgdl/: gdl-dock-item.o Only in /home/alex/devel/gdl/gdl: gdl-dock-layout.c Only in /home/alex/devel/gdl/gdl: gdl-dock-layout.h diff -u /home/alex/devel/gdl/gdl/gdl-dock-master.c src/libgdl//gdl-dock-master.c --- /home/alex/devel/gdl/gdl/gdl-dock-master.c 2011-12-22 16:14:27.744702753 +0000 +++ src/libgdl//gdl-dock-master.c 2011-12-22 16:00:56.996701338 +0000 @@ -34,6 +34,9 @@ #include "gdl-switcher.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; @@ -574,7 +597,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); @@ -594,6 +617,7 @@ gpointer value, gpointer user_data) { + (void)key; struct { GFunc function; gpointer user_data; @@ -632,8 +656,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); @@ -690,7 +726,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)); @@ -712,6 +752,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)); @@ -732,6 +774,8 @@ gint locked = COMPUTE_LOCKED (master); gboolean item_locked; + (void)pspec; + g_object_get (object, "locked", &item_locked, NULL); if (item_locked) { diff -u /home/alex/devel/gdl/gdl/gdl-dock-master.h src/libgdl//gdl-dock-master.h --- /home/alex/devel/gdl/gdl/gdl-dock-master.h 2011-12-22 16:14:27.744702753 +0000 +++ src/libgdl//gdl-dock-master.h 2011-12-22 16:00:56.996701338 +0000 @@ -26,7 +26,7 @@ #include #include -#include +#include "libgdl/gdl-dock-object.h" G_BEGIN_DECLS Only in src/libgdl/: gdl-dock-master.o diff -u /home/alex/devel/gdl/gdl/gdl-dock-notebook.c src/libgdl//gdl-dock-notebook.c --- /home/alex/devel/gdl/gdl/gdl-dock-notebook.c 2011-12-22 16:14:27.744702753 +0000 +++ src/libgdl//gdl-dock-notebook.c 2011-12-22 16:01:01.636701348 +0000 @@ -58,7 +58,7 @@ GValue *other_data); static void gdl_dock_notebook_switch_page_cb (GtkNotebook *nb, - GtkNotebookPage *page, + GtkWidget *page, gint page_num, gpointer data); @@ -155,6 +155,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); @@ -165,10 +166,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; } @@ -259,7 +262,7 @@ static void gdl_dock_notebook_switch_page_cb (GtkNotebook *nb, - GtkNotebookPage *page, + GtkWidget *page, gint page_num, gpointer data) { @@ -280,7 +283,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)); @@ -335,6 +338,7 @@ static GType gdl_dock_notebook_child_type (GtkContainer *container) { + (void)container; return GDL_TYPE_DOCK_ITEM; } @@ -386,11 +390,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); @@ -410,7 +415,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 /home/alex/devel/gdl/gdl/gdl-dock-notebook.h src/libgdl//gdl-dock-notebook.h --- /home/alex/devel/gdl/gdl/gdl-dock-notebook.h 2011-12-22 16:14:27.748702753 +0000 +++ src/libgdl//gdl-dock-notebook.h 2011-12-22 16:01:01.636701348 +0000 @@ -22,7 +22,7 @@ #ifndef __GDL_DOCK_NOTEBOOK_H__ #define __GDL_DOCK_NOTEBOOK_H__ -#include +#include "libgdl/gdl-dock-item.h" G_BEGIN_DECLS Only in src/libgdl/: gdl-dock-notebook.o Only in src/libgdl/: gdl-dock.o diff -u /home/alex/devel/gdl/gdl/gdl-dock-object.c src/libgdl//gdl-dock-object.c --- /home/alex/devel/gdl/gdl/gdl-dock-object.c 2011-12-22 16:14:27.748702753 +0000 +++ src/libgdl//gdl-dock-object.c 2011-12-22 16:01:10.060701361 +0000 @@ -79,6 +79,7 @@ PROP_NAME, PROP_LONG_NAME, PROP_STOCK_ID, + PROP_PIXBUF_ICON, PROP_MASTER, PROP_EXPORT_PROPERTIES }; @@ -135,6 +136,12 @@ G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); 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"), @@ -211,6 +218,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)); @@ -241,6 +251,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; @@ -265,6 +278,7 @@ object->long_name = NULL; g_free (object->stock_id); object->stock_id = NULL; + object->pixbuf_icon = NULL; G_OBJECT_CLASS (gdl_dock_object_parent_class)->finalize (g_object); } @@ -273,6 +287,7 @@ gdl_dock_object_foreach_detach (GdlDockObject *object, gpointer user_data) { + (void)user_data; gdl_dock_object_detach (object, TRUE); } @@ -439,6 +454,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)); @@ -448,6 +466,7 @@ gdl_dock_object_real_present (GdlDockObject *object, GdlDockObject *child) { + (void)child; gtk_widget_show (GTK_WIDGET (object)); } @@ -848,7 +867,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 /home/alex/devel/gdl/gdl/gdl-dock-object.h src/libgdl//gdl-dock-object.h --- /home/alex/devel/gdl/gdl/gdl-dock-object.h 2011-12-22 16:14:27.748702753 +0000 +++ src/libgdl//gdl-dock-object.h 2011-12-22 16:01:10.060701361 +0000 @@ -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 src/libgdl/: gdl-dock-object.o diff -u /home/alex/devel/gdl/gdl/gdl-dock-paned.c src/libgdl//gdl-dock-paned.c --- /home/alex/devel/gdl/gdl/gdl-dock-paned.c 2011-12-22 16:14:27.748702753 +0000 +++ src/libgdl//gdl-dock-paned.c 2011-12-22 16:01:14.100701369 +0000 @@ -138,6 +138,64 @@ gdl_dock_paned_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 @@ -146,7 +204,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 */ @@ -154,8 +213,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 @@ -164,13 +255,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) { @@ -573,7 +699,7 @@ gtk_paned_pack1 (paned, GTK_WIDGET (requestor), hresize, FALSE); done = TRUE; } else if (!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; @@ -675,4 +801,3 @@ return GTK_WIDGET (paned); } - diff -u /home/alex/devel/gdl/gdl/gdl-dock-paned.h src/libgdl//gdl-dock-paned.h --- /home/alex/devel/gdl/gdl/gdl-dock-paned.h 2011-12-22 16:14:27.748702753 +0000 +++ src/libgdl//gdl-dock-paned.h 2011-12-22 16:01:14.100701369 +0000 @@ -24,7 +24,7 @@ #ifndef __GDL_DOCK_PANED_H__ #define __GDL_DOCK_PANED_H__ -#include +#include "libgdl/gdl-dock-item.h" G_BEGIN_DECLS @@ -44,6 +44,8 @@ GdlDockItem dock_item; gboolean position_changed; + gboolean in_drag; + gint last_drag_position; }; struct _GdlDockPanedClass { Only in src/libgdl/: gdl-dock-paned.o diff -u /home/alex/devel/gdl/gdl/gdl-dock-placeholder.c src/libgdl//gdl-dock-placeholder.c --- /home/alex/devel/gdl/gdl/gdl-dock-placeholder.c 2011-12-22 16:14:27.748702753 +0000 +++ src/libgdl//gdl-dock-placeholder.c 2011-12-22 16:01:20.956701378 +0000 @@ -331,7 +331,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)); @@ -349,6 +349,7 @@ gboolean recursive) { GdlDockPlaceholder *ph = GDL_DOCK_PLACEHOLDER (object); + (void)recursive; /* disconnect handlers */ disconnect_host (ph); @@ -363,6 +364,7 @@ static void gdl_dock_placeholder_reduce (GdlDockObject *object) { + (void)object; /* placeholders are not reduced */ return; } @@ -536,6 +538,8 @@ gdl_dock_placeholder_present (GdlDockObject *object, GdlDockObject *child) { + (void)object; + (void)child; /* do nothing */ return; } @@ -566,7 +570,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); @@ -598,6 +603,7 @@ { GdlDockPlaceholder *ph; GdlDockObject *new_host, *obj; + (void)recursive; g_return_if_fail (user_data != NULL && GDL_IS_DOCK_PLACEHOLDER (user_data)); @@ -727,7 +733,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 /home/alex/devel/gdl/gdl/gdl-dock-placeholder.h src/libgdl//gdl-dock-placeholder.h --- /home/alex/devel/gdl/gdl/gdl-dock-placeholder.h 2011-12-22 16:14:27.748702753 +0000 +++ src/libgdl//gdl-dock-placeholder.h 2011-12-22 16:01:20.956701378 +0000 @@ -24,7 +24,7 @@ #ifndef __GDL_DOCK_PLACEHOLDER_H__ #define __GDL_DOCK_PLACEHOLDER_H__ -#include +#include "libgdl/gdl-dock-object.h" G_BEGIN_DECLS Only in src/libgdl/: gdl-dock-placeholder.o diff -u /home/alex/devel/gdl/gdl/gdl-dock-tablabel.c src/libgdl//gdl-dock-tablabel.c --- /home/alex/devel/gdl/gdl/gdl-dock-tablabel.c 2011-12-22 16:14:27.748702753 +0000 +++ src/libgdl//gdl-dock-tablabel.c 2011-12-22 16:01:27.284701394 +0000 @@ -251,6 +251,7 @@ gboolean locked; gchar *label; GtkBin *bin; + (void)pspec; g_object_get (master, "locked", &locked, diff -u /home/alex/devel/gdl/gdl/gdl-dock-tablabel.h src/libgdl//gdl-dock-tablabel.h --- /home/alex/devel/gdl/gdl/gdl-dock-tablabel.h 2011-12-22 16:14:27.748702753 +0000 +++ src/libgdl//gdl-dock-tablabel.h 2011-12-22 16:01:27.284701394 +0000 @@ -25,7 +25,7 @@ #define __GDL_DOCK_TABLABEL_H__ #include -#include +#include "libgdl/gdl-dock-item.h" G_BEGIN_DECLS Only in src/libgdl/: gdl-dock-tablabel.o diff -u /home/alex/devel/gdl/gdl/gdl.h src/libgdl//gdl.h --- /home/alex/devel/gdl/gdl/gdl.h 2011-12-22 16:14:27.752702752 +0000 +++ src/libgdl//gdl.h 2011-12-22 16:02:56.672701545 +0000 @@ -22,12 +22,11 @@ #ifndef __GDL_H__ #define __GDL_H__ -#include -#include -#include -#include -#include -#include -#include +#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-item-grip.h" +#include "libgdl/gdl-dock-bar.h" #endif diff -u /home/alex/devel/gdl/gdl/gdl-i18n.c src/libgdl//gdl-i18n.c --- /home/alex/devel/gdl/gdl/gdl-i18n.c 2011-12-22 16:14:27.752702752 +0000 +++ src/libgdl//gdl-i18n.c 2011-12-22 16:01:36.500701408 +0000 @@ -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 src/libgdl/: gdl-i18n.o Only in src/libgdl/: gdl-stock-icons.h diff -u /home/alex/devel/gdl/gdl/gdl-switcher.c src/libgdl//gdl-switcher.c --- /home/alex/devel/gdl/gdl/gdl-switcher.c 2011-12-22 16:14:27.752702752 +0000 +++ src/libgdl//gdl-switcher.c 2011-12-22 16:01:48.460701425 +0000 @@ -50,6 +50,7 @@ const gchar *label, const gchar *tooltips, const gchar *stock_id, + const GdkPixbuf *pixbuf_icon, gint switcher_id, GtkWidget *page); /* static void gdl_switcher_remove_button (GdlSwitcher *switcher, gint switcher_id); */ @@ -317,8 +318,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); @@ -648,14 +649,14 @@ } 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); } @@ -665,10 +666,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, page); gdl_switcher_select_button (GDL_SWITCHER (switcher), switcher_id); } @@ -779,6 +782,7 @@ void gdl_switcher_add_button (GdlSwitcher *switcher, const gchar *label, const gchar *tooltips, const gchar *stock_id, + const GdkPixbuf *pixbuf_icon, gint switcher_id, GtkWidget* page) { GtkWidget *event_box; @@ -801,7 +805,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) { @@ -879,7 +890,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; @@ -892,7 +903,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, page); + gdl_switcher_add_button (switcher, label, tooltips, stock_id, pixbuf_icon, switcher_id, page); ret_position = gtk_notebook_insert_page (GTK_NOTEBOOK (switcher), page, tab_widget, position); diff -u /home/alex/devel/gdl/gdl/gdl-switcher.h src/libgdl//gdl-switcher.h --- /home/alex/devel/gdl/gdl/gdl-switcher.h 2011-12-22 16:14:27.752702752 +0000 +++ src/libgdl//gdl-switcher.h 2011-12-22 16:01:48.460701425 +0000 @@ -60,6 +60,7 @@ const gchar *label, const gchar *tooltips, const gchar *stock_id, + const GdkPixbuf *pixbuf_icon, gint position); G_END_DECLS Only in src/libgdl/: gdl-switcher.o Only in src/libgdl/: gdl-win32.c Only in src/libgdl/: gdl-win32.h Only in src/libgdl/: gdl-win32.o Only in /home/alex/devel/gdl/gdl: layout.ui Only in src/libgdl/: libgdl.a Only in src/libgdl/: libgdlmarshal.c Only in src/libgdl/: libgdlmarshal.h diff -u /home/alex/devel/gdl/gdl/libgdlmarshal.list src/libgdl//libgdlmarshal.list --- /home/alex/devel/gdl/gdl/libgdlmarshal.list 2011-12-22 16:14:27.752702752 +0000 +++ src/libgdl//libgdlmarshal.list 2011-12-22 16:02:08.916701464 +0000 @@ -1,4 +1,5 @@ VOID:VOID +VOID:ENUM VOID:INT,INT VOID:UINT,UINT VOID:BOOLEAN Only in src/libgdl/: libgdlmarshal.o Only in src/libgdl/: libgdltypebuiltins.c Only in src/libgdl/: libgdltypebuiltins.h Only in src/libgdl/: libgdltypebuiltins.o Only in src/libgdl/: makefile Only in /home/alex/devel/gdl/gdl: Makefile.am Only in src/libgdl/: makefile.in Only in src/libgdl/: Makefile_insert Only in /home/alex/devel/gdl/gdl: program.xpm Only in /home/alex/devel/gdl/gdl: shared.xpm Only in /home/alex/devel/gdl/gdl: static.xpm Only in /home/alex/devel/gdl/gdl: test-combo-button.c Only in /home/alex/devel/gdl/gdl: test-dock.c Only in /home/alex/devel/gdl/gdl: test-dock.js Only in /home/alex/devel/gdl/gdl: tree-contract.xpm Only in /home/alex/devel/gdl/gdl: tree-expand.xpm