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 if (!GTK_WIDGET_VISIBLE (child->widget))
459 alloc.width = toolbar->button_maxw;
460 alloc.height = toolbar->button_maxh;
462 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
463 alloc.y = allocation->y + (allocation->height - toolbar->button_maxh) / 2;
465 alloc.x = allocation->x + (allocation->width - toolbar->button_maxw) / 2;
467 gtk_widget_size_allocate (child->widget, &alloc);
469 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
470 alloc.x += toolbar->button_maxw;
472 alloc.y += toolbar->button_maxh;
476 case GTK_TOOLBAR_CHILD_WIDGET:
477 if (!GTK_WIDGET_VISIBLE (child->widget))
480 alloc.width = child->widget->requisition.width;
481 alloc.height = child->widget->requisition.height;
483 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
484 alloc.y = allocation->y + (allocation->height - child->widget->requisition.height) / 2;
486 alloc.x = allocation->x + (allocation->width - child->widget->requisition.width) / 2;
488 gtk_widget_size_allocate (child->widget, &alloc);
490 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
491 alloc.x += child->widget->requisition.width;
493 alloc.y += child->widget->requisition.height;
498 g_assert_not_reached ();
504 gtk_toolbar_add (GtkContainer *container,
507 g_return_if_fail (container != NULL);
508 g_return_if_fail (GTK_IS_TOOLBAR (container));
509 g_return_if_fail (widget != NULL);
511 gtk_toolbar_append_widget (GTK_TOOLBAR (container), widget, NULL, NULL);
515 gtk_toolbar_remove (GtkContainer *container,
520 GtkToolbarChild *child;
522 g_return_if_fail (container != NULL);
523 g_return_if_fail (GTK_IS_TOOLBAR (container));
524 g_return_if_fail (widget != NULL);
526 toolbar = GTK_TOOLBAR (container);
528 for (children = toolbar->children; children; children = children->next)
530 child = children->data;
532 if ((child->type != GTK_TOOLBAR_CHILD_SPACE) && (child->widget == widget))
534 gboolean was_visible;
536 was_visible = GTK_WIDGET_VISIBLE (widget);
537 gtk_widget_unparent (widget);
539 toolbar->children = g_list_remove_link (toolbar->children, children);
541 g_list_free (children);
542 toolbar->num_children--;
544 if (was_visible && GTK_WIDGET_VISIBLE (container))
545 gtk_widget_queue_resize (GTK_WIDGET (container));
553 gtk_toolbar_foreach (GtkContainer *container,
554 GtkCallback callback,
555 gpointer callback_data)
559 GtkToolbarChild *child;
561 g_return_if_fail (container != NULL);
562 g_return_if_fail (GTK_IS_TOOLBAR (container));
563 g_return_if_fail (callback != NULL);
565 toolbar = GTK_TOOLBAR (container);
567 for (children = toolbar->children; children; children = children->next)
569 child = children->data;
571 if (child->type != GTK_TOOLBAR_CHILD_SPACE)
572 (*callback) (child->widget, callback_data);
577 gtk_toolbar_append_item (GtkToolbar *toolbar,
579 const char *tooltip_text,
580 const char *tooltip_private_text,
582 GtkSignalFunc callback,
585 return gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_BUTTON,
587 tooltip_text, tooltip_private_text,
588 icon, callback, user_data,
589 toolbar->num_children);
593 gtk_toolbar_prepend_item (GtkToolbar *toolbar,
595 const char *tooltip_text,
596 const char *tooltip_private_text,
598 GtkSignalFunc callback,
601 return gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_BUTTON,
603 tooltip_text, tooltip_private_text,
604 icon, callback, user_data,
609 gtk_toolbar_insert_item (GtkToolbar *toolbar,
611 const char *tooltip_text,
612 const char *tooltip_private_text,
614 GtkSignalFunc callback,
618 return gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_BUTTON,
620 tooltip_text, tooltip_private_text,
621 icon, callback, user_data,
626 gtk_toolbar_append_space (GtkToolbar *toolbar)
628 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_SPACE,
632 toolbar->num_children);
636 gtk_toolbar_prepend_space (GtkToolbar *toolbar)
638 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_SPACE,
646 gtk_toolbar_insert_space (GtkToolbar *toolbar,
649 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_SPACE,
657 gtk_toolbar_append_widget (GtkToolbar *toolbar,
659 const gchar *tooltip_text,
660 const gchar *tooltip_private_text)
662 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_WIDGET,
664 tooltip_text, tooltip_private_text,
666 toolbar->num_children);
670 gtk_toolbar_prepend_widget (GtkToolbar *toolbar,
672 const gchar *tooltip_text,
673 const gchar *tooltip_private_text)
675 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_WIDGET,
677 tooltip_text, tooltip_private_text,
679 toolbar->num_children);
683 gtk_toolbar_insert_widget (GtkToolbar *toolbar,
685 const char *tooltip_text,
686 const char *tooltip_private_text,
689 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_WIDGET,
691 tooltip_text, tooltip_private_text,
697 gtk_toolbar_append_element (GtkToolbar *toolbar,
698 GtkToolbarChildType type,
701 const char *tooltip_text,
702 const char *tooltip_private_text,
704 GtkSignalFunc callback,
707 return gtk_toolbar_insert_element (toolbar, type, widget, text,
708 tooltip_text, tooltip_private_text,
709 icon, callback, user_data,
710 toolbar->num_children);
714 gtk_toolbar_prepend_element (GtkToolbar *toolbar,
715 GtkToolbarChildType type,
718 const char *tooltip_text,
719 const char *tooltip_private_text,
721 GtkSignalFunc callback,
724 return gtk_toolbar_insert_element (toolbar, type, widget, text,
725 tooltip_text, tooltip_private_text,
726 icon, callback, user_data, 0);
730 gtk_toolbar_insert_element (GtkToolbar *toolbar,
731 GtkToolbarChildType type,
734 const char *tooltip_text,
735 const char *tooltip_private_text,
737 GtkSignalFunc callback,
741 GtkToolbarChild *child;
744 g_return_val_if_fail (toolbar != NULL, NULL);
745 g_return_val_if_fail (GTK_IS_TOOLBAR (toolbar), NULL);
746 g_return_val_if_fail ((type != GTK_TOOLBAR_CHILD_WIDGET) || (widget != NULL), NULL);
748 child = g_new (GtkToolbarChild, 1);
755 case GTK_TOOLBAR_CHILD_SPACE:
756 child->widget = NULL;
759 case GTK_TOOLBAR_CHILD_WIDGET:
760 child->widget = widget;
763 case GTK_TOOLBAR_CHILD_BUTTON:
764 case GTK_TOOLBAR_CHILD_TOGGLEBUTTON:
765 case GTK_TOOLBAR_CHILD_RADIOBUTTON:
766 if (type == GTK_TOOLBAR_CHILD_BUTTON)
767 child->widget = gtk_button_new ();
768 else if (type == GTK_TOOLBAR_CHILD_TOGGLEBUTTON)
770 child->widget = gtk_toggle_button_new ();
771 gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (child->widget),
776 child->widget = gtk_radio_button_new (widget
777 ? gtk_radio_button_group (GTK_RADIO_BUTTON (widget))
779 gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (child->widget), FALSE);
783 gtk_signal_connect (GTK_OBJECT (child->widget), "clicked",
784 callback, user_data);
786 vbox = gtk_vbox_new (FALSE, 0);
787 gtk_container_add (GTK_CONTAINER (child->widget), vbox);
788 gtk_widget_show (vbox);
792 child->icon = GTK_WIDGET (icon);
793 gtk_box_pack_start (GTK_BOX (vbox), child->icon, FALSE, FALSE, 0);
794 if (toolbar->style != GTK_TOOLBAR_TEXT)
795 gtk_widget_show (child->icon);
800 child->label = gtk_label_new (text);
801 gtk_box_pack_start (GTK_BOX (vbox), child->label, FALSE, FALSE, 0);
802 if (toolbar->style != GTK_TOOLBAR_ICONS)
803 gtk_widget_show (child->label);
806 gtk_widget_show (child->widget);
810 g_assert_not_reached ();
813 if ((type != GTK_TOOLBAR_CHILD_SPACE) && tooltip_text)
814 gtk_tooltips_set_tip (toolbar->tooltips, child->widget,
815 tooltip_text, tooltip_private_text);
817 toolbar->children = g_list_insert (toolbar->children, child, position);
818 toolbar->num_children++;
820 if (type != GTK_TOOLBAR_CHILD_SPACE)
821 gtk_widget_set_parent (child->widget, GTK_WIDGET (toolbar));
823 if ((type != GTK_TOOLBAR_CHILD_SPACE) && GTK_WIDGET_VISIBLE (toolbar))
825 if (GTK_WIDGET_REALIZED (toolbar)
826 && !GTK_WIDGET_REALIZED (child->widget))
827 gtk_widget_realize (child->widget);
829 if (GTK_WIDGET_MAPPED (toolbar)
830 && !GTK_WIDGET_MAPPED (child->widget))
831 gtk_widget_map (child->widget);
834 if (GTK_WIDGET_VISIBLE (toolbar) &&
835 ((type == GTK_TOOLBAR_CHILD_SPACE) ||
836 GTK_WIDGET_VISIBLE (child->widget)))
837 gtk_widget_queue_resize (GTK_WIDGET (toolbar));
839 return child->widget;
843 gtk_toolbar_set_orientation (GtkToolbar *toolbar,
844 GtkOrientation orientation)
846 gtk_signal_emit (GTK_OBJECT (toolbar), toolbar_signals[ORIENTATION_CHANGED], orientation);
850 gtk_toolbar_set_style (GtkToolbar *toolbar,
851 GtkToolbarStyle style)
853 gtk_signal_emit (GTK_OBJECT (toolbar), toolbar_signals[STYLE_CHANGED], style);
857 gtk_toolbar_set_space_size (GtkToolbar *toolbar,
860 g_return_if_fail (toolbar != NULL);
861 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
863 if (toolbar->space_size != space_size)
865 toolbar->space_size = space_size;
866 gtk_widget_queue_resize (GTK_WIDGET (toolbar));
871 gtk_toolbar_set_tooltips (GtkToolbar *toolbar,
874 g_return_if_fail (toolbar != NULL);
875 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
878 gtk_tooltips_enable (toolbar->tooltips);
880 gtk_tooltips_disable (toolbar->tooltips);
884 gtk_toolbar_marshal_signal_1 (GtkObject *object,
889 GtkToolbarSignal1 rfunc;
891 rfunc = (GtkToolbarSignal1) func;
893 (*rfunc) (object, GTK_VALUE_ENUM (args[0]), func_data);
897 gtk_real_toolbar_orientation_changed (GtkToolbar *toolbar,
898 GtkOrientation orientation)
900 g_return_if_fail (toolbar != NULL);
901 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
903 if (toolbar->orientation != orientation)
905 toolbar->orientation = orientation;
906 gtk_widget_queue_resize (GTK_WIDGET (toolbar));
911 gtk_real_toolbar_style_changed (GtkToolbar *toolbar,
912 GtkToolbarStyle style)
915 GtkToolbarChild *child;
917 g_return_if_fail (toolbar != NULL);
918 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
920 if (toolbar->style != style)
922 toolbar->style = style;
924 for (children = toolbar->children; children; children = children->next)
926 child = children->data;
928 if (child->type == GTK_TOOLBAR_CHILD_BUTTON ||
929 child->type == GTK_TOOLBAR_CHILD_RADIOBUTTON ||
930 child->type == GTK_TOOLBAR_CHILD_TOGGLEBUTTON)
933 case GTK_TOOLBAR_ICONS:
934 if (child->icon && !GTK_WIDGET_VISIBLE (child->icon))
935 gtk_widget_show (child->icon);
937 if (child->label && GTK_WIDGET_VISIBLE (child->label))
938 gtk_widget_hide (child->label);
942 case GTK_TOOLBAR_TEXT:
943 if (child->icon && GTK_WIDGET_VISIBLE (child->icon))
944 gtk_widget_hide (child->icon);
946 if (child->label && !GTK_WIDGET_VISIBLE (child->label))
947 gtk_widget_show (child->label);
951 case GTK_TOOLBAR_BOTH:
952 if (child->icon && !GTK_WIDGET_VISIBLE (child->icon))
953 gtk_widget_show (child->icon);
955 if (child->label && !GTK_WIDGET_VISIBLE (child->label))
956 gtk_widget_show (child->label);
961 g_assert_not_reached ();
965 gtk_widget_queue_resize (GTK_WIDGET (toolbar));