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 Free
17 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 #include "gtkbutton.h"
21 #include "gtktogglebutton.h"
22 #include "gtkradiobutton.h"
25 #include "gtktoolbar.h"
28 #define DEFAULT_SPACE_SIZE 5
37 typedef void (*GtkToolbarSignal1) (GtkObject *object,
41 static void gtk_toolbar_marshal_signal_1 (GtkObject *object,
47 static void gtk_toolbar_class_init (GtkToolbarClass *class);
48 static void gtk_toolbar_init (GtkToolbar *toolbar);
49 static void gtk_toolbar_destroy (GtkObject *object);
50 static void gtk_toolbar_map (GtkWidget *widget);
51 static void gtk_toolbar_unmap (GtkWidget *widget);
52 static void gtk_toolbar_draw (GtkWidget *widget,
54 static gint gtk_toolbar_expose (GtkWidget *widget,
55 GdkEventExpose *event);
56 static void gtk_toolbar_size_request (GtkWidget *widget,
57 GtkRequisition *requisition);
58 static void gtk_toolbar_size_allocate (GtkWidget *widget,
59 GtkAllocation *allocation);
60 static void gtk_toolbar_add (GtkContainer *container,
62 static void gtk_toolbar_remove (GtkContainer *container,
64 static void gtk_toolbar_foreach (GtkContainer *container,
66 gpointer callback_data);
67 static void gtk_real_toolbar_orientation_changed (GtkToolbar *toolbar,
68 GtkOrientation orientation);
69 static void gtk_real_toolbar_style_changed (GtkToolbar *toolbar,
70 GtkToolbarStyle style);
73 static GtkContainerClass *parent_class;
75 static guint toolbar_signals[LAST_SIGNAL] = { 0 };
79 gtk_toolbar_get_type (void)
81 static guint toolbar_type = 0;
85 GtkTypeInfo toolbar_info =
89 sizeof (GtkToolbarClass),
90 (GtkClassInitFunc) gtk_toolbar_class_init,
91 (GtkObjectInitFunc) gtk_toolbar_init,
96 toolbar_type = gtk_type_unique (gtk_container_get_type (), &toolbar_info);
103 gtk_toolbar_class_init (GtkToolbarClass *class)
105 GtkObjectClass *object_class;
106 GtkWidgetClass *widget_class;
107 GtkContainerClass *container_class;
109 object_class = (GtkObjectClass *) class;
110 widget_class = (GtkWidgetClass *) class;
111 container_class = (GtkContainerClass *) class;
113 parent_class = gtk_type_class (gtk_container_get_type ());
115 toolbar_signals[ORIENTATION_CHANGED] =
116 gtk_signal_new ("orientation_changed",
119 GTK_SIGNAL_OFFSET (GtkToolbarClass, orientation_changed),
120 gtk_toolbar_marshal_signal_1,
123 toolbar_signals[STYLE_CHANGED] =
124 gtk_signal_new ("style_changed",
127 GTK_SIGNAL_OFFSET (GtkToolbarClass, style_changed),
128 gtk_toolbar_marshal_signal_1,
132 gtk_object_class_add_signals (object_class, toolbar_signals, LAST_SIGNAL);
134 object_class->destroy = gtk_toolbar_destroy;
136 widget_class->map = gtk_toolbar_map;
137 widget_class->unmap = gtk_toolbar_unmap;
138 widget_class->draw = gtk_toolbar_draw;
139 widget_class->expose_event = gtk_toolbar_expose;
140 widget_class->size_request = gtk_toolbar_size_request;
141 widget_class->size_allocate = gtk_toolbar_size_allocate;
143 container_class->add = gtk_toolbar_add;
144 container_class->remove = gtk_toolbar_remove;
145 container_class->foreach = gtk_toolbar_foreach;
146 container_class->focus = NULL;
148 class->orientation_changed = gtk_real_toolbar_orientation_changed;
149 class->style_changed = gtk_real_toolbar_style_changed;
153 gtk_toolbar_init (GtkToolbar *toolbar)
155 GTK_WIDGET_SET_FLAGS (toolbar, GTK_NO_WINDOW);
156 GTK_WIDGET_UNSET_FLAGS (toolbar, GTK_CAN_FOCUS);
158 toolbar->num_children = 0;
159 toolbar->children = NULL;
160 toolbar->orientation = GTK_ORIENTATION_HORIZONTAL;
161 toolbar->style = GTK_TOOLBAR_ICONS;
162 toolbar->space_size = DEFAULT_SPACE_SIZE;
163 toolbar->tooltips = gtk_tooltips_new ();
164 toolbar->button_maxw = 0;
165 toolbar->button_maxh = 0;
169 gtk_toolbar_new (GtkOrientation orientation,
170 GtkToolbarStyle style)
174 toolbar = gtk_type_new (gtk_toolbar_get_type ());
176 toolbar->orientation = orientation;
177 toolbar->style = style;
179 return GTK_WIDGET (toolbar);
183 gtk_toolbar_destroy (GtkObject *object)
188 g_return_if_fail (object != NULL);
189 g_return_if_fail (GTK_IS_TOOLBAR (object));
191 toolbar = GTK_TOOLBAR (object);
193 gtk_object_unref (GTK_OBJECT (toolbar->tooltips));
194 toolbar->tooltips = NULL;
196 for (children = toolbar->children; children; children = children->next)
198 GtkToolbarChild *child;
200 child = children->data;
202 if (child->type != GTK_TOOLBAR_CHILD_SPACE)
204 gtk_widget_ref (child->widget);
205 gtk_widget_unparent (child->widget);
206 gtk_widget_destroy (child->widget);
207 gtk_widget_unref (child->widget);
213 g_list_free (toolbar->children);
214 toolbar->children = NULL;
216 if (GTK_OBJECT_CLASS (parent_class)->destroy)
217 (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
221 gtk_toolbar_map (GtkWidget *widget)
225 GtkToolbarChild *child;
227 g_return_if_fail (widget != NULL);
228 g_return_if_fail (GTK_IS_TOOLBAR (widget));
230 toolbar = GTK_TOOLBAR (widget);
231 GTK_WIDGET_SET_FLAGS (toolbar, GTK_MAPPED);
233 for (children = toolbar->children; children; children = children->next)
235 child = children->data;
237 if ((child->type != GTK_TOOLBAR_CHILD_SPACE)
238 && GTK_WIDGET_VISIBLE (child->widget) && !GTK_WIDGET_MAPPED (child->widget))
239 gtk_widget_map (child->widget);
244 gtk_toolbar_unmap (GtkWidget *widget)
248 GtkToolbarChild *child;
250 g_return_if_fail (widget != NULL);
251 g_return_if_fail (GTK_IS_TOOLBAR (widget));
253 toolbar = GTK_TOOLBAR (widget);
254 GTK_WIDGET_UNSET_FLAGS (toolbar, GTK_MAPPED);
256 for (children = toolbar->children; children; children = children->next)
258 child = children->data;
260 if ((child->type != GTK_TOOLBAR_CHILD_SPACE)
261 && GTK_WIDGET_VISIBLE (child->widget) && GTK_WIDGET_MAPPED (child->widget))
262 gtk_widget_unmap (child->widget);
267 gtk_toolbar_draw (GtkWidget *widget,
272 GtkToolbarChild *child;
273 GdkRectangle child_area;
275 g_return_if_fail (widget != NULL);
276 g_return_if_fail (GTK_IS_TOOLBAR (widget));
278 if (GTK_WIDGET_DRAWABLE (widget))
280 toolbar = GTK_TOOLBAR (widget);
282 for (children = toolbar->children; children; children = children->next)
284 child = children->data;
286 if ((child->type != GTK_TOOLBAR_CHILD_SPACE)
287 && gtk_widget_intersect (child->widget, area, &child_area))
288 gtk_widget_draw (child->widget, &child_area);
294 gtk_toolbar_expose (GtkWidget *widget,
295 GdkEventExpose *event)
299 GtkToolbarChild *child;
300 GdkEventExpose child_event;
302 g_return_val_if_fail (widget != NULL, FALSE);
303 g_return_val_if_fail (GTK_IS_TOOLBAR (widget), FALSE);
304 g_return_val_if_fail (event != NULL, FALSE);
306 if (GTK_WIDGET_DRAWABLE (widget))
308 toolbar = GTK_TOOLBAR (widget);
310 child_event = *event;
312 for (children = toolbar->children; children; children = children->next)
314 child = children->data;
316 if ((child->type != GTK_TOOLBAR_CHILD_SPACE)
317 && GTK_WIDGET_NO_WINDOW (child->widget)
318 && gtk_widget_intersect (child->widget, &event->area, &child_event.area))
319 gtk_widget_event (child->widget, (GdkEvent *) &child_event);
327 gtk_toolbar_size_request (GtkWidget *widget,
328 GtkRequisition *requisition)
332 GtkToolbarChild *child;
334 gint button_maxw, button_maxh;
335 gint widget_maxw, widget_maxh;
337 g_return_if_fail (widget != NULL);
338 g_return_if_fail (GTK_IS_TOOLBAR (widget));
339 g_return_if_fail (requisition != NULL);
341 toolbar = GTK_TOOLBAR (widget);
343 requisition->width = GTK_CONTAINER (toolbar)->border_width * 2;
344 requisition->height = GTK_CONTAINER (toolbar)->border_width * 2;
351 for (children = toolbar->children; children; children = children->next)
353 child = children->data;
357 case GTK_TOOLBAR_CHILD_SPACE:
358 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
359 requisition->width += toolbar->space_size;
361 requisition->height += toolbar->space_size;
365 case GTK_TOOLBAR_CHILD_BUTTON:
366 case GTK_TOOLBAR_CHILD_RADIOBUTTON:
367 case GTK_TOOLBAR_CHILD_TOGGLEBUTTON:
368 if (GTK_WIDGET_VISIBLE (child->widget))
370 gtk_widget_size_request (child->widget, &child->widget->requisition);
373 button_maxw = MAX (button_maxw, child->widget->requisition.width);
374 button_maxh = MAX (button_maxh, child->widget->requisition.height);
379 case GTK_TOOLBAR_CHILD_WIDGET:
380 if (GTK_WIDGET_VISIBLE (child->widget))
382 gtk_widget_size_request (child->widget, &child->widget->requisition);
384 widget_maxw = MAX (widget_maxw, child->widget->requisition.width);
385 widget_maxh = MAX (widget_maxh, child->widget->requisition.height);
387 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
388 requisition->width += child->widget->requisition.width;
390 requisition->height += child->widget->requisition.height;
396 g_assert_not_reached ();
400 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
402 requisition->width += nbuttons * button_maxw;
403 requisition->height += MAX (button_maxh, widget_maxh);
407 requisition->width += MAX (button_maxw, widget_maxw);
408 requisition->height += nbuttons * button_maxh;
411 toolbar->button_maxw = button_maxw;
412 toolbar->button_maxh = button_maxh;
416 gtk_toolbar_size_allocate (GtkWidget *widget,
417 GtkAllocation *allocation)
421 GtkToolbarChild *child;
425 g_return_if_fail (widget != NULL);
426 g_return_if_fail (GTK_IS_TOOLBAR (widget));
427 g_return_if_fail (allocation != NULL);
429 toolbar = GTK_TOOLBAR (widget);
430 widget->allocation = *allocation;
432 border_width = GTK_CONTAINER (toolbar)->border_width;
434 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
435 alloc.x = allocation->x + border_width;
437 alloc.y = allocation->y + border_width;
439 for (children = toolbar->children; children; children = children->next)
441 child = children->data;
445 case GTK_TOOLBAR_CHILD_SPACE:
446 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
447 alloc.x += toolbar->space_size;
449 alloc.y += toolbar->space_size;
453 case GTK_TOOLBAR_CHILD_BUTTON:
454 case GTK_TOOLBAR_CHILD_RADIOBUTTON:
455 case GTK_TOOLBAR_CHILD_TOGGLEBUTTON:
456 alloc.width = toolbar->button_maxw;
457 alloc.height = toolbar->button_maxh;
459 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
460 alloc.y = allocation->y + (allocation->height - toolbar->button_maxh) / 2;
462 alloc.x = allocation->x + (allocation->width - toolbar->button_maxw) / 2;
464 gtk_widget_size_allocate (child->widget, &alloc);
466 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
467 alloc.x += toolbar->button_maxw;
469 alloc.y += toolbar->button_maxh;
473 case GTK_TOOLBAR_CHILD_WIDGET:
474 alloc.width = child->widget->requisition.width;
475 alloc.height = child->widget->requisition.height;
477 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
478 alloc.y = allocation->y + (allocation->height - child->widget->requisition.height) / 2;
480 alloc.x = allocation->x + (allocation->width - child->widget->requisition.width) / 2;
482 gtk_widget_size_allocate (child->widget, &alloc);
484 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
485 alloc.x += child->widget->requisition.width;
487 alloc.y += child->widget->requisition.height;
492 g_assert_not_reached ();
498 gtk_toolbar_add (GtkContainer *container,
501 g_return_if_fail (container != NULL);
502 g_return_if_fail (GTK_IS_TOOLBAR (container));
503 g_return_if_fail (widget != NULL);
505 gtk_toolbar_append_widget (GTK_TOOLBAR (container), widget, NULL, NULL);
509 gtk_toolbar_remove (GtkContainer *container,
514 GtkToolbarChild *child;
516 g_return_if_fail (container != NULL);
517 g_return_if_fail (GTK_IS_TOOLBAR (container));
518 g_return_if_fail (widget != NULL);
520 toolbar = GTK_TOOLBAR (container);
522 for (children = toolbar->children; children; children = children->next)
524 child = children->data;
526 if ((child->type != GTK_TOOLBAR_CHILD_SPACE) && (child->widget == widget))
528 gboolean was_visible;
530 was_visible = GTK_WIDGET_VISIBLE (widget);
531 gtk_widget_unparent (widget);
533 toolbar->children = g_list_remove_link (toolbar->children, children);
535 g_list_free (children);
536 toolbar->num_children--;
538 if (was_visible && GTK_WIDGET_VISIBLE (container))
539 gtk_widget_queue_resize (GTK_WIDGET (container));
547 gtk_toolbar_foreach (GtkContainer *container,
548 GtkCallback callback,
549 gpointer callback_data)
553 GtkToolbarChild *child;
555 g_return_if_fail (container != NULL);
556 g_return_if_fail (GTK_IS_TOOLBAR (container));
557 g_return_if_fail (callback != NULL);
559 toolbar = GTK_TOOLBAR (container);
561 for (children = toolbar->children; children; children = children->next)
563 child = children->data;
565 if (child->type != GTK_TOOLBAR_CHILD_SPACE)
566 (*callback) (child->widget, callback_data);
571 gtk_toolbar_append_item (GtkToolbar *toolbar,
573 const char *tooltip_text,
574 const char *tooltip_private_text,
576 GtkSignalFunc callback,
579 return gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_BUTTON,
581 tooltip_text, tooltip_private_text,
582 icon, callback, user_data,
583 toolbar->num_children);
587 gtk_toolbar_prepend_item (GtkToolbar *toolbar,
589 const char *tooltip_text,
590 const char *tooltip_private_text,
592 GtkSignalFunc callback,
595 return gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_BUTTON,
597 tooltip_text, tooltip_private_text,
598 icon, callback, user_data,
603 gtk_toolbar_insert_item (GtkToolbar *toolbar,
605 const char *tooltip_text,
606 const char *tooltip_private_text,
608 GtkSignalFunc callback,
612 return gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_BUTTON,
614 tooltip_text, tooltip_private_text,
615 icon, callback, user_data,
620 gtk_toolbar_append_space (GtkToolbar *toolbar)
622 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_SPACE,
626 toolbar->num_children);
630 gtk_toolbar_prepend_space (GtkToolbar *toolbar)
632 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_SPACE,
640 gtk_toolbar_insert_space (GtkToolbar *toolbar,
643 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_SPACE,
651 gtk_toolbar_append_widget (GtkToolbar *toolbar,
653 const gchar *tooltip_text,
654 const gchar *tooltip_private_text)
656 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_WIDGET,
658 tooltip_text, tooltip_private_text,
660 toolbar->num_children);
664 gtk_toolbar_prepend_widget (GtkToolbar *toolbar,
666 const gchar *tooltip_text,
667 const gchar *tooltip_private_text)
669 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_WIDGET,
671 tooltip_text, tooltip_private_text,
673 toolbar->num_children);
677 gtk_toolbar_insert_widget (GtkToolbar *toolbar,
679 const char *tooltip_text,
680 const char *tooltip_private_text,
683 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_WIDGET,
685 tooltip_text, tooltip_private_text,
690 GtkWidget *gtk_toolbar_append_element (GtkToolbar *toolbar,
691 GtkToolbarChildType type,
694 const char *tooltip_text,
695 const char *tooltip_private_text,
697 GtkSignalFunc callback,
700 return gtk_toolbar_insert_element(toolbar, type, widget, text,
701 tooltip_text, tooltip_private_text,
702 icon, callback, user_data,
703 toolbar->num_children);
706 GtkWidget *gtk_toolbar_prepend_element (GtkToolbar *toolbar,
707 GtkToolbarChildType type,
710 const char *tooltip_text,
711 const char *tooltip_private_text,
713 GtkSignalFunc callback,
716 return gtk_toolbar_insert_element(toolbar, type, widget, text,
717 tooltip_text, tooltip_private_text,
718 icon, callback, user_data, 0);
721 GtkWidget *gtk_toolbar_insert_element (GtkToolbar *toolbar,
722 GtkToolbarChildType type,
725 const char *tooltip_text,
726 const char *tooltip_private_text,
728 GtkSignalFunc callback,
732 GtkToolbarChild *child;
735 g_return_val_if_fail (toolbar != NULL, NULL);
736 g_return_val_if_fail (GTK_IS_TOOLBAR (toolbar), NULL);
738 child = g_new (GtkToolbarChild, 1);
744 case GTK_TOOLBAR_CHILD_SPACE:
745 child->widget = NULL;
747 case GTK_TOOLBAR_CHILD_WIDGET:
748 child->widget = widget;
750 case GTK_TOOLBAR_CHILD_BUTTON:
751 case GTK_TOOLBAR_CHILD_TOGGLEBUTTON:
752 case GTK_TOOLBAR_CHILD_RADIOBUTTON:
753 if (type == GTK_TOOLBAR_CHILD_BUTTON) {
754 child->widget = gtk_button_new ();
755 } else if (type == GTK_TOOLBAR_CHILD_TOGGLEBUTTON) {
756 child->widget = gtk_toggle_button_new ();
757 gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON(child->widget),
761 gtk_radio_button_new(
763 ? gtk_radio_button_group(GTK_RADIO_BUTTON(widget))
765 gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON(child->widget),
769 vbox = gtk_vbox_new (FALSE, 0);
770 gtk_container_add (GTK_CONTAINER (child->widget), vbox);
771 gtk_widget_show (vbox);
774 child->icon = GTK_WIDGET (icon);
775 gtk_box_pack_start (GTK_BOX (vbox), child->icon, FALSE, FALSE, 0);
776 if (toolbar->style != GTK_TOOLBAR_TEXT)
777 gtk_widget_show (child->icon);
781 child->label = gtk_label_new (text);
782 gtk_box_pack_start (GTK_BOX (vbox), child->label, FALSE, FALSE, 0);
783 if (toolbar->style != GTK_TOOLBAR_ICONS)
784 gtk_widget_show (child->label);
787 gtk_widget_show (child->widget);
790 g_assert_not_reached ();
794 gtk_signal_connect (GTK_OBJECT (child->widget), "clicked",
795 callback, user_data);
798 gtk_tooltips_set_tip (toolbar->tooltips, child->widget,
799 tooltip_text, tooltip_private_text);
801 toolbar->children = g_list_insert (toolbar->children, child, position);
802 toolbar->num_children++;
804 if (type != GTK_TOOLBAR_CHILD_SPACE)
805 gtk_widget_set_parent (child->widget, GTK_WIDGET (toolbar));
807 if (type != GTK_TOOLBAR_CHILD_SPACE && GTK_WIDGET_VISIBLE (toolbar))
809 if (GTK_WIDGET_REALIZED (toolbar)
810 && !GTK_WIDGET_REALIZED (child->widget))
811 gtk_widget_realize (child->widget);
813 if (GTK_WIDGET_MAPPED (toolbar)
814 && !GTK_WIDGET_MAPPED (child->widget))
815 gtk_widget_map (child->widget);
818 if (GTK_WIDGET_VISIBLE (toolbar) &&
819 (type == GTK_TOOLBAR_CHILD_SPACE ||
820 GTK_WIDGET_VISIBLE (child->widget)))
821 gtk_widget_queue_resize (GTK_WIDGET (toolbar));
823 return child->widget;
827 gtk_toolbar_set_orientation (GtkToolbar *toolbar,
828 GtkOrientation orientation)
830 gtk_signal_emit (GTK_OBJECT (toolbar), toolbar_signals[ORIENTATION_CHANGED], orientation);
834 gtk_toolbar_set_style (GtkToolbar *toolbar,
835 GtkToolbarStyle style)
837 gtk_signal_emit (GTK_OBJECT (toolbar), toolbar_signals[STYLE_CHANGED], style);
841 gtk_toolbar_set_space_size (GtkToolbar *toolbar,
844 g_return_if_fail (toolbar != NULL);
845 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
847 if (toolbar->space_size != space_size)
849 toolbar->space_size = space_size;
850 gtk_widget_queue_resize (GTK_WIDGET (toolbar));
855 gtk_toolbar_set_tooltips (GtkToolbar *toolbar,
858 g_return_if_fail (toolbar != NULL);
859 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
862 gtk_tooltips_enable (toolbar->tooltips);
864 gtk_tooltips_disable (toolbar->tooltips);
868 gtk_toolbar_marshal_signal_1 (GtkObject *object,
873 GtkToolbarSignal1 rfunc;
875 rfunc = (GtkToolbarSignal1) func;
877 (*rfunc) (object, GTK_VALUE_ENUM (args[0]), func_data);
881 gtk_real_toolbar_orientation_changed (GtkToolbar *toolbar,
882 GtkOrientation orientation)
884 g_return_if_fail (toolbar != NULL);
885 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
887 if (toolbar->orientation != orientation)
889 toolbar->orientation = orientation;
890 gtk_widget_queue_resize (GTK_WIDGET (toolbar));
895 gtk_real_toolbar_style_changed (GtkToolbar *toolbar,
896 GtkToolbarStyle style)
899 GtkToolbarChild *child;
901 g_return_if_fail (toolbar != NULL);
902 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
904 if (toolbar->style != style)
906 toolbar->style = style;
908 for (children = toolbar->children; children; children = children->next)
910 child = children->data;
912 if (child->type == GTK_TOOLBAR_CHILD_BUTTON ||
913 child->type == GTK_TOOLBAR_CHILD_RADIOBUTTON ||
914 child->type == GTK_TOOLBAR_CHILD_TOGGLEBUTTON)
917 case GTK_TOOLBAR_ICONS:
918 if (child->icon && !GTK_WIDGET_VISIBLE (child->icon))
919 gtk_widget_show (child->icon);
921 if (child->label && GTK_WIDGET_VISIBLE (child->label))
922 gtk_widget_hide (child->label);
926 case GTK_TOOLBAR_TEXT:
927 if (child->icon && GTK_WIDGET_VISIBLE (child->icon))
928 gtk_widget_hide (child->icon);
930 if (child->label && !GTK_WIDGET_VISIBLE (child->label))
931 gtk_widget_show (child->label);
935 case GTK_TOOLBAR_BOTH:
936 if (child->icon && !GTK_WIDGET_VISIBLE (child->icon))
937 gtk_widget_show (child->icon);
939 if (child->label && !GTK_WIDGET_VISIBLE (child->label))
940 gtk_widget_show (child->label);
945 g_assert_not_reached ();
949 gtk_widget_queue_resize (GTK_WIDGET (toolbar));