1 /* GTK - The GIMP Toolkit
2 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
3 * GtkToolbar copyright (C) Federico Mena
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the
17 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 * Boston, MA 02111-1307, USA.
22 * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
23 * file for a list of people on the GTK+ Team. See the ChangeLog
24 * files for a list of changes. These files are distributed with
25 * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
28 #include "gtkbutton.h"
29 #include "gtktogglebutton.h"
30 #include "gtkradiobutton.h"
34 #include "gtktoolbar.h"
36 #include "gtkiconfactory.h"
38 #include "gtksettings.h"
40 #include "gtkmarshalers.h"
43 #define DEFAULT_IPADDING 0
44 #define DEFAULT_SPACE_SIZE 5
45 #define DEFAULT_SPACE_STYLE GTK_TOOLBAR_SPACE_LINE
47 #define DEFAULT_ICON_SIZE GTK_ICON_SIZE_LARGE_TOOLBAR
49 #define SPACE_LINE_DIVISION 10
50 #define SPACE_LINE_START 3
51 #define SPACE_LINE_END 7
65 typedef struct _GtkToolbarChildSpace GtkToolbarChildSpace;
66 struct _GtkToolbarChildSpace
68 GtkToolbarChild child;
70 gint alloc_x, alloc_y;
73 static void gtk_toolbar_class_init (GtkToolbarClass *class);
74 static void gtk_toolbar_init (GtkToolbar *toolbar);
75 static void gtk_toolbar_set_property (GObject *object,
79 static void gtk_toolbar_get_property (GObject *object,
83 static void gtk_toolbar_destroy (GtkObject *object);
84 static gint gtk_toolbar_expose (GtkWidget *widget,
85 GdkEventExpose *event);
86 static void gtk_toolbar_size_request (GtkWidget *widget,
87 GtkRequisition *requisition);
88 static void gtk_toolbar_size_allocate (GtkWidget *widget,
89 GtkAllocation *allocation);
90 static void gtk_toolbar_style_set (GtkWidget *widget,
91 GtkStyle *prev_style);
92 static gboolean gtk_toolbar_focus (GtkWidget *widget,
93 GtkDirectionType dir);
94 static void gtk_toolbar_hierarchy_changed (GtkWidget *widget,
95 GtkWidget *previous_toplevel);
96 static void gtk_toolbar_show_all (GtkWidget *widget);
97 static void gtk_toolbar_add (GtkContainer *container,
99 static void gtk_toolbar_remove (GtkContainer *container,
101 static void gtk_toolbar_forall (GtkContainer *container,
102 gboolean include_internals,
103 GtkCallback callback,
104 gpointer callback_data);
106 static void gtk_real_toolbar_orientation_changed (GtkToolbar *toolbar,
107 GtkOrientation orientation);
108 static void gtk_real_toolbar_style_changed (GtkToolbar *toolbar,
109 GtkToolbarStyle style);
111 static GtkWidget * gtk_toolbar_internal_insert_element (GtkToolbar *toolbar,
112 GtkToolbarChildType type,
115 const char *tooltip_text,
116 const char *tooltip_private_text,
118 GtkSignalFunc callback,
121 gboolean has_mnemonic);
123 static GtkWidget * gtk_toolbar_internal_insert_item (GtkToolbar *toolbar,
125 const char *tooltip_text,
126 const char *tooltip_private_text,
128 GtkSignalFunc callback,
131 gboolean has_mnemonic);
133 static void gtk_toolbar_update_button_relief (GtkToolbar *toolbar);
135 static GtkReliefStyle get_button_relief (GtkToolbar *toolbar);
136 static gint get_space_size (GtkToolbar *toolbar);
137 static GtkToolbarSpaceStyle get_space_style (GtkToolbar *toolbar);
140 static GtkContainerClass *parent_class;
142 static guint toolbar_signals[LAST_SIGNAL] = { 0 };
146 gtk_toolbar_get_type (void)
148 static GtkType toolbar_type = 0;
152 static const GtkTypeInfo toolbar_info =
156 sizeof (GtkToolbarClass),
157 (GtkClassInitFunc) gtk_toolbar_class_init,
158 (GtkObjectInitFunc) gtk_toolbar_init,
159 /* reserved_1 */ NULL,
160 /* reserved_2 */ NULL,
161 (GtkClassInitFunc) NULL,
164 toolbar_type = gtk_type_unique (gtk_container_get_type (), &toolbar_info);
171 gtk_toolbar_class_init (GtkToolbarClass *class)
173 GObjectClass *gobject_class;
174 GtkObjectClass *object_class;
175 GtkWidgetClass *widget_class;
176 GtkContainerClass *container_class;
178 gobject_class = G_OBJECT_CLASS (class);
179 object_class = (GtkObjectClass *) class;
180 widget_class = (GtkWidgetClass *) class;
181 container_class = (GtkContainerClass *) class;
183 parent_class = gtk_type_class (gtk_container_get_type ());
185 object_class->destroy = gtk_toolbar_destroy;
186 gobject_class->set_property = gtk_toolbar_set_property;
187 gobject_class->get_property = gtk_toolbar_get_property;
189 widget_class->expose_event = gtk_toolbar_expose;
190 widget_class->size_request = gtk_toolbar_size_request;
191 widget_class->size_allocate = gtk_toolbar_size_allocate;
192 widget_class->style_set = gtk_toolbar_style_set;
193 widget_class->show_all = gtk_toolbar_show_all;
194 widget_class->focus = gtk_toolbar_focus;
195 widget_class->hierarchy_changed = gtk_toolbar_hierarchy_changed;
197 container_class->add = gtk_toolbar_add;
198 container_class->remove = gtk_toolbar_remove;
199 container_class->forall = gtk_toolbar_forall;
201 class->orientation_changed = gtk_real_toolbar_orientation_changed;
202 class->style_changed = gtk_real_toolbar_style_changed;
204 toolbar_signals[ORIENTATION_CHANGED] =
205 gtk_signal_new ("orientation_changed",
207 GTK_CLASS_TYPE (object_class),
208 GTK_SIGNAL_OFFSET (GtkToolbarClass, orientation_changed),
209 _gtk_marshal_VOID__ENUM,
211 GTK_TYPE_ORIENTATION);
212 toolbar_signals[STYLE_CHANGED] =
213 gtk_signal_new ("style_changed",
215 GTK_CLASS_TYPE (object_class),
216 GTK_SIGNAL_OFFSET (GtkToolbarClass, style_changed),
217 _gtk_marshal_VOID__ENUM,
219 GTK_TYPE_TOOLBAR_STYLE);
221 g_object_class_install_property (gobject_class,
223 g_param_spec_enum ("orientation",
225 _("The orientation of the toolbar"),
226 GTK_TYPE_ORIENTATION,
227 GTK_ORIENTATION_HORIZONTAL,
230 g_object_class_install_property (gobject_class,
232 g_param_spec_enum ("toolbar_style",
234 _("How to draw the toolbar"),
235 GTK_TYPE_TOOLBAR_STYLE,
240 gtk_widget_class_install_style_property (widget_class,
241 g_param_spec_int ("space_size",
243 _("Size of spacers"),
249 gtk_widget_class_install_style_property (widget_class,
250 g_param_spec_int ("internal_padding",
251 _("Internal padding"),
252 _("Amount of border space between the toolbar shadow and the buttons"),
258 gtk_widget_class_install_style_property (widget_class,
259 g_param_spec_enum ("space_style",
261 _("Whether spacers are vertical lines or just blank"),
262 GTK_TYPE_TOOLBAR_SPACE_STYLE,
267 gtk_widget_class_install_style_property (widget_class,
268 g_param_spec_enum ("button_relief",
270 _("Type of bevel around toolbar buttons"),
271 GTK_TYPE_RELIEF_STYLE,
275 gtk_widget_class_install_style_property (widget_class,
276 g_param_spec_enum ("shadow_type",
278 _("Style of bevel around the toolbar"),
279 GTK_TYPE_SHADOW_TYPE,
283 gtk_settings_install_property (g_param_spec_enum ("gtk-toolbar-style",
285 _("Whether default toolbars have text only, text and icons, icons only, etc."),
286 GTK_TYPE_TOOLBAR_STYLE,
290 gtk_settings_install_property (g_param_spec_enum ("gtk-toolbar-icon-size",
291 _("Toolbar icon size"),
292 _("Size of icons in default toolbars"),
294 GTK_ICON_SIZE_LARGE_TOOLBAR,
299 style_change_notify (GtkToolbar *toolbar)
301 if (!toolbar->style_set)
303 /* pretend it was set, then unset, thus reverting to new default */
304 toolbar->style_set = TRUE;
305 gtk_toolbar_unset_style (toolbar);
310 icon_size_change_notify (GtkToolbar *toolbar)
312 if (!toolbar->icon_size_set)
314 /* pretend it was set, then unset, thus reverting to new default */
315 toolbar->icon_size_set = TRUE;
316 gtk_toolbar_unset_icon_size (toolbar);
321 toolbar_screen_changed (GtkToolbar *toolbar)
323 GtkSettings *old_settings = g_object_get_data (G_OBJECT (toolbar), "gtk-toolbar-settings");
324 GtkSettings *settings;
326 if (gtk_widget_has_screen (GTK_WIDGET (toolbar)))
327 settings = gtk_widget_get_settings (GTK_WIDGET (toolbar));
331 if (settings == old_settings)
336 g_signal_handler_disconnect (old_settings, toolbar->style_set_connection);
337 g_signal_handler_disconnect (old_settings, toolbar->icon_size_connection);
339 g_object_unref (old_settings);
344 toolbar->style_set_connection = g_signal_connect_swapped (settings,
345 "notify::gtk-toolbar-style",
346 G_CALLBACK (style_change_notify),
349 toolbar->icon_size_connection = g_signal_connect_swapped (settings,
350 "notify::gtk-toolbar-icon-size",
351 G_CALLBACK (icon_size_change_notify),
355 g_object_ref (settings);
356 g_object_set_data (G_OBJECT (toolbar), "gtk-toolbar-settings", settings);
358 style_change_notify (toolbar);
359 icon_size_change_notify (toolbar);
362 g_object_set_data (G_OBJECT (toolbar), "gtk-toolbar-settings", NULL);
366 gtk_toolbar_hierarchy_changed (GtkWidget *widget,
367 GtkWidget *previous_toplevel)
371 if (previous_toplevel)
372 g_signal_handlers_disconnect_by_func (previous_toplevel,
373 (gpointer) toolbar_screen_changed,
376 toplevel = gtk_widget_get_toplevel (widget);
377 if (GTK_WIDGET_TOPLEVEL (toplevel))
378 g_signal_connect_swapped (toplevel,
380 G_CALLBACK (toolbar_screen_changed),
383 toolbar_screen_changed (GTK_TOOLBAR (widget));
387 gtk_toolbar_init (GtkToolbar *toolbar)
389 GTK_WIDGET_SET_FLAGS (toolbar, GTK_NO_WINDOW);
390 GTK_WIDGET_UNSET_FLAGS (toolbar, GTK_CAN_FOCUS);
392 toolbar->num_children = 0;
393 toolbar->children = NULL;
394 toolbar->orientation = GTK_ORIENTATION_HORIZONTAL;
395 toolbar->icon_size = DEFAULT_ICON_SIZE;
396 toolbar->tooltips = gtk_tooltips_new ();
397 g_object_ref (toolbar->tooltips);
398 gtk_object_sink (GTK_OBJECT (toolbar->tooltips));
400 toolbar->button_maxw = 0;
401 toolbar->button_maxh = 0;
403 toolbar->style_set = FALSE;
404 toolbar->icon_size_set = FALSE;
408 gtk_toolbar_set_property (GObject *object,
413 GtkToolbar *toolbar = GTK_TOOLBAR (object);
417 case PROP_ORIENTATION:
418 gtk_toolbar_set_orientation (toolbar, g_value_get_enum (value));
420 case PROP_TOOLBAR_STYLE:
421 gtk_toolbar_set_style (toolbar, g_value_get_enum (value));
427 gtk_toolbar_get_property (GObject *object,
432 GtkToolbar *toolbar = GTK_TOOLBAR (object);
436 case PROP_ORIENTATION:
437 g_value_set_enum (value, toolbar->orientation);
439 case PROP_TOOLBAR_STYLE:
440 g_value_set_enum (value, toolbar->style);
443 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
449 gtk_toolbar_new (void)
453 toolbar = gtk_type_new (gtk_toolbar_get_type ());
455 return GTK_WIDGET (toolbar);
459 gtk_toolbar_destroy (GtkObject *object)
464 g_return_if_fail (GTK_IS_TOOLBAR (object));
466 toolbar = GTK_TOOLBAR (object);
468 if (toolbar->tooltips)
470 gtk_object_unref (GTK_OBJECT (toolbar->tooltips));
471 toolbar->tooltips = NULL;
474 for (children = toolbar->children; children; children = children->next)
476 GtkToolbarChild *child;
478 child = children->data;
480 if (child->type != GTK_TOOLBAR_CHILD_SPACE)
482 gtk_widget_ref (child->widget);
483 gtk_widget_unparent (child->widget);
484 gtk_widget_destroy (child->widget);
485 gtk_widget_unref (child->widget);
490 g_list_free (toolbar->children);
491 toolbar->children = NULL;
493 GTK_OBJECT_CLASS (parent_class)->destroy (object);
497 gtk_toolbar_paint_space_line (GtkWidget *widget,
499 GtkToolbarChild *child)
502 GtkToolbarChildSpace *child_space;
505 g_return_if_fail (GTK_IS_TOOLBAR (widget));
506 g_return_if_fail (child != NULL);
507 g_return_if_fail (child->type == GTK_TOOLBAR_CHILD_SPACE);
509 toolbar = GTK_TOOLBAR (widget);
511 child_space = (GtkToolbarChildSpace *) child;
512 space_size = get_space_size (toolbar);
514 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
515 gtk_paint_vline (widget->style, widget->window,
516 GTK_WIDGET_STATE (widget), area, widget,
518 child_space->alloc_y + toolbar->button_maxh *
519 SPACE_LINE_START / SPACE_LINE_DIVISION,
520 child_space->alloc_y + toolbar->button_maxh *
521 SPACE_LINE_END / SPACE_LINE_DIVISION,
522 child_space->alloc_x +
524 widget->style->xthickness) / 2);
526 gtk_paint_hline (widget->style, widget->window,
527 GTK_WIDGET_STATE (widget), area, widget,
529 child_space->alloc_x + toolbar->button_maxw *
530 SPACE_LINE_START / SPACE_LINE_DIVISION,
531 child_space->alloc_x + toolbar->button_maxw *
532 SPACE_LINE_END / SPACE_LINE_DIVISION,
533 child_space->alloc_y +
535 widget->style->ythickness) / 2);
539 gtk_toolbar_expose (GtkWidget *widget,
540 GdkEventExpose *event)
544 GtkToolbarChild *child;
547 g_return_val_if_fail (GTK_IS_TOOLBAR (widget), FALSE);
548 g_return_val_if_fail (event != NULL, FALSE);
550 border_width = GTK_CONTAINER (widget)->border_width;
552 if (GTK_WIDGET_DRAWABLE (widget))
554 GtkShadowType shadow_type;
556 toolbar = GTK_TOOLBAR (widget);
558 gtk_widget_style_get (widget, "shadow_type", &shadow_type, NULL);
560 gtk_paint_box (widget->style,
562 GTK_WIDGET_STATE (widget),
564 &event->area, widget, "toolbar",
565 widget->allocation.x + border_width,
566 widget->allocation.y + border_width,
567 widget->allocation.width - border_width,
568 widget->allocation.height - border_width);
570 for (children = toolbar->children; children; children = children->next)
572 child = children->data;
574 if (child->type == GTK_TOOLBAR_CHILD_SPACE)
576 if (get_space_style (toolbar) == GTK_TOOLBAR_SPACE_LINE)
577 gtk_toolbar_paint_space_line (widget, &event->area, child);
580 gtk_container_propagate_expose (GTK_CONTAINER (widget),
590 gtk_toolbar_size_request (GtkWidget *widget,
591 GtkRequisition *requisition)
595 GtkToolbarChild *child;
597 gint button_maxw, button_maxh;
598 gint widget_maxw, widget_maxh;
599 GtkRequisition child_requisition;
603 g_return_if_fail (GTK_IS_TOOLBAR (widget));
604 g_return_if_fail (requisition != NULL);
606 toolbar = GTK_TOOLBAR (widget);
608 requisition->width = GTK_CONTAINER (toolbar)->border_width * 2;
609 requisition->height = GTK_CONTAINER (toolbar)->border_width * 2;
616 space_size = get_space_size (toolbar);
618 for (children = toolbar->children; children; children = children->next)
620 child = children->data;
624 case GTK_TOOLBAR_CHILD_SPACE:
625 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
626 requisition->width += space_size;
628 requisition->height += space_size;
632 case GTK_TOOLBAR_CHILD_BUTTON:
633 case GTK_TOOLBAR_CHILD_RADIOBUTTON:
634 case GTK_TOOLBAR_CHILD_TOGGLEBUTTON:
635 if (GTK_WIDGET_VISIBLE (child->widget))
637 gtk_widget_size_request (child->widget, &child_requisition);
640 button_maxw = MAX (button_maxw, child_requisition.width);
641 button_maxh = MAX (button_maxh, child_requisition.height);
646 case GTK_TOOLBAR_CHILD_WIDGET:
647 if (GTK_WIDGET_VISIBLE (child->widget))
649 gtk_widget_size_request (child->widget, &child_requisition);
651 widget_maxw = MAX (widget_maxw, child_requisition.width);
652 widget_maxh = MAX (widget_maxh, child_requisition.height);
654 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
655 requisition->width += child_requisition.width;
657 requisition->height += child_requisition.height;
663 g_assert_not_reached ();
667 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
669 requisition->width += nbuttons * button_maxw;
670 requisition->height += MAX (button_maxh, widget_maxh);
674 requisition->width += MAX (button_maxw, widget_maxw);
675 requisition->height += nbuttons * button_maxh;
679 gtk_widget_style_get (widget, "internal_padding", &ipadding, NULL);
681 requisition->width += 2 * ipadding;
682 requisition->height += 2 * ipadding;
684 toolbar->button_maxw = button_maxw;
685 toolbar->button_maxh = button_maxh;
689 gtk_toolbar_size_allocate (GtkWidget *widget,
690 GtkAllocation *allocation)
694 GtkToolbarChild *child;
695 GtkToolbarChildSpace *child_space;
697 GtkRequisition child_requisition;
698 gint x_border_width, y_border_width;
702 g_return_if_fail (GTK_IS_TOOLBAR (widget));
703 g_return_if_fail (allocation != NULL);
705 toolbar = GTK_TOOLBAR (widget);
706 widget->allocation = *allocation;
708 x_border_width = GTK_CONTAINER (toolbar)->border_width;
709 y_border_width = GTK_CONTAINER (toolbar)->border_width;
711 gtk_widget_style_get (widget, "internal_padding", &ipadding, NULL);
713 x_border_width += ipadding;
714 y_border_width += ipadding;
716 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
717 alloc.x = allocation->x + x_border_width;
719 alloc.y = allocation->y + y_border_width;
721 space_size = get_space_size (toolbar);
723 for (children = toolbar->children; children; children = children->next)
725 child = children->data;
729 case GTK_TOOLBAR_CHILD_SPACE:
731 child_space = (GtkToolbarChildSpace *) child;
733 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
735 child_space->alloc_x = alloc.x;
736 child_space->alloc_y = allocation->y + (allocation->height - toolbar->button_maxh) / 2;
737 alloc.x += space_size;
741 child_space->alloc_x = allocation->x + (allocation->width - toolbar->button_maxw) / 2;
742 child_space->alloc_y = alloc.y;
743 alloc.y += space_size;
748 case GTK_TOOLBAR_CHILD_BUTTON:
749 case GTK_TOOLBAR_CHILD_RADIOBUTTON:
750 case GTK_TOOLBAR_CHILD_TOGGLEBUTTON:
751 if (!GTK_WIDGET_VISIBLE (child->widget))
754 alloc.width = toolbar->button_maxw;
755 alloc.height = toolbar->button_maxh;
757 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
758 alloc.y = allocation->y + (allocation->height - toolbar->button_maxh) / 2;
760 alloc.x = allocation->x + (allocation->width - toolbar->button_maxw) / 2;
762 gtk_widget_size_allocate (child->widget, &alloc);
764 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
765 alloc.x += toolbar->button_maxw;
767 alloc.y += toolbar->button_maxh;
771 case GTK_TOOLBAR_CHILD_WIDGET:
772 if (!GTK_WIDGET_VISIBLE (child->widget))
775 gtk_widget_get_child_requisition (child->widget, &child_requisition);
777 alloc.width = child_requisition.width;
778 alloc.height = child_requisition.height;
780 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
781 alloc.y = allocation->y + (allocation->height - child_requisition.height) / 2;
783 alloc.x = allocation->x + (allocation->width - child_requisition.width) / 2;
785 gtk_widget_size_allocate (child->widget, &alloc);
787 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
788 alloc.x += child_requisition.width;
790 alloc.y += child_requisition.height;
795 g_assert_not_reached ();
801 gtk_toolbar_style_set (GtkWidget *widget,
802 GtkStyle *prev_style)
805 gtk_toolbar_update_button_relief (GTK_TOOLBAR (widget));
809 gtk_toolbar_focus (GtkWidget *widget,
810 GtkDirectionType dir)
812 /* Focus can't go in toolbars */
818 child_show_all (GtkWidget *widget)
820 /* Don't show our own children, since that would
821 * show labels we may intend to hide in icons-only mode
823 if (!g_object_get_data (G_OBJECT (widget),
824 "gtk-toolbar-is-child"))
825 gtk_widget_show_all (widget);
829 gtk_toolbar_show_all (GtkWidget *widget)
831 gtk_container_foreach (GTK_CONTAINER (widget),
832 (GtkCallback) child_show_all,
834 gtk_widget_show (widget);
838 gtk_toolbar_add (GtkContainer *container,
841 g_return_if_fail (GTK_IS_TOOLBAR (container));
842 g_return_if_fail (widget != NULL);
844 gtk_toolbar_append_widget (GTK_TOOLBAR (container), widget, NULL, NULL);
848 gtk_toolbar_remove (GtkContainer *container,
853 GtkToolbarChild *child;
855 g_return_if_fail (GTK_IS_TOOLBAR (container));
856 g_return_if_fail (widget != NULL);
858 toolbar = GTK_TOOLBAR (container);
860 for (children = toolbar->children; children; children = children->next)
862 child = children->data;
864 if ((child->type != GTK_TOOLBAR_CHILD_SPACE) && (child->widget == widget))
866 gboolean was_visible;
868 was_visible = GTK_WIDGET_VISIBLE (widget);
869 gtk_widget_unparent (widget);
871 toolbar->children = g_list_remove_link (toolbar->children, children);
873 g_list_free (children);
874 toolbar->num_children--;
876 if (was_visible && GTK_WIDGET_VISIBLE (container))
877 gtk_widget_queue_resize (GTK_WIDGET (container));
885 gtk_toolbar_forall (GtkContainer *container,
886 gboolean include_internals,
887 GtkCallback callback,
888 gpointer callback_data)
892 GtkToolbarChild *child;
894 g_return_if_fail (GTK_IS_TOOLBAR (container));
895 g_return_if_fail (callback != NULL);
897 toolbar = GTK_TOOLBAR (container);
899 for (children = toolbar->children; children; children = children->next)
901 child = children->data;
903 if (child->type != GTK_TOOLBAR_CHILD_SPACE)
904 (*callback) (child->widget, callback_data);
909 gtk_toolbar_append_item (GtkToolbar *toolbar,
911 const char *tooltip_text,
912 const char *tooltip_private_text,
914 GtkSignalFunc callback,
917 return gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_BUTTON,
919 tooltip_text, tooltip_private_text,
920 icon, callback, user_data,
921 toolbar->num_children);
925 gtk_toolbar_prepend_item (GtkToolbar *toolbar,
927 const char *tooltip_text,
928 const char *tooltip_private_text,
930 GtkSignalFunc callback,
933 return gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_BUTTON,
935 tooltip_text, tooltip_private_text,
936 icon, callback, user_data,
941 gtk_toolbar_internal_insert_item (GtkToolbar *toolbar,
943 const char *tooltip_text,
944 const char *tooltip_private_text,
946 GtkSignalFunc callback,
949 gboolean has_mnemonic)
951 return gtk_toolbar_internal_insert_element (toolbar, GTK_TOOLBAR_CHILD_BUTTON,
953 tooltip_text, tooltip_private_text,
954 icon, callback, user_data,
955 position, has_mnemonic);
959 gtk_toolbar_insert_item (GtkToolbar *toolbar,
961 const char *tooltip_text,
962 const char *tooltip_private_text,
964 GtkSignalFunc callback,
968 return gtk_toolbar_internal_insert_item (toolbar,
969 text, tooltip_text, tooltip_private_text,
970 icon, callback, user_data,
975 * gtk_toolbar_set_icon_size:
976 * @toolbar: A #GtkToolbar
977 * @icon_size: The #GtkIconSize that stock icons in the toolbar shall have.
979 * This function sets the size of stock icons in the toolbar. You
980 * can call it both before you add the icons and after they've been
981 * added. The size you set will override user preferences for the default
985 gtk_toolbar_set_icon_size (GtkToolbar *toolbar,
986 GtkIconSize icon_size)
989 GtkToolbarChild *child;
993 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
995 toolbar->icon_size_set = TRUE;
997 if (toolbar->icon_size == icon_size)
1000 toolbar->icon_size = icon_size;
1002 for (children = toolbar->children; children; children = children->next)
1004 child = children->data;
1005 if ((child->type == GTK_TOOLBAR_CHILD_BUTTON ||
1006 child->type == GTK_TOOLBAR_CHILD_TOGGLEBUTTON ||
1007 child->type == GTK_TOOLBAR_CHILD_RADIOBUTTON) &&
1008 GTK_IS_IMAGE (child->icon))
1010 image = GTK_IMAGE (child->icon);
1011 if (gtk_image_get_storage_type (image) == GTK_IMAGE_STOCK)
1013 gtk_image_get_stock (image, &stock_id, NULL);
1014 stock_id = g_strdup (stock_id);
1015 gtk_image_set_from_stock (image,
1023 gtk_widget_queue_resize (GTK_WIDGET (toolbar));
1027 * gtk_toolbar_get_icon_size:
1028 * @toolbar: a #GtkToolbar
1030 * Retrieves the icon size fo the toolbar. See gtk_toolbar_set_icon_size().
1032 * Return value: the current icon size for the icons on the toolbar.
1035 gtk_toolbar_get_icon_size (GtkToolbar *toolbar)
1037 g_return_val_if_fail (GTK_IS_TOOLBAR (toolbar), GTK_ICON_SIZE_LARGE_TOOLBAR);
1039 return toolbar->icon_size;
1043 * gtk_toolbar_unset_icon_size:
1044 * @toolbar: a #GtkToolbar
1046 * Unsets toolbar icon size set with gtk_toolbar_set_icon_size(), so that
1047 * user preferences will be used to determine the icon size.
1050 gtk_toolbar_unset_icon_size (GtkToolbar *toolbar)
1054 if (toolbar->icon_size_set)
1056 g_object_get (gtk_widget_get_settings (GTK_WIDGET (toolbar)),
1057 "gtk-toolbar-icon-size", &size,
1060 if (size != toolbar->icon_size)
1061 gtk_toolbar_set_icon_size (toolbar, size);
1063 toolbar->icon_size_set = FALSE;
1068 * gtk_toolbar_insert_stock:
1069 * @toolbar: A #GtkToolbar
1070 * @stock_id: The id of the stock item you want to insert
1071 * @tooltip_text: The text in the tooltip of the toolbar button
1072 * @tooltip_private_text: The private text of the tooltip
1073 * @callback: The callback called when the toolbar button is clicked.
1074 * @user_data: user data passed to callback
1075 * @position: The position the button shall be inserted at.
1076 * -1 means at the end.
1078 * Inserts a stock item at the specified position of the toolbar. If
1079 * @stock_id is not a known stock item ID, it's inserted verbatim,
1080 * except that underscores are used to mark mnemonics (see
1081 * gtk_label_new_with_mnemonic()).
1083 * Returns: the inserted widget
1086 gtk_toolbar_insert_stock (GtkToolbar *toolbar,
1087 const gchar *stock_id,
1088 const char *tooltip_text,
1089 const char *tooltip_private_text,
1090 GtkSignalFunc callback,
1097 if (gtk_stock_lookup (stock_id, &item))
1099 image = gtk_image_new_from_stock (stock_id, toolbar->icon_size);
1101 return gtk_toolbar_internal_insert_item (toolbar,
1104 tooltip_private_text,
1112 return gtk_toolbar_internal_insert_item (toolbar,
1115 tooltip_private_text,
1126 gtk_toolbar_append_space (GtkToolbar *toolbar)
1128 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_SPACE,
1132 toolbar->num_children);
1136 gtk_toolbar_prepend_space (GtkToolbar *toolbar)
1138 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_SPACE,
1146 gtk_toolbar_insert_space (GtkToolbar *toolbar,
1149 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_SPACE,
1157 * gtk_toolbar_remove_space:
1158 * @toolbar: a #GtkToolbar.
1159 * @position: the index of the space to remove.
1161 * Removes a space from the specified position.
1164 gtk_toolbar_remove_space (GtkToolbar *toolbar,
1168 GtkToolbarChild *child;
1171 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
1174 for (children = toolbar->children; children; children = children->next)
1176 child = children->data;
1180 if (child->type == GTK_TOOLBAR_CHILD_SPACE)
1182 toolbar->children = g_list_remove_link (toolbar->children, children);
1184 g_list_free (children);
1185 toolbar->num_children--;
1187 gtk_widget_queue_resize (GTK_WIDGET (toolbar));
1191 g_warning ("Toolbar position %d is not a space", position);
1200 g_warning ("Toolbar position %d doesn't exist", position);
1204 * gtk_toolbar_append_widget:
1205 * @toolbar: a #GtkToolbar.
1206 * @widget: a #GtkWidget to add to the toolbar.
1207 * @tooltip_text: the element's tooltip.
1208 * @tooltip_private_text: used for context-sensitive help about this toolbar element.
1210 * Adds a widget to the end of the given toolbar.
1213 gtk_toolbar_append_widget (GtkToolbar *toolbar,
1215 const gchar *tooltip_text,
1216 const gchar *tooltip_private_text)
1218 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_WIDGET,
1220 tooltip_text, tooltip_private_text,
1222 toolbar->num_children);
1226 * gtk_toolbar_prepend_widget:
1227 * @toolbar: a #GtkToolbar.
1228 * @widget: a #GtkWidget to add to the toolbar.
1229 * @tooltip_text: the element's tooltip.
1230 * @tooltip_private_text: used for context-sensitive help about this toolbar element.
1232 * Adds a widget to the beginning of the given toolbar.
1235 gtk_toolbar_prepend_widget (GtkToolbar *toolbar,
1237 const gchar *tooltip_text,
1238 const gchar *tooltip_private_text)
1240 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_WIDGET,
1242 tooltip_text, tooltip_private_text,
1248 * gtk_toolbar_insert_widget:
1249 * @toolbar: a #GtkToolbar.
1250 * @widget: a #GtkWidget to add to the toolbar.
1251 * @tooltip_text: the element's tooltip.
1252 * @tooltip_private_text: used for context-sensitive help about this toolbar element.
1253 * @position: the number of widgets to insert this widget after.
1255 * Inserts a widget in the toolbar at the given position.
1258 gtk_toolbar_insert_widget (GtkToolbar *toolbar,
1260 const char *tooltip_text,
1261 const char *tooltip_private_text,
1264 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_WIDGET,
1266 tooltip_text, tooltip_private_text,
1272 gtk_toolbar_append_element (GtkToolbar *toolbar,
1273 GtkToolbarChildType type,
1276 const char *tooltip_text,
1277 const char *tooltip_private_text,
1279 GtkSignalFunc callback,
1282 return gtk_toolbar_insert_element (toolbar, type, widget, text,
1283 tooltip_text, tooltip_private_text,
1284 icon, callback, user_data,
1285 toolbar->num_children);
1289 gtk_toolbar_prepend_element (GtkToolbar *toolbar,
1290 GtkToolbarChildType type,
1293 const char *tooltip_text,
1294 const char *tooltip_private_text,
1296 GtkSignalFunc callback,
1299 return gtk_toolbar_insert_element (toolbar, type, widget, text,
1300 tooltip_text, tooltip_private_text,
1301 icon, callback, user_data, 0);
1305 * gtk_toolbar_insert_element:
1306 * @toolbar: a #GtkToolbar.
1307 * @type: a value of type #GtkToolbarChildType that determines what @widget
1309 * @widget: a #GtkWidget, or %NULL.
1310 * @text: the element's label.
1311 * @tooltip_text: the element's tooltip.
1312 * @tooltip_private_text: used for context-sensitive help about this toolbar element.
1313 * @icon: a #GtkWidget that provides pictorial representation of the element's function.
1314 * @callback: the function to be executed when the button is pressed.
1315 * @user_data: any data you wish to pass to the callback.
1316 * @position: the number of widgets to insert this element after.
1318 * Inserts a new element in the toolbar at the given position.
1320 * If @type == %GTK_TOOLBAR_CHILD_WIDGET, @widget is used as the new element.
1321 * If @type == %GTK_TOOLBAR_CHILD_RADIOBUTTON, @widget is used to determine
1322 * the radio group for the new element. In all other cases, @widget must
1325 * Return value: the new toolbar element as a #GtkWidget.
1328 gtk_toolbar_insert_element (GtkToolbar *toolbar,
1329 GtkToolbarChildType type,
1332 const char *tooltip_text,
1333 const char *tooltip_private_text,
1335 GtkSignalFunc callback,
1339 g_return_val_if_fail (GTK_IS_TOOLBAR (toolbar), NULL);
1340 if (type == GTK_TOOLBAR_CHILD_WIDGET)
1342 g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
1344 else if (type != GTK_TOOLBAR_CHILD_RADIOBUTTON)
1345 g_return_val_if_fail (widget == NULL, NULL);
1347 return gtk_toolbar_internal_insert_element (toolbar, type, widget, text,
1348 tooltip_text, tooltip_private_text,
1349 icon, callback, user_data,
1354 gtk_toolbar_internal_insert_element (GtkToolbar *toolbar,
1355 GtkToolbarChildType type,
1358 const char *tooltip_text,
1359 const char *tooltip_private_text,
1361 GtkSignalFunc callback,
1364 gboolean has_mnemonic)
1366 GtkToolbarChild *child;
1369 g_return_val_if_fail (GTK_IS_TOOLBAR (toolbar), NULL);
1370 if (type == GTK_TOOLBAR_CHILD_WIDGET)
1372 g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
1374 else if (type != GTK_TOOLBAR_CHILD_RADIOBUTTON)
1375 g_return_val_if_fail (widget == NULL, NULL);
1377 if (type == GTK_TOOLBAR_CHILD_SPACE)
1378 child = (GtkToolbarChild *) g_new (GtkToolbarChildSpace, 1);
1380 child = g_new (GtkToolbarChild, 1);
1384 child->label = NULL;
1388 case GTK_TOOLBAR_CHILD_SPACE:
1389 child->widget = NULL;
1390 ((GtkToolbarChildSpace *) child)->alloc_x =
1391 ((GtkToolbarChildSpace *) child)->alloc_y = 0;
1394 case GTK_TOOLBAR_CHILD_WIDGET:
1395 child->widget = widget;
1398 case GTK_TOOLBAR_CHILD_BUTTON:
1399 case GTK_TOOLBAR_CHILD_TOGGLEBUTTON:
1400 case GTK_TOOLBAR_CHILD_RADIOBUTTON:
1401 if (type == GTK_TOOLBAR_CHILD_BUTTON)
1403 child->widget = gtk_button_new ();
1404 gtk_button_set_relief (GTK_BUTTON (child->widget), get_button_relief (toolbar));
1406 else if (type == GTK_TOOLBAR_CHILD_TOGGLEBUTTON)
1408 child->widget = gtk_toggle_button_new ();
1409 gtk_button_set_relief (GTK_BUTTON (child->widget), get_button_relief (toolbar));
1410 gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (child->widget),
1415 child->widget = gtk_radio_button_new (widget
1416 ? gtk_radio_button_get_group (GTK_RADIO_BUTTON (widget))
1418 gtk_button_set_relief (GTK_BUTTON (child->widget), get_button_relief (toolbar));
1419 gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (child->widget), FALSE);
1422 GTK_WIDGET_UNSET_FLAGS (child->widget, GTK_CAN_FOCUS);
1425 gtk_signal_connect (GTK_OBJECT (child->widget), "clicked",
1426 callback, user_data);
1428 if (toolbar->style == GTK_TOOLBAR_BOTH_HORIZ)
1429 box = gtk_hbox_new (FALSE, 0);
1431 box = gtk_vbox_new (FALSE, 0);
1432 gtk_container_add (GTK_CONTAINER (child->widget), box);
1433 gtk_widget_show (box);
1438 child->label = gtk_label_new_with_mnemonic (text);
1440 child->label = gtk_label_new (text);
1441 gtk_box_pack_end (GTK_BOX (box), child->label, FALSE, FALSE, 0);
1442 if (toolbar->style != GTK_TOOLBAR_ICONS)
1443 gtk_widget_show (child->label);
1448 child->icon = GTK_WIDGET (icon);
1449 gtk_box_pack_end (GTK_BOX (box), child->icon, FALSE, FALSE, 0);
1450 if (toolbar->style != GTK_TOOLBAR_TEXT)
1451 gtk_widget_show (child->icon);
1454 if (type != GTK_TOOLBAR_CHILD_WIDGET)
1456 /* Mark child as ours */
1457 g_object_set_data (G_OBJECT (child->widget),
1458 "gtk-toolbar-is-child",
1459 GINT_TO_POINTER (TRUE));
1461 gtk_widget_show (child->widget);
1465 g_assert_not_reached ();
1468 if ((type != GTK_TOOLBAR_CHILD_SPACE) && tooltip_text)
1469 gtk_tooltips_set_tip (toolbar->tooltips, child->widget,
1470 tooltip_text, tooltip_private_text);
1472 toolbar->children = g_list_insert (toolbar->children, child, position);
1473 toolbar->num_children++;
1475 if (type != GTK_TOOLBAR_CHILD_SPACE)
1476 gtk_widget_set_parent (child->widget, GTK_WIDGET (toolbar));
1478 gtk_widget_queue_resize (GTK_WIDGET (toolbar));
1480 return child->widget;
1484 gtk_toolbar_set_orientation (GtkToolbar *toolbar,
1485 GtkOrientation orientation)
1487 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
1489 gtk_signal_emit (GTK_OBJECT (toolbar), toolbar_signals[ORIENTATION_CHANGED], orientation);
1493 * gtk_toolbar_get_orientation:
1494 * @toolbar: a #GtkToolbar
1496 * Retrieves the current orientation of the toolbar. See
1497 * gtk_toolbar_set_orientation().
1499 * Return value: the orientation
1502 gtk_toolbar_get_orientation (GtkToolbar *toolbar)
1504 g_return_val_if_fail (GTK_IS_TOOLBAR (toolbar), GTK_ORIENTATION_HORIZONTAL);
1506 return toolbar->orientation;
1510 gtk_toolbar_set_style (GtkToolbar *toolbar,
1511 GtkToolbarStyle style)
1513 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
1515 toolbar->style_set = TRUE;
1516 gtk_signal_emit (GTK_OBJECT (toolbar), toolbar_signals[STYLE_CHANGED], style);
1520 * gtk_toolbar_get_style:
1521 * @toolbar: a #GtkToolbar
1523 * Retrieves whether the toolbar has text, icons, or both . See
1524 * gtk_toolbar_set_style().
1526 * Return value: the current style of @toolbar
1529 gtk_toolbar_get_style (GtkToolbar *toolbar)
1531 g_return_val_if_fail (GTK_IS_TOOLBAR (toolbar), GTK_TOOLBAR_BOTH);
1533 return toolbar->style;
1537 * gtk_toolbar_unset_style:
1538 * @toolbar: a #GtkToolbar
1540 * Unsets a toolbar style set with gtk_toolbar_set_style(), so that
1541 * user preferences will be used to determine the toolbar style.
1544 gtk_toolbar_unset_style (GtkToolbar *toolbar)
1546 GtkToolbarStyle style;
1548 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
1550 if (toolbar->style_set)
1552 g_object_get (gtk_widget_get_settings (GTK_WIDGET (toolbar)),
1553 "gtk-toolbar-style", &style,
1556 if (style != toolbar->style)
1557 gtk_signal_emit (GTK_OBJECT (toolbar), toolbar_signals[STYLE_CHANGED], style);
1559 toolbar->style_set = FALSE;
1564 gtk_toolbar_set_tooltips (GtkToolbar *toolbar,
1567 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
1570 gtk_tooltips_enable (toolbar->tooltips);
1572 gtk_tooltips_disable (toolbar->tooltips);
1576 * gtk_toolbar_get_tooltips:
1577 * @toolbar: a #GtkToolbar
1579 * Retrieves whether tooltips are enabled. See
1580 * gtk_toolbar_set_tooltips().
1582 * Return value: %TRUE if tooltips are enabled
1585 gtk_toolbar_get_tooltips (GtkToolbar *toolbar)
1587 g_return_val_if_fail (GTK_IS_TOOLBAR (toolbar), FALSE);
1589 return toolbar->tooltips->enabled;
1593 gtk_toolbar_update_button_relief (GtkToolbar *toolbar)
1596 GtkToolbarChild *child;
1597 GtkReliefStyle relief;
1599 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
1601 relief = get_button_relief (toolbar);
1603 for (children = toolbar->children; children; children = children->next)
1605 child = children->data;
1606 if (child->type == GTK_TOOLBAR_CHILD_BUTTON ||
1607 child->type == GTK_TOOLBAR_CHILD_RADIOBUTTON ||
1608 child->type == GTK_TOOLBAR_CHILD_TOGGLEBUTTON)
1609 gtk_button_set_relief (GTK_BUTTON (child->widget), relief);
1614 gtk_real_toolbar_orientation_changed (GtkToolbar *toolbar,
1615 GtkOrientation orientation)
1617 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
1619 if (toolbar->orientation != orientation)
1621 toolbar->orientation = orientation;
1622 gtk_widget_queue_resize (GTK_WIDGET (toolbar));
1623 g_object_notify (G_OBJECT (toolbar), "orientation");
1628 get_first_child (GtkContainer *container)
1630 GList *children = gtk_container_get_children (container);
1631 GtkWidget *result = children ? children->data : NULL;
1632 g_list_free (children);
1638 gtk_real_toolbar_style_changed (GtkToolbar *toolbar,
1639 GtkToolbarStyle style)
1642 GtkToolbarChild *child;
1643 GtkWidget* box = NULL;
1645 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
1647 if (toolbar->style != style)
1649 toolbar->style = style;
1651 for (children = toolbar->children; children; children = children->next)
1653 child = children->data;
1655 if (child->type == GTK_TOOLBAR_CHILD_BUTTON ||
1656 child->type == GTK_TOOLBAR_CHILD_RADIOBUTTON ||
1657 child->type == GTK_TOOLBAR_CHILD_TOGGLEBUTTON)
1660 case GTK_TOOLBAR_ICONS:
1661 if (child->icon && !GTK_WIDGET_VISIBLE (child->icon))
1662 gtk_widget_show (child->icon);
1664 if (child->label && GTK_WIDGET_VISIBLE (child->label))
1665 gtk_widget_hide (child->label);
1669 case GTK_TOOLBAR_TEXT:
1670 if (child->icon && GTK_WIDGET_VISIBLE (child->icon))
1671 gtk_widget_hide (child->icon);
1673 if (child->label && !GTK_WIDGET_VISIBLE (child->label))
1674 gtk_widget_show (child->label);
1678 case GTK_TOOLBAR_BOTH:
1679 if (child->icon && !GTK_WIDGET_VISIBLE (child->icon))
1680 gtk_widget_show (child->icon);
1682 if (child->label && !GTK_WIDGET_VISIBLE (child->label))
1683 gtk_widget_show (child->label);
1685 box = get_first_child (GTK_CONTAINER (child->widget));
1687 if (GTK_IS_HBOX (box))
1691 gtk_object_ref (GTK_OBJECT (child->icon));
1692 gtk_container_remove (GTK_CONTAINER (box),
1697 gtk_object_ref (GTK_OBJECT (child->label));
1698 gtk_container_remove (GTK_CONTAINER (box),
1701 gtk_container_remove (GTK_CONTAINER (child->widget),
1704 box = gtk_vbox_new (FALSE, 0);
1705 gtk_widget_show (box);
1709 gtk_box_pack_end (GTK_BOX (box), child->label, FALSE, FALSE, 0);
1710 gtk_object_unref (GTK_OBJECT (child->label));
1714 gtk_box_pack_end (GTK_BOX (box), child->icon, FALSE, FALSE, 0);
1715 gtk_object_unref (GTK_OBJECT (child->icon));
1717 gtk_container_add (GTK_CONTAINER (child->widget),
1723 case GTK_TOOLBAR_BOTH_HORIZ:
1724 if (child->icon && !GTK_WIDGET_VISIBLE (child->icon))
1725 gtk_widget_show (child->icon);
1726 if (child->label && !GTK_WIDGET_VISIBLE (child->label))
1727 gtk_widget_show (child->label);
1729 box = get_first_child (GTK_CONTAINER (child->widget));
1731 if (GTK_IS_VBOX (box))
1735 gtk_object_ref (GTK_OBJECT (child->icon));
1736 gtk_container_remove (GTK_CONTAINER (box),
1741 gtk_object_ref (GTK_OBJECT (child->label));
1742 gtk_container_remove (GTK_CONTAINER (box),
1745 gtk_container_remove (GTK_CONTAINER (child->widget),
1748 box = gtk_hbox_new (FALSE, 0);
1749 gtk_widget_show (box);
1753 gtk_box_pack_end (GTK_BOX (box), child->label, TRUE, TRUE, 0);
1754 gtk_object_unref (GTK_OBJECT (child->label));
1758 gtk_box_pack_end (GTK_BOX (box), child->icon, FALSE, FALSE, 0);
1759 gtk_object_unref (GTK_OBJECT (child->icon));
1761 gtk_container_add (GTK_CONTAINER (child->widget), box);
1768 g_assert_not_reached ();
1772 gtk_widget_queue_resize (GTK_WIDGET (toolbar));
1773 g_object_notify (G_OBJECT (toolbar), "toolbar_style");
1778 static GtkReliefStyle
1779 get_button_relief (GtkToolbar *toolbar)
1781 GtkReliefStyle button_relief = GTK_RELIEF_NORMAL;
1783 gtk_widget_ensure_style (GTK_WIDGET (toolbar));
1784 gtk_widget_style_get (GTK_WIDGET (toolbar),
1785 "button_relief", &button_relief,
1788 return button_relief;
1792 get_space_size (GtkToolbar *toolbar)
1794 gint space_size = DEFAULT_SPACE_SIZE;
1796 gtk_widget_style_get (GTK_WIDGET (toolbar),
1797 "space_size", &space_size,
1803 static GtkToolbarSpaceStyle
1804 get_space_style (GtkToolbar *toolbar)
1806 GtkToolbarSpaceStyle space_style = DEFAULT_SPACE_STYLE;
1808 gtk_widget_style_get (GTK_WIDGET (toolbar),
1809 "space_style", &space_style,