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 static void gtk_toolbar_class_init (GtkToolbarClass *class);
39 static void gtk_toolbar_init (GtkToolbar *toolbar);
40 static void gtk_toolbar_destroy (GtkObject *object);
41 static void gtk_toolbar_map (GtkWidget *widget);
42 static void gtk_toolbar_unmap (GtkWidget *widget);
43 static void gtk_toolbar_draw (GtkWidget *widget,
45 static gint gtk_toolbar_expose (GtkWidget *widget,
46 GdkEventExpose *event);
47 static void gtk_toolbar_size_request (GtkWidget *widget,
48 GtkRequisition *requisition);
49 static void gtk_toolbar_size_allocate (GtkWidget *widget,
50 GtkAllocation *allocation);
51 static void gtk_toolbar_add (GtkContainer *container,
53 static void gtk_toolbar_remove (GtkContainer *container,
55 static void gtk_toolbar_forall (GtkContainer *container,
56 gboolean include_internals,
58 gpointer callback_data);
59 static void gtk_real_toolbar_orientation_changed (GtkToolbar *toolbar,
60 GtkOrientation orientation);
61 static void gtk_real_toolbar_style_changed (GtkToolbar *toolbar,
62 GtkToolbarStyle style);
65 static GtkContainerClass *parent_class;
67 static guint toolbar_signals[LAST_SIGNAL] = { 0 };
71 gtk_toolbar_get_type (void)
73 static guint toolbar_type = 0;
77 GtkTypeInfo toolbar_info =
81 sizeof (GtkToolbarClass),
82 (GtkClassInitFunc) gtk_toolbar_class_init,
83 (GtkObjectInitFunc) gtk_toolbar_init,
84 /* reserved_1 */ NULL,
85 /* reserved_2 */ NULL,
86 (GtkClassInitFunc) NULL,
89 toolbar_type = gtk_type_unique (gtk_container_get_type (), &toolbar_info);
96 gtk_toolbar_class_init (GtkToolbarClass *class)
98 GtkObjectClass *object_class;
99 GtkWidgetClass *widget_class;
100 GtkContainerClass *container_class;
102 object_class = (GtkObjectClass *) class;
103 widget_class = (GtkWidgetClass *) class;
104 container_class = (GtkContainerClass *) class;
106 parent_class = gtk_type_class (gtk_container_get_type ());
108 toolbar_signals[ORIENTATION_CHANGED] =
109 gtk_signal_new ("orientation_changed",
112 GTK_SIGNAL_OFFSET (GtkToolbarClass, orientation_changed),
113 gtk_marshal_NONE__INT,
116 toolbar_signals[STYLE_CHANGED] =
117 gtk_signal_new ("style_changed",
120 GTK_SIGNAL_OFFSET (GtkToolbarClass, style_changed),
121 gtk_marshal_NONE__INT,
125 gtk_object_class_add_signals (object_class, toolbar_signals, LAST_SIGNAL);
127 object_class->destroy = gtk_toolbar_destroy;
129 widget_class->map = gtk_toolbar_map;
130 widget_class->unmap = gtk_toolbar_unmap;
131 widget_class->draw = gtk_toolbar_draw;
132 widget_class->expose_event = gtk_toolbar_expose;
133 widget_class->size_request = gtk_toolbar_size_request;
134 widget_class->size_allocate = gtk_toolbar_size_allocate;
136 container_class->add = gtk_toolbar_add;
137 container_class->remove = gtk_toolbar_remove;
138 container_class->forall = gtk_toolbar_forall;
139 container_class->focus = NULL;
141 class->orientation_changed = gtk_real_toolbar_orientation_changed;
142 class->style_changed = gtk_real_toolbar_style_changed;
146 gtk_toolbar_init (GtkToolbar *toolbar)
148 GTK_WIDGET_SET_FLAGS (toolbar, GTK_NO_WINDOW);
149 GTK_WIDGET_UNSET_FLAGS (toolbar, GTK_CAN_FOCUS);
151 toolbar->num_children = 0;
152 toolbar->children = NULL;
153 toolbar->orientation = GTK_ORIENTATION_HORIZONTAL;
154 toolbar->style = GTK_TOOLBAR_ICONS;
155 toolbar->relief = GTK_RELIEF_NORMAL;
156 toolbar->space_size = DEFAULT_SPACE_SIZE;
157 toolbar->tooltips = gtk_tooltips_new ();
158 toolbar->button_maxw = 0;
159 toolbar->button_maxh = 0;
163 gtk_toolbar_new (GtkOrientation orientation,
164 GtkToolbarStyle style)
168 toolbar = gtk_type_new (gtk_toolbar_get_type ());
170 toolbar->orientation = orientation;
171 toolbar->style = style;
173 return GTK_WIDGET (toolbar);
177 gtk_toolbar_destroy (GtkObject *object)
182 g_return_if_fail (object != NULL);
183 g_return_if_fail (GTK_IS_TOOLBAR (object));
185 toolbar = GTK_TOOLBAR (object);
187 gtk_object_unref (GTK_OBJECT (toolbar->tooltips));
188 toolbar->tooltips = NULL;
190 for (children = toolbar->children; children; children = children->next)
192 GtkToolbarChild *child;
194 child = children->data;
196 if (child->type != GTK_TOOLBAR_CHILD_SPACE)
198 gtk_widget_ref (child->widget);
199 gtk_widget_unparent (child->widget);
200 gtk_widget_destroy (child->widget);
201 gtk_widget_unref (child->widget);
207 g_list_free (toolbar->children);
208 toolbar->children = NULL;
210 if (GTK_OBJECT_CLASS (parent_class)->destroy)
211 (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
215 gtk_toolbar_map (GtkWidget *widget)
219 GtkToolbarChild *child;
221 g_return_if_fail (widget != NULL);
222 g_return_if_fail (GTK_IS_TOOLBAR (widget));
224 toolbar = GTK_TOOLBAR (widget);
225 GTK_WIDGET_SET_FLAGS (toolbar, GTK_MAPPED);
227 for (children = toolbar->children; children; children = children->next)
229 child = children->data;
231 if ((child->type != GTK_TOOLBAR_CHILD_SPACE)
232 && GTK_WIDGET_VISIBLE (child->widget) && !GTK_WIDGET_MAPPED (child->widget))
233 gtk_widget_map (child->widget);
238 gtk_toolbar_unmap (GtkWidget *widget)
242 GtkToolbarChild *child;
244 g_return_if_fail (widget != NULL);
245 g_return_if_fail (GTK_IS_TOOLBAR (widget));
247 toolbar = GTK_TOOLBAR (widget);
248 GTK_WIDGET_UNSET_FLAGS (toolbar, GTK_MAPPED);
250 for (children = toolbar->children; children; children = children->next)
252 child = children->data;
254 if ((child->type != GTK_TOOLBAR_CHILD_SPACE)
255 && GTK_WIDGET_VISIBLE (child->widget) && GTK_WIDGET_MAPPED (child->widget))
256 gtk_widget_unmap (child->widget);
261 gtk_toolbar_draw (GtkWidget *widget,
266 GtkToolbarChild *child;
267 GdkRectangle child_area;
269 g_return_if_fail (widget != NULL);
270 g_return_if_fail (GTK_IS_TOOLBAR (widget));
272 if (GTK_WIDGET_DRAWABLE (widget))
274 toolbar = GTK_TOOLBAR (widget);
276 for (children = toolbar->children; children; children = children->next)
278 child = children->data;
280 if ((child->type != GTK_TOOLBAR_CHILD_SPACE)
281 && gtk_widget_intersect (child->widget, area, &child_area))
282 gtk_widget_draw (child->widget, &child_area);
288 gtk_toolbar_expose (GtkWidget *widget,
289 GdkEventExpose *event)
293 GtkToolbarChild *child;
294 GdkEventExpose child_event;
296 g_return_val_if_fail (widget != NULL, FALSE);
297 g_return_val_if_fail (GTK_IS_TOOLBAR (widget), FALSE);
298 g_return_val_if_fail (event != NULL, FALSE);
300 if (GTK_WIDGET_DRAWABLE (widget))
302 toolbar = GTK_TOOLBAR (widget);
304 child_event = *event;
306 for (children = toolbar->children; children; children = children->next)
308 child = children->data;
310 if ((child->type != GTK_TOOLBAR_CHILD_SPACE)
311 && GTK_WIDGET_NO_WINDOW (child->widget)
312 && gtk_widget_intersect (child->widget, &event->area, &child_event.area))
313 gtk_widget_event (child->widget, (GdkEvent *) &child_event);
321 gtk_toolbar_size_request (GtkWidget *widget,
322 GtkRequisition *requisition)
326 GtkToolbarChild *child;
328 gint button_maxw, button_maxh;
329 gint widget_maxw, widget_maxh;
331 g_return_if_fail (widget != NULL);
332 g_return_if_fail (GTK_IS_TOOLBAR (widget));
333 g_return_if_fail (requisition != NULL);
335 toolbar = GTK_TOOLBAR (widget);
337 requisition->width = GTK_CONTAINER (toolbar)->border_width * 2;
338 requisition->height = GTK_CONTAINER (toolbar)->border_width * 2;
345 for (children = toolbar->children; children; children = children->next)
347 child = children->data;
351 case GTK_TOOLBAR_CHILD_SPACE:
352 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
353 requisition->width += toolbar->space_size;
355 requisition->height += toolbar->space_size;
359 case GTK_TOOLBAR_CHILD_BUTTON:
360 case GTK_TOOLBAR_CHILD_RADIOBUTTON:
361 case GTK_TOOLBAR_CHILD_TOGGLEBUTTON:
362 if (GTK_WIDGET_VISIBLE (child->widget))
364 gtk_widget_size_request (child->widget, &child->widget->requisition);
367 button_maxw = MAX (button_maxw, child->widget->requisition.width);
368 button_maxh = MAX (button_maxh, child->widget->requisition.height);
373 case GTK_TOOLBAR_CHILD_WIDGET:
374 if (GTK_WIDGET_VISIBLE (child->widget))
376 gtk_widget_size_request (child->widget, &child->widget->requisition);
378 widget_maxw = MAX (widget_maxw, child->widget->requisition.width);
379 widget_maxh = MAX (widget_maxh, child->widget->requisition.height);
381 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
382 requisition->width += child->widget->requisition.width;
384 requisition->height += child->widget->requisition.height;
390 g_assert_not_reached ();
394 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
396 requisition->width += nbuttons * button_maxw;
397 requisition->height += MAX (button_maxh, widget_maxh);
401 requisition->width += MAX (button_maxw, widget_maxw);
402 requisition->height += nbuttons * button_maxh;
405 toolbar->button_maxw = button_maxw;
406 toolbar->button_maxh = button_maxh;
410 gtk_toolbar_size_allocate (GtkWidget *widget,
411 GtkAllocation *allocation)
415 GtkToolbarChild *child;
419 g_return_if_fail (widget != NULL);
420 g_return_if_fail (GTK_IS_TOOLBAR (widget));
421 g_return_if_fail (allocation != NULL);
423 toolbar = GTK_TOOLBAR (widget);
424 widget->allocation = *allocation;
426 border_width = GTK_CONTAINER (toolbar)->border_width;
428 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
429 alloc.x = allocation->x + border_width;
431 alloc.y = allocation->y + border_width;
433 for (children = toolbar->children; children; children = children->next)
435 child = children->data;
439 case GTK_TOOLBAR_CHILD_SPACE:
440 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
441 alloc.x += toolbar->space_size;
443 alloc.y += toolbar->space_size;
447 case GTK_TOOLBAR_CHILD_BUTTON:
448 case GTK_TOOLBAR_CHILD_RADIOBUTTON:
449 case GTK_TOOLBAR_CHILD_TOGGLEBUTTON:
450 if (!GTK_WIDGET_VISIBLE (child->widget))
453 alloc.width = toolbar->button_maxw;
454 alloc.height = toolbar->button_maxh;
456 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
457 alloc.y = allocation->y + (allocation->height - toolbar->button_maxh) / 2;
459 alloc.x = allocation->x + (allocation->width - toolbar->button_maxw) / 2;
461 gtk_widget_size_allocate (child->widget, &alloc);
463 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
464 alloc.x += toolbar->button_maxw;
466 alloc.y += toolbar->button_maxh;
470 case GTK_TOOLBAR_CHILD_WIDGET:
471 if (!GTK_WIDGET_VISIBLE (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_forall (GtkContainer *container,
548 gboolean include_internals,
549 GtkCallback callback,
550 gpointer callback_data)
554 GtkToolbarChild *child;
556 g_return_if_fail (container != NULL);
557 g_return_if_fail (GTK_IS_TOOLBAR (container));
558 g_return_if_fail (callback != NULL);
560 toolbar = GTK_TOOLBAR (container);
562 for (children = toolbar->children; children; children = children->next)
564 child = children->data;
566 if (child->type != GTK_TOOLBAR_CHILD_SPACE)
567 (*callback) (child->widget, callback_data);
572 gtk_toolbar_append_item (GtkToolbar *toolbar,
574 const char *tooltip_text,
575 const char *tooltip_private_text,
577 GtkSignalFunc callback,
580 return gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_BUTTON,
582 tooltip_text, tooltip_private_text,
583 icon, callback, user_data,
584 toolbar->num_children);
588 gtk_toolbar_prepend_item (GtkToolbar *toolbar,
590 const char *tooltip_text,
591 const char *tooltip_private_text,
593 GtkSignalFunc callback,
596 return gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_BUTTON,
598 tooltip_text, tooltip_private_text,
599 icon, callback, user_data,
604 gtk_toolbar_insert_item (GtkToolbar *toolbar,
606 const char *tooltip_text,
607 const char *tooltip_private_text,
609 GtkSignalFunc callback,
613 return gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_BUTTON,
615 tooltip_text, tooltip_private_text,
616 icon, callback, user_data,
621 gtk_toolbar_append_space (GtkToolbar *toolbar)
623 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_SPACE,
627 toolbar->num_children);
631 gtk_toolbar_prepend_space (GtkToolbar *toolbar)
633 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_SPACE,
641 gtk_toolbar_insert_space (GtkToolbar *toolbar,
644 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_SPACE,
652 gtk_toolbar_append_widget (GtkToolbar *toolbar,
654 const gchar *tooltip_text,
655 const gchar *tooltip_private_text)
657 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_WIDGET,
659 tooltip_text, tooltip_private_text,
661 toolbar->num_children);
665 gtk_toolbar_prepend_widget (GtkToolbar *toolbar,
667 const gchar *tooltip_text,
668 const gchar *tooltip_private_text)
670 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_WIDGET,
672 tooltip_text, tooltip_private_text,
674 toolbar->num_children);
678 gtk_toolbar_insert_widget (GtkToolbar *toolbar,
680 const char *tooltip_text,
681 const char *tooltip_private_text,
684 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_WIDGET,
686 tooltip_text, tooltip_private_text,
692 gtk_toolbar_append_element (GtkToolbar *toolbar,
693 GtkToolbarChildType type,
696 const char *tooltip_text,
697 const char *tooltip_private_text,
699 GtkSignalFunc callback,
702 return gtk_toolbar_insert_element (toolbar, type, widget, text,
703 tooltip_text, tooltip_private_text,
704 icon, callback, user_data,
705 toolbar->num_children);
709 gtk_toolbar_prepend_element (GtkToolbar *toolbar,
710 GtkToolbarChildType type,
713 const char *tooltip_text,
714 const char *tooltip_private_text,
716 GtkSignalFunc callback,
719 return gtk_toolbar_insert_element (toolbar, type, widget, text,
720 tooltip_text, tooltip_private_text,
721 icon, callback, user_data, 0);
725 gtk_toolbar_insert_element (GtkToolbar *toolbar,
726 GtkToolbarChildType type,
729 const char *tooltip_text,
730 const char *tooltip_private_text,
732 GtkSignalFunc callback,
736 GtkToolbarChild *child;
739 g_return_val_if_fail (toolbar != NULL, NULL);
740 g_return_val_if_fail (GTK_IS_TOOLBAR (toolbar), NULL);
741 if (type == GTK_TOOLBAR_CHILD_WIDGET)
743 g_return_val_if_fail (widget != NULL, NULL);
744 g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
746 else if (type != GTK_TOOLBAR_CHILD_RADIOBUTTON)
747 g_return_val_if_fail (widget == NULL, NULL);
749 child = g_new (GtkToolbarChild, 1);
756 case GTK_TOOLBAR_CHILD_SPACE:
757 child->widget = NULL;
760 case GTK_TOOLBAR_CHILD_WIDGET:
761 child->widget = widget;
764 case GTK_TOOLBAR_CHILD_BUTTON:
765 case GTK_TOOLBAR_CHILD_TOGGLEBUTTON:
766 case GTK_TOOLBAR_CHILD_RADIOBUTTON:
767 if (type == GTK_TOOLBAR_CHILD_BUTTON)
769 child->widget = gtk_button_new ();
770 gtk_button_set_relief (GTK_BUTTON (child->widget), toolbar->relief);
772 else if (type == GTK_TOOLBAR_CHILD_TOGGLEBUTTON)
774 child->widget = gtk_toggle_button_new ();
775 gtk_button_set_relief (GTK_BUTTON (child->widget), toolbar->relief);
776 gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (child->widget),
781 child->widget = gtk_radio_button_new (widget
782 ? gtk_radio_button_group (GTK_RADIO_BUTTON (widget))
784 gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (child->widget), FALSE);
787 GTK_WIDGET_UNSET_FLAGS (child->widget, GTK_CAN_FOCUS);
790 gtk_signal_connect (GTK_OBJECT (child->widget), "clicked",
791 callback, user_data);
793 vbox = gtk_vbox_new (FALSE, 0);
794 gtk_container_add (GTK_CONTAINER (child->widget), vbox);
795 gtk_widget_show (vbox);
799 child->label = gtk_label_new (text);
800 gtk_box_pack_end (GTK_BOX (vbox), child->label, FALSE, FALSE, 0);
801 if (toolbar->style != GTK_TOOLBAR_ICONS)
802 gtk_widget_show (child->label);
807 child->icon = GTK_WIDGET (icon);
808 gtk_box_pack_end (GTK_BOX (vbox), child->icon, FALSE, FALSE, 0);
809 if (toolbar->style != GTK_TOOLBAR_TEXT)
810 gtk_widget_show (child->icon);
813 gtk_widget_show (child->widget);
817 g_assert_not_reached ();
820 if ((type != GTK_TOOLBAR_CHILD_SPACE) && tooltip_text)
821 gtk_tooltips_set_tip (toolbar->tooltips, child->widget,
822 tooltip_text, tooltip_private_text);
824 toolbar->children = g_list_insert (toolbar->children, child, position);
825 toolbar->num_children++;
827 if (type != GTK_TOOLBAR_CHILD_SPACE)
828 gtk_widget_set_parent (child->widget, GTK_WIDGET (toolbar));
830 if ((type != GTK_TOOLBAR_CHILD_SPACE) && GTK_WIDGET_VISIBLE (toolbar))
832 if (GTK_WIDGET_REALIZED (toolbar)
833 && !GTK_WIDGET_REALIZED (child->widget))
834 gtk_widget_realize (child->widget);
836 if (GTK_WIDGET_MAPPED (toolbar)
837 && !GTK_WIDGET_MAPPED (child->widget))
838 gtk_widget_map (child->widget);
841 if (GTK_WIDGET_VISIBLE (toolbar) &&
842 ((type == GTK_TOOLBAR_CHILD_SPACE) ||
843 GTK_WIDGET_VISIBLE (child->widget)))
844 gtk_widget_queue_resize (GTK_WIDGET (toolbar));
846 return child->widget;
850 gtk_toolbar_set_orientation (GtkToolbar *toolbar,
851 GtkOrientation orientation)
853 g_return_if_fail (toolbar != NULL);
854 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
856 gtk_signal_emit (GTK_OBJECT (toolbar), toolbar_signals[ORIENTATION_CHANGED], orientation);
860 gtk_toolbar_set_style (GtkToolbar *toolbar,
861 GtkToolbarStyle style)
863 g_return_if_fail (toolbar != NULL);
864 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
866 gtk_signal_emit (GTK_OBJECT (toolbar), toolbar_signals[STYLE_CHANGED], style);
870 gtk_toolbar_set_space_size (GtkToolbar *toolbar,
873 g_return_if_fail (toolbar != NULL);
874 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
876 if (toolbar->space_size != space_size)
878 toolbar->space_size = space_size;
879 gtk_widget_queue_resize (GTK_WIDGET (toolbar));
884 gtk_toolbar_set_tooltips (GtkToolbar *toolbar,
887 g_return_if_fail (toolbar != NULL);
888 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
891 gtk_tooltips_enable (toolbar->tooltips);
893 gtk_tooltips_disable (toolbar->tooltips);
897 gtk_toolbar_set_button_relief (GtkToolbar *toolbar,
898 GtkReliefStyle relief)
901 GtkToolbarChild *child;
903 g_return_if_fail (toolbar != NULL);
904 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
906 if (toolbar->relief != relief)
908 toolbar->relief = relief;
910 for (children = toolbar->children; children; children = children->next)
912 child = children->data;
913 if (child->type == GTK_TOOLBAR_CHILD_BUTTON ||
914 child->type == GTK_TOOLBAR_CHILD_TOGGLEBUTTON)
915 gtk_button_set_relief (GTK_BUTTON (child->widget), relief);
918 gtk_widget_queue_resize (GTK_WIDGET (toolbar));
923 gtk_toolbar_get_button_relief (GtkToolbar *toolbar)
925 g_return_val_if_fail (toolbar != NULL, GTK_RELIEF_NORMAL);
926 g_return_val_if_fail (GTK_IS_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
928 return toolbar->relief;
932 gtk_real_toolbar_orientation_changed (GtkToolbar *toolbar,
933 GtkOrientation orientation)
935 g_return_if_fail (toolbar != NULL);
936 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
938 if (toolbar->orientation != orientation)
940 toolbar->orientation = orientation;
941 gtk_widget_queue_resize (GTK_WIDGET (toolbar));
946 gtk_real_toolbar_style_changed (GtkToolbar *toolbar,
947 GtkToolbarStyle style)
950 GtkToolbarChild *child;
952 g_return_if_fail (toolbar != NULL);
953 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
955 if (toolbar->style != style)
957 toolbar->style = style;
959 for (children = toolbar->children; children; children = children->next)
961 child = children->data;
963 if (child->type == GTK_TOOLBAR_CHILD_BUTTON ||
964 child->type == GTK_TOOLBAR_CHILD_RADIOBUTTON ||
965 child->type == GTK_TOOLBAR_CHILD_TOGGLEBUTTON)
968 case GTK_TOOLBAR_ICONS:
969 if (child->icon && !GTK_WIDGET_VISIBLE (child->icon))
970 gtk_widget_show (child->icon);
972 if (child->label && GTK_WIDGET_VISIBLE (child->label))
973 gtk_widget_hide (child->label);
977 case GTK_TOOLBAR_TEXT:
978 if (child->icon && GTK_WIDGET_VISIBLE (child->icon))
979 gtk_widget_hide (child->icon);
981 if (child->label && !GTK_WIDGET_VISIBLE (child->label))
982 gtk_widget_show (child->label);
986 case GTK_TOOLBAR_BOTH:
987 if (child->icon && !GTK_WIDGET_VISIBLE (child->icon))
988 gtk_widget_show (child->icon);
990 if (child->label && !GTK_WIDGET_VISIBLE (child->label))
991 gtk_widget_show (child->label);
996 g_assert_not_reached ();
1000 gtk_widget_queue_resize (GTK_WIDGET (toolbar));