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 Library 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 * Library General Public License for more details.
15 * You should have received a copy of the GNU Library 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.
21 #include "gtkbutton.h"
22 #include "gtktogglebutton.h"
23 #include "gtkradiobutton.h"
26 #include "gtktoolbar.h"
29 #define DEFAULT_SPACE_SIZE 5
38 typedef void (*GtkToolbarSignal1) (GtkObject *object,
42 static void gtk_toolbar_marshal_signal_1 (GtkObject *object,
48 static void gtk_toolbar_class_init (GtkToolbarClass *class);
49 static void gtk_toolbar_init (GtkToolbar *toolbar);
50 static void gtk_toolbar_destroy (GtkObject *object);
51 static void gtk_toolbar_map (GtkWidget *widget);
52 static void gtk_toolbar_unmap (GtkWidget *widget);
53 static void gtk_toolbar_draw (GtkWidget *widget,
55 static gint gtk_toolbar_expose (GtkWidget *widget,
56 GdkEventExpose *event);
57 static void gtk_toolbar_size_request (GtkWidget *widget,
58 GtkRequisition *requisition);
59 static void gtk_toolbar_size_allocate (GtkWidget *widget,
60 GtkAllocation *allocation);
61 static void gtk_toolbar_add (GtkContainer *container,
63 static void gtk_toolbar_remove (GtkContainer *container,
65 static void gtk_toolbar_foreach (GtkContainer *container,
67 gpointer callback_data);
68 static void gtk_real_toolbar_orientation_changed (GtkToolbar *toolbar,
69 GtkOrientation orientation);
70 static void gtk_real_toolbar_style_changed (GtkToolbar *toolbar,
71 GtkToolbarStyle style);
74 static GtkContainerClass *parent_class;
76 static guint toolbar_signals[LAST_SIGNAL] = { 0 };
80 gtk_toolbar_get_type (void)
82 static guint toolbar_type = 0;
86 GtkTypeInfo toolbar_info =
90 sizeof (GtkToolbarClass),
91 (GtkClassInitFunc) gtk_toolbar_class_init,
92 (GtkObjectInitFunc) gtk_toolbar_init,
93 /* reversed_1 */ NULL,
94 /* reversed_2 */ NULL,
95 (GtkClassInitFunc) NULL,
98 toolbar_type = gtk_type_unique (gtk_container_get_type (), &toolbar_info);
105 gtk_toolbar_class_init (GtkToolbarClass *class)
107 GtkObjectClass *object_class;
108 GtkWidgetClass *widget_class;
109 GtkContainerClass *container_class;
111 object_class = (GtkObjectClass *) class;
112 widget_class = (GtkWidgetClass *) class;
113 container_class = (GtkContainerClass *) class;
115 parent_class = gtk_type_class (gtk_container_get_type ());
117 toolbar_signals[ORIENTATION_CHANGED] =
118 gtk_signal_new ("orientation_changed",
121 GTK_SIGNAL_OFFSET (GtkToolbarClass, orientation_changed),
122 gtk_toolbar_marshal_signal_1,
125 toolbar_signals[STYLE_CHANGED] =
126 gtk_signal_new ("style_changed",
129 GTK_SIGNAL_OFFSET (GtkToolbarClass, style_changed),
130 gtk_toolbar_marshal_signal_1,
134 gtk_object_class_add_signals (object_class, toolbar_signals, LAST_SIGNAL);
136 object_class->destroy = gtk_toolbar_destroy;
138 widget_class->map = gtk_toolbar_map;
139 widget_class->unmap = gtk_toolbar_unmap;
140 widget_class->draw = gtk_toolbar_draw;
141 widget_class->expose_event = gtk_toolbar_expose;
142 widget_class->size_request = gtk_toolbar_size_request;
143 widget_class->size_allocate = gtk_toolbar_size_allocate;
145 container_class->add = gtk_toolbar_add;
146 container_class->remove = gtk_toolbar_remove;
147 container_class->foreach = gtk_toolbar_foreach;
148 container_class->focus = NULL;
150 class->orientation_changed = gtk_real_toolbar_orientation_changed;
151 class->style_changed = gtk_real_toolbar_style_changed;
155 gtk_toolbar_init (GtkToolbar *toolbar)
157 GTK_WIDGET_SET_FLAGS (toolbar, GTK_NO_WINDOW);
158 GTK_WIDGET_UNSET_FLAGS (toolbar, GTK_CAN_FOCUS);
160 toolbar->num_children = 0;
161 toolbar->children = NULL;
162 toolbar->orientation = GTK_ORIENTATION_HORIZONTAL;
163 toolbar->style = GTK_TOOLBAR_ICONS;
164 toolbar->relief = GTK_RELIEF_NORMAL;
165 toolbar->space_size = DEFAULT_SPACE_SIZE;
166 toolbar->tooltips = gtk_tooltips_new ();
167 toolbar->button_maxw = 0;
168 toolbar->button_maxh = 0;
172 gtk_toolbar_new (GtkOrientation orientation,
173 GtkToolbarStyle style)
177 toolbar = gtk_type_new (gtk_toolbar_get_type ());
179 toolbar->orientation = orientation;
180 toolbar->style = style;
182 return GTK_WIDGET (toolbar);
186 gtk_toolbar_destroy (GtkObject *object)
191 g_return_if_fail (object != NULL);
192 g_return_if_fail (GTK_IS_TOOLBAR (object));
194 toolbar = GTK_TOOLBAR (object);
196 gtk_object_unref (GTK_OBJECT (toolbar->tooltips));
197 toolbar->tooltips = NULL;
199 for (children = toolbar->children; children; children = children->next)
201 GtkToolbarChild *child;
203 child = children->data;
205 if (child->type != GTK_TOOLBAR_CHILD_SPACE)
207 gtk_widget_ref (child->widget);
208 gtk_widget_unparent (child->widget);
209 gtk_widget_destroy (child->widget);
210 gtk_widget_unref (child->widget);
216 g_list_free (toolbar->children);
217 toolbar->children = NULL;
219 if (GTK_OBJECT_CLASS (parent_class)->destroy)
220 (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
224 gtk_toolbar_map (GtkWidget *widget)
228 GtkToolbarChild *child;
230 g_return_if_fail (widget != NULL);
231 g_return_if_fail (GTK_IS_TOOLBAR (widget));
233 toolbar = GTK_TOOLBAR (widget);
234 GTK_WIDGET_SET_FLAGS (toolbar, GTK_MAPPED);
236 for (children = toolbar->children; children; children = children->next)
238 child = children->data;
240 if ((child->type != GTK_TOOLBAR_CHILD_SPACE)
241 && GTK_WIDGET_VISIBLE (child->widget) && !GTK_WIDGET_MAPPED (child->widget))
242 gtk_widget_map (child->widget);
247 gtk_toolbar_unmap (GtkWidget *widget)
251 GtkToolbarChild *child;
253 g_return_if_fail (widget != NULL);
254 g_return_if_fail (GTK_IS_TOOLBAR (widget));
256 toolbar = GTK_TOOLBAR (widget);
257 GTK_WIDGET_UNSET_FLAGS (toolbar, GTK_MAPPED);
259 for (children = toolbar->children; children; children = children->next)
261 child = children->data;
263 if ((child->type != GTK_TOOLBAR_CHILD_SPACE)
264 && GTK_WIDGET_VISIBLE (child->widget) && GTK_WIDGET_MAPPED (child->widget))
265 gtk_widget_unmap (child->widget);
270 gtk_toolbar_draw (GtkWidget *widget,
275 GtkToolbarChild *child;
276 GdkRectangle child_area;
278 g_return_if_fail (widget != NULL);
279 g_return_if_fail (GTK_IS_TOOLBAR (widget));
281 if (GTK_WIDGET_DRAWABLE (widget))
283 toolbar = GTK_TOOLBAR (widget);
285 for (children = toolbar->children; children; children = children->next)
287 child = children->data;
289 if ((child->type != GTK_TOOLBAR_CHILD_SPACE)
290 && gtk_widget_intersect (child->widget, area, &child_area))
291 gtk_widget_draw (child->widget, &child_area);
297 gtk_toolbar_expose (GtkWidget *widget,
298 GdkEventExpose *event)
302 GtkToolbarChild *child;
303 GdkEventExpose child_event;
305 g_return_val_if_fail (widget != NULL, FALSE);
306 g_return_val_if_fail (GTK_IS_TOOLBAR (widget), FALSE);
307 g_return_val_if_fail (event != NULL, FALSE);
309 if (GTK_WIDGET_DRAWABLE (widget))
311 toolbar = GTK_TOOLBAR (widget);
313 child_event = *event;
315 for (children = toolbar->children; children; children = children->next)
317 child = children->data;
319 if ((child->type != GTK_TOOLBAR_CHILD_SPACE)
320 && GTK_WIDGET_NO_WINDOW (child->widget)
321 && gtk_widget_intersect (child->widget, &event->area, &child_event.area))
322 gtk_widget_event (child->widget, (GdkEvent *) &child_event);
330 gtk_toolbar_size_request (GtkWidget *widget,
331 GtkRequisition *requisition)
335 GtkToolbarChild *child;
337 gint button_maxw, button_maxh;
338 gint widget_maxw, widget_maxh;
340 g_return_if_fail (widget != NULL);
341 g_return_if_fail (GTK_IS_TOOLBAR (widget));
342 g_return_if_fail (requisition != NULL);
344 toolbar = GTK_TOOLBAR (widget);
346 requisition->width = GTK_CONTAINER (toolbar)->border_width * 2;
347 requisition->height = GTK_CONTAINER (toolbar)->border_width * 2;
354 for (children = toolbar->children; children; children = children->next)
356 child = children->data;
360 case GTK_TOOLBAR_CHILD_SPACE:
361 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
362 requisition->width += toolbar->space_size;
364 requisition->height += toolbar->space_size;
368 case GTK_TOOLBAR_CHILD_BUTTON:
369 case GTK_TOOLBAR_CHILD_RADIOBUTTON:
370 case GTK_TOOLBAR_CHILD_TOGGLEBUTTON:
371 if (GTK_WIDGET_VISIBLE (child->widget))
373 gtk_widget_size_request (child->widget, &child->widget->requisition);
376 button_maxw = MAX (button_maxw, child->widget->requisition.width);
377 button_maxh = MAX (button_maxh, child->widget->requisition.height);
382 case GTK_TOOLBAR_CHILD_WIDGET:
383 if (GTK_WIDGET_VISIBLE (child->widget))
385 gtk_widget_size_request (child->widget, &child->widget->requisition);
387 widget_maxw = MAX (widget_maxw, child->widget->requisition.width);
388 widget_maxh = MAX (widget_maxh, child->widget->requisition.height);
390 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
391 requisition->width += child->widget->requisition.width;
393 requisition->height += child->widget->requisition.height;
399 g_assert_not_reached ();
403 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
405 requisition->width += nbuttons * button_maxw;
406 requisition->height += MAX (button_maxh, widget_maxh);
410 requisition->width += MAX (button_maxw, widget_maxw);
411 requisition->height += nbuttons * button_maxh;
414 toolbar->button_maxw = button_maxw;
415 toolbar->button_maxh = button_maxh;
419 gtk_toolbar_size_allocate (GtkWidget *widget,
420 GtkAllocation *allocation)
424 GtkToolbarChild *child;
428 g_return_if_fail (widget != NULL);
429 g_return_if_fail (GTK_IS_TOOLBAR (widget));
430 g_return_if_fail (allocation != NULL);
432 toolbar = GTK_TOOLBAR (widget);
433 widget->allocation = *allocation;
435 border_width = GTK_CONTAINER (toolbar)->border_width;
437 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
438 alloc.x = allocation->x + border_width;
440 alloc.y = allocation->y + border_width;
442 for (children = toolbar->children; children; children = children->next)
444 child = children->data;
448 case GTK_TOOLBAR_CHILD_SPACE:
449 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
450 alloc.x += toolbar->space_size;
452 alloc.y += toolbar->space_size;
456 case GTK_TOOLBAR_CHILD_BUTTON:
457 case GTK_TOOLBAR_CHILD_RADIOBUTTON:
458 case GTK_TOOLBAR_CHILD_TOGGLEBUTTON:
459 if (!GTK_WIDGET_VISIBLE (child->widget))
462 alloc.width = toolbar->button_maxw;
463 alloc.height = toolbar->button_maxh;
465 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
466 alloc.y = allocation->y + (allocation->height - toolbar->button_maxh) / 2;
468 alloc.x = allocation->x + (allocation->width - toolbar->button_maxw) / 2;
470 gtk_widget_size_allocate (child->widget, &alloc);
472 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
473 alloc.x += toolbar->button_maxw;
475 alloc.y += toolbar->button_maxh;
479 case GTK_TOOLBAR_CHILD_WIDGET:
480 if (!GTK_WIDGET_VISIBLE (child->widget))
483 alloc.width = child->widget->requisition.width;
484 alloc.height = child->widget->requisition.height;
486 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
487 alloc.y = allocation->y + (allocation->height - child->widget->requisition.height) / 2;
489 alloc.x = allocation->x + (allocation->width - child->widget->requisition.width) / 2;
491 gtk_widget_size_allocate (child->widget, &alloc);
493 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
494 alloc.x += child->widget->requisition.width;
496 alloc.y += child->widget->requisition.height;
501 g_assert_not_reached ();
507 gtk_toolbar_add (GtkContainer *container,
510 g_return_if_fail (container != NULL);
511 g_return_if_fail (GTK_IS_TOOLBAR (container));
512 g_return_if_fail (widget != NULL);
514 gtk_toolbar_append_widget (GTK_TOOLBAR (container), widget, NULL, NULL);
518 gtk_toolbar_remove (GtkContainer *container,
523 GtkToolbarChild *child;
525 g_return_if_fail (container != NULL);
526 g_return_if_fail (GTK_IS_TOOLBAR (container));
527 g_return_if_fail (widget != NULL);
529 toolbar = GTK_TOOLBAR (container);
531 for (children = toolbar->children; children; children = children->next)
533 child = children->data;
535 if ((child->type != GTK_TOOLBAR_CHILD_SPACE) && (child->widget == widget))
537 gboolean was_visible;
539 was_visible = GTK_WIDGET_VISIBLE (widget);
540 gtk_widget_unparent (widget);
542 toolbar->children = g_list_remove_link (toolbar->children, children);
544 g_list_free (children);
545 toolbar->num_children--;
547 if (was_visible && GTK_WIDGET_VISIBLE (container))
548 gtk_widget_queue_resize (GTK_WIDGET (container));
556 gtk_toolbar_foreach (GtkContainer *container,
557 GtkCallback callback,
558 gpointer callback_data)
562 GtkToolbarChild *child;
564 g_return_if_fail (container != NULL);
565 g_return_if_fail (GTK_IS_TOOLBAR (container));
566 g_return_if_fail (callback != NULL);
568 toolbar = GTK_TOOLBAR (container);
570 for (children = toolbar->children; children; children = children->next)
572 child = children->data;
574 if (child->type != GTK_TOOLBAR_CHILD_SPACE)
575 (*callback) (child->widget, callback_data);
580 gtk_toolbar_append_item (GtkToolbar *toolbar,
582 const char *tooltip_text,
583 const char *tooltip_private_text,
585 GtkSignalFunc callback,
588 return gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_BUTTON,
590 tooltip_text, tooltip_private_text,
591 icon, callback, user_data,
592 toolbar->num_children);
596 gtk_toolbar_prepend_item (GtkToolbar *toolbar,
598 const char *tooltip_text,
599 const char *tooltip_private_text,
601 GtkSignalFunc callback,
604 return gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_BUTTON,
606 tooltip_text, tooltip_private_text,
607 icon, callback, user_data,
612 gtk_toolbar_insert_item (GtkToolbar *toolbar,
614 const char *tooltip_text,
615 const char *tooltip_private_text,
617 GtkSignalFunc callback,
621 return gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_BUTTON,
623 tooltip_text, tooltip_private_text,
624 icon, callback, user_data,
629 gtk_toolbar_append_space (GtkToolbar *toolbar)
631 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_SPACE,
635 toolbar->num_children);
639 gtk_toolbar_prepend_space (GtkToolbar *toolbar)
641 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_SPACE,
649 gtk_toolbar_insert_space (GtkToolbar *toolbar,
652 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_SPACE,
660 gtk_toolbar_append_widget (GtkToolbar *toolbar,
662 const gchar *tooltip_text,
663 const gchar *tooltip_private_text)
665 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_WIDGET,
667 tooltip_text, tooltip_private_text,
669 toolbar->num_children);
673 gtk_toolbar_prepend_widget (GtkToolbar *toolbar,
675 const gchar *tooltip_text,
676 const gchar *tooltip_private_text)
678 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_WIDGET,
680 tooltip_text, tooltip_private_text,
682 toolbar->num_children);
686 gtk_toolbar_insert_widget (GtkToolbar *toolbar,
688 const char *tooltip_text,
689 const char *tooltip_private_text,
692 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_WIDGET,
694 tooltip_text, tooltip_private_text,
700 gtk_toolbar_append_element (GtkToolbar *toolbar,
701 GtkToolbarChildType type,
704 const char *tooltip_text,
705 const char *tooltip_private_text,
707 GtkSignalFunc callback,
710 return gtk_toolbar_insert_element (toolbar, type, widget, text,
711 tooltip_text, tooltip_private_text,
712 icon, callback, user_data,
713 toolbar->num_children);
717 gtk_toolbar_prepend_element (GtkToolbar *toolbar,
718 GtkToolbarChildType type,
721 const char *tooltip_text,
722 const char *tooltip_private_text,
724 GtkSignalFunc callback,
727 return gtk_toolbar_insert_element (toolbar, type, widget, text,
728 tooltip_text, tooltip_private_text,
729 icon, callback, user_data, 0);
733 gtk_toolbar_insert_element (GtkToolbar *toolbar,
734 GtkToolbarChildType type,
737 const char *tooltip_text,
738 const char *tooltip_private_text,
740 GtkSignalFunc callback,
744 GtkToolbarChild *child;
747 g_return_val_if_fail (toolbar != NULL, NULL);
748 g_return_val_if_fail (GTK_IS_TOOLBAR (toolbar), NULL);
749 g_return_val_if_fail ((type != GTK_TOOLBAR_CHILD_WIDGET) || (widget != NULL), NULL);
751 child = g_new (GtkToolbarChild, 1);
758 case GTK_TOOLBAR_CHILD_SPACE:
759 child->widget = NULL;
762 case GTK_TOOLBAR_CHILD_WIDGET:
763 child->widget = widget;
766 case GTK_TOOLBAR_CHILD_BUTTON:
767 case GTK_TOOLBAR_CHILD_TOGGLEBUTTON:
768 case GTK_TOOLBAR_CHILD_RADIOBUTTON:
769 if (type == GTK_TOOLBAR_CHILD_BUTTON)
771 child->widget = gtk_button_new ();
772 gtk_button_set_relief (GTK_BUTTON (child->widget), toolbar->relief);
774 else if (type == GTK_TOOLBAR_CHILD_TOGGLEBUTTON)
776 child->widget = gtk_toggle_button_new ();
777 gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (child->widget),
782 child->widget = gtk_radio_button_new (widget
783 ? gtk_radio_button_group (GTK_RADIO_BUTTON (widget))
785 gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (child->widget), FALSE);
789 gtk_signal_connect (GTK_OBJECT (child->widget), "clicked",
790 callback, user_data);
792 vbox = gtk_vbox_new (FALSE, 0);
793 gtk_container_add (GTK_CONTAINER (child->widget), vbox);
794 gtk_widget_show (vbox);
798 child->label = gtk_label_new (text);
799 gtk_box_pack_end (GTK_BOX (vbox), child->label, FALSE, FALSE, 0);
800 if (toolbar->style != GTK_TOOLBAR_ICONS)
801 gtk_widget_show (child->label);
806 child->icon = GTK_WIDGET (icon);
807 gtk_box_pack_end (GTK_BOX (vbox), child->icon, FALSE, FALSE, 0);
808 if (toolbar->style != GTK_TOOLBAR_TEXT)
809 gtk_widget_show (child->icon);
812 gtk_widget_show (child->widget);
816 g_assert_not_reached ();
819 if ((type != GTK_TOOLBAR_CHILD_SPACE) && tooltip_text)
820 gtk_tooltips_set_tip (toolbar->tooltips, child->widget,
821 tooltip_text, tooltip_private_text);
823 toolbar->children = g_list_insert (toolbar->children, child, position);
824 toolbar->num_children++;
826 if (type != GTK_TOOLBAR_CHILD_SPACE)
827 gtk_widget_set_parent (child->widget, GTK_WIDGET (toolbar));
829 if ((type != GTK_TOOLBAR_CHILD_SPACE) && GTK_WIDGET_VISIBLE (toolbar))
831 if (GTK_WIDGET_REALIZED (toolbar)
832 && !GTK_WIDGET_REALIZED (child->widget))
833 gtk_widget_realize (child->widget);
835 if (GTK_WIDGET_MAPPED (toolbar)
836 && !GTK_WIDGET_MAPPED (child->widget))
837 gtk_widget_map (child->widget);
840 if (GTK_WIDGET_VISIBLE (toolbar) &&
841 ((type == GTK_TOOLBAR_CHILD_SPACE) ||
842 GTK_WIDGET_VISIBLE (child->widget)))
843 gtk_widget_queue_resize (GTK_WIDGET (toolbar));
845 return child->widget;
849 gtk_toolbar_set_orientation (GtkToolbar *toolbar,
850 GtkOrientation orientation)
852 gtk_signal_emit (GTK_OBJECT (toolbar), toolbar_signals[ORIENTATION_CHANGED], orientation);
856 gtk_toolbar_set_style (GtkToolbar *toolbar,
857 GtkToolbarStyle style)
859 gtk_signal_emit (GTK_OBJECT (toolbar), toolbar_signals[STYLE_CHANGED], style);
863 gtk_toolbar_set_space_size (GtkToolbar *toolbar,
866 g_return_if_fail (toolbar != NULL);
867 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
869 if (toolbar->space_size != space_size)
871 toolbar->space_size = space_size;
872 gtk_widget_queue_resize (GTK_WIDGET (toolbar));
877 gtk_toolbar_set_tooltips (GtkToolbar *toolbar,
880 g_return_if_fail (toolbar != NULL);
881 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
884 gtk_tooltips_enable (toolbar->tooltips);
886 gtk_tooltips_disable (toolbar->tooltips);
890 gtk_toolbar_set_button_relief (GtkToolbar *toolbar,
891 GtkReliefStyle relief)
894 GtkToolbarChild *child;
896 g_return_if_fail (toolbar != NULL);
897 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
899 if (toolbar->relief != relief)
901 toolbar->relief = relief;
903 for (children = toolbar->children; children; children = children->next)
905 child = children->data;
906 if (child->type == GTK_TOOLBAR_CHILD_BUTTON)
907 gtk_button_set_relief (GTK_BUTTON (child->widget), relief);
910 gtk_widget_queue_resize (GTK_WIDGET (toolbar));
915 gtk_toolbar_get_button_relief (GtkToolbar *toolbar)
917 g_return_val_if_fail (toolbar != NULL, GTK_RELIEF_NORMAL);
918 g_return_val_if_fail (GTK_IS_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
920 return toolbar->relief;
924 gtk_toolbar_marshal_signal_1 (GtkObject *object,
929 GtkToolbarSignal1 rfunc;
931 rfunc = (GtkToolbarSignal1) func;
933 (*rfunc) (object, GTK_VALUE_ENUM (args[0]), func_data);
937 gtk_real_toolbar_orientation_changed (GtkToolbar *toolbar,
938 GtkOrientation orientation)
940 g_return_if_fail (toolbar != NULL);
941 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
943 if (toolbar->orientation != orientation)
945 toolbar->orientation = orientation;
946 gtk_widget_queue_resize (GTK_WIDGET (toolbar));
951 gtk_real_toolbar_style_changed (GtkToolbar *toolbar,
952 GtkToolbarStyle style)
955 GtkToolbarChild *child;
957 g_return_if_fail (toolbar != NULL);
958 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
960 if (toolbar->style != style)
962 toolbar->style = style;
964 for (children = toolbar->children; children; children = children->next)
966 child = children->data;
968 if (child->type == GTK_TOOLBAR_CHILD_BUTTON ||
969 child->type == GTK_TOOLBAR_CHILD_RADIOBUTTON ||
970 child->type == GTK_TOOLBAR_CHILD_TOGGLEBUTTON)
973 case GTK_TOOLBAR_ICONS:
974 if (child->icon && !GTK_WIDGET_VISIBLE (child->icon))
975 gtk_widget_show (child->icon);
977 if (child->label && GTK_WIDGET_VISIBLE (child->label))
978 gtk_widget_hide (child->label);
982 case GTK_TOOLBAR_TEXT:
983 if (child->icon && GTK_WIDGET_VISIBLE (child->icon))
984 gtk_widget_hide (child->icon);
986 if (child->label && !GTK_WIDGET_VISIBLE (child->label))
987 gtk_widget_show (child->label);
991 case GTK_TOOLBAR_BOTH:
992 if (child->icon && !GTK_WIDGET_VISIBLE (child->icon))
993 gtk_widget_show (child->icon);
995 if (child->label && !GTK_WIDGET_VISIBLE (child->label))
996 gtk_widget_show (child->label);
1001 g_assert_not_reached ();
1005 gtk_widget_queue_resize (GTK_WIDGET (toolbar));