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,
97 toolbar_type = gtk_type_unique (gtk_container_get_type (), &toolbar_info);
104 gtk_toolbar_class_init (GtkToolbarClass *class)
106 GtkObjectClass *object_class;
107 GtkWidgetClass *widget_class;
108 GtkContainerClass *container_class;
110 object_class = (GtkObjectClass *) class;
111 widget_class = (GtkWidgetClass *) class;
112 container_class = (GtkContainerClass *) class;
114 parent_class = gtk_type_class (gtk_container_get_type ());
116 toolbar_signals[ORIENTATION_CHANGED] =
117 gtk_signal_new ("orientation_changed",
120 GTK_SIGNAL_OFFSET (GtkToolbarClass, orientation_changed),
121 gtk_toolbar_marshal_signal_1,
124 toolbar_signals[STYLE_CHANGED] =
125 gtk_signal_new ("style_changed",
128 GTK_SIGNAL_OFFSET (GtkToolbarClass, style_changed),
129 gtk_toolbar_marshal_signal_1,
133 gtk_object_class_add_signals (object_class, toolbar_signals, LAST_SIGNAL);
135 object_class->destroy = gtk_toolbar_destroy;
137 widget_class->map = gtk_toolbar_map;
138 widget_class->unmap = gtk_toolbar_unmap;
139 widget_class->draw = gtk_toolbar_draw;
140 widget_class->expose_event = gtk_toolbar_expose;
141 widget_class->size_request = gtk_toolbar_size_request;
142 widget_class->size_allocate = gtk_toolbar_size_allocate;
144 container_class->add = gtk_toolbar_add;
145 container_class->remove = gtk_toolbar_remove;
146 container_class->foreach = gtk_toolbar_foreach;
147 container_class->focus = NULL;
149 class->orientation_changed = gtk_real_toolbar_orientation_changed;
150 class->style_changed = gtk_real_toolbar_style_changed;
154 gtk_toolbar_init (GtkToolbar *toolbar)
156 GTK_WIDGET_SET_FLAGS (toolbar, GTK_NO_WINDOW);
157 GTK_WIDGET_UNSET_FLAGS (toolbar, GTK_CAN_FOCUS);
159 toolbar->num_children = 0;
160 toolbar->children = NULL;
161 toolbar->orientation = GTK_ORIENTATION_HORIZONTAL;
162 toolbar->style = GTK_TOOLBAR_ICONS;
163 toolbar->relief = GTK_RELIEF_NORMAL;
164 toolbar->space_size = DEFAULT_SPACE_SIZE;
165 toolbar->tooltips = gtk_tooltips_new ();
166 toolbar->button_maxw = 0;
167 toolbar->button_maxh = 0;
171 gtk_toolbar_new (GtkOrientation orientation,
172 GtkToolbarStyle style)
176 toolbar = gtk_type_new (gtk_toolbar_get_type ());
178 toolbar->orientation = orientation;
179 toolbar->style = style;
181 return GTK_WIDGET (toolbar);
185 gtk_toolbar_destroy (GtkObject *object)
190 g_return_if_fail (object != NULL);
191 g_return_if_fail (GTK_IS_TOOLBAR (object));
193 toolbar = GTK_TOOLBAR (object);
195 gtk_object_unref (GTK_OBJECT (toolbar->tooltips));
196 toolbar->tooltips = NULL;
198 for (children = toolbar->children; children; children = children->next)
200 GtkToolbarChild *child;
202 child = children->data;
204 if (child->type != GTK_TOOLBAR_CHILD_SPACE)
206 gtk_widget_ref (child->widget);
207 gtk_widget_unparent (child->widget);
208 gtk_widget_destroy (child->widget);
209 gtk_widget_unref (child->widget);
215 g_list_free (toolbar->children);
216 toolbar->children = NULL;
218 if (GTK_OBJECT_CLASS (parent_class)->destroy)
219 (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
223 gtk_toolbar_map (GtkWidget *widget)
227 GtkToolbarChild *child;
229 g_return_if_fail (widget != NULL);
230 g_return_if_fail (GTK_IS_TOOLBAR (widget));
232 toolbar = GTK_TOOLBAR (widget);
233 GTK_WIDGET_SET_FLAGS (toolbar, GTK_MAPPED);
235 for (children = toolbar->children; children; children = children->next)
237 child = children->data;
239 if ((child->type != GTK_TOOLBAR_CHILD_SPACE)
240 && GTK_WIDGET_VISIBLE (child->widget) && !GTK_WIDGET_MAPPED (child->widget))
241 gtk_widget_map (child->widget);
246 gtk_toolbar_unmap (GtkWidget *widget)
250 GtkToolbarChild *child;
252 g_return_if_fail (widget != NULL);
253 g_return_if_fail (GTK_IS_TOOLBAR (widget));
255 toolbar = GTK_TOOLBAR (widget);
256 GTK_WIDGET_UNSET_FLAGS (toolbar, GTK_MAPPED);
258 for (children = toolbar->children; children; children = children->next)
260 child = children->data;
262 if ((child->type != GTK_TOOLBAR_CHILD_SPACE)
263 && GTK_WIDGET_VISIBLE (child->widget) && GTK_WIDGET_MAPPED (child->widget))
264 gtk_widget_unmap (child->widget);
269 gtk_toolbar_draw (GtkWidget *widget,
274 GtkToolbarChild *child;
275 GdkRectangle child_area;
277 g_return_if_fail (widget != NULL);
278 g_return_if_fail (GTK_IS_TOOLBAR (widget));
280 if (GTK_WIDGET_DRAWABLE (widget))
282 toolbar = GTK_TOOLBAR (widget);
284 for (children = toolbar->children; children; children = children->next)
286 child = children->data;
288 if ((child->type != GTK_TOOLBAR_CHILD_SPACE)
289 && gtk_widget_intersect (child->widget, area, &child_area))
290 gtk_widget_draw (child->widget, &child_area);
296 gtk_toolbar_expose (GtkWidget *widget,
297 GdkEventExpose *event)
301 GtkToolbarChild *child;
302 GdkEventExpose child_event;
304 g_return_val_if_fail (widget != NULL, FALSE);
305 g_return_val_if_fail (GTK_IS_TOOLBAR (widget), FALSE);
306 g_return_val_if_fail (event != NULL, FALSE);
308 if (GTK_WIDGET_DRAWABLE (widget))
310 toolbar = GTK_TOOLBAR (widget);
312 child_event = *event;
314 for (children = toolbar->children; children; children = children->next)
316 child = children->data;
318 if ((child->type != GTK_TOOLBAR_CHILD_SPACE)
319 && GTK_WIDGET_NO_WINDOW (child->widget)
320 && gtk_widget_intersect (child->widget, &event->area, &child_event.area))
321 gtk_widget_event (child->widget, (GdkEvent *) &child_event);
329 gtk_toolbar_size_request (GtkWidget *widget,
330 GtkRequisition *requisition)
334 GtkToolbarChild *child;
336 gint button_maxw, button_maxh;
337 gint widget_maxw, widget_maxh;
339 g_return_if_fail (widget != NULL);
340 g_return_if_fail (GTK_IS_TOOLBAR (widget));
341 g_return_if_fail (requisition != NULL);
343 toolbar = GTK_TOOLBAR (widget);
345 requisition->width = GTK_CONTAINER (toolbar)->border_width * 2;
346 requisition->height = GTK_CONTAINER (toolbar)->border_width * 2;
353 for (children = toolbar->children; children; children = children->next)
355 child = children->data;
359 case GTK_TOOLBAR_CHILD_SPACE:
360 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
361 requisition->width += toolbar->space_size;
363 requisition->height += toolbar->space_size;
367 case GTK_TOOLBAR_CHILD_BUTTON:
368 case GTK_TOOLBAR_CHILD_RADIOBUTTON:
369 case GTK_TOOLBAR_CHILD_TOGGLEBUTTON:
370 if (GTK_WIDGET_VISIBLE (child->widget))
372 gtk_widget_size_request (child->widget, &child->widget->requisition);
375 button_maxw = MAX (button_maxw, child->widget->requisition.width);
376 button_maxh = MAX (button_maxh, child->widget->requisition.height);
381 case GTK_TOOLBAR_CHILD_WIDGET:
382 if (GTK_WIDGET_VISIBLE (child->widget))
384 gtk_widget_size_request (child->widget, &child->widget->requisition);
386 widget_maxw = MAX (widget_maxw, child->widget->requisition.width);
387 widget_maxh = MAX (widget_maxh, child->widget->requisition.height);
389 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
390 requisition->width += child->widget->requisition.width;
392 requisition->height += child->widget->requisition.height;
398 g_assert_not_reached ();
402 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
404 requisition->width += nbuttons * button_maxw;
405 requisition->height += MAX (button_maxh, widget_maxh);
409 requisition->width += MAX (button_maxw, widget_maxw);
410 requisition->height += nbuttons * button_maxh;
413 toolbar->button_maxw = button_maxw;
414 toolbar->button_maxh = button_maxh;
418 gtk_toolbar_size_allocate (GtkWidget *widget,
419 GtkAllocation *allocation)
423 GtkToolbarChild *child;
427 g_return_if_fail (widget != NULL);
428 g_return_if_fail (GTK_IS_TOOLBAR (widget));
429 g_return_if_fail (allocation != NULL);
431 toolbar = GTK_TOOLBAR (widget);
432 widget->allocation = *allocation;
434 border_width = GTK_CONTAINER (toolbar)->border_width;
436 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
437 alloc.x = allocation->x + border_width;
439 alloc.y = allocation->y + border_width;
441 for (children = toolbar->children; children; children = children->next)
443 child = children->data;
447 case GTK_TOOLBAR_CHILD_SPACE:
448 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
449 alloc.x += toolbar->space_size;
451 alloc.y += toolbar->space_size;
455 case GTK_TOOLBAR_CHILD_BUTTON:
456 case GTK_TOOLBAR_CHILD_RADIOBUTTON:
457 case GTK_TOOLBAR_CHILD_TOGGLEBUTTON:
458 if (!GTK_WIDGET_VISIBLE (child->widget))
461 alloc.width = toolbar->button_maxw;
462 alloc.height = toolbar->button_maxh;
464 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
465 alloc.y = allocation->y + (allocation->height - toolbar->button_maxh) / 2;
467 alloc.x = allocation->x + (allocation->width - toolbar->button_maxw) / 2;
469 gtk_widget_size_allocate (child->widget, &alloc);
471 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
472 alloc.x += toolbar->button_maxw;
474 alloc.y += toolbar->button_maxh;
478 case GTK_TOOLBAR_CHILD_WIDGET:
479 if (!GTK_WIDGET_VISIBLE (child->widget))
482 alloc.width = child->widget->requisition.width;
483 alloc.height = child->widget->requisition.height;
485 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
486 alloc.y = allocation->y + (allocation->height - child->widget->requisition.height) / 2;
488 alloc.x = allocation->x + (allocation->width - child->widget->requisition.width) / 2;
490 gtk_widget_size_allocate (child->widget, &alloc);
492 if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL)
493 alloc.x += child->widget->requisition.width;
495 alloc.y += child->widget->requisition.height;
500 g_assert_not_reached ();
506 gtk_toolbar_add (GtkContainer *container,
509 g_return_if_fail (container != NULL);
510 g_return_if_fail (GTK_IS_TOOLBAR (container));
511 g_return_if_fail (widget != NULL);
513 gtk_toolbar_append_widget (GTK_TOOLBAR (container), widget, NULL, NULL);
517 gtk_toolbar_remove (GtkContainer *container,
522 GtkToolbarChild *child;
524 g_return_if_fail (container != NULL);
525 g_return_if_fail (GTK_IS_TOOLBAR (container));
526 g_return_if_fail (widget != NULL);
528 toolbar = GTK_TOOLBAR (container);
530 for (children = toolbar->children; children; children = children->next)
532 child = children->data;
534 if ((child->type != GTK_TOOLBAR_CHILD_SPACE) && (child->widget == widget))
536 gboolean was_visible;
538 was_visible = GTK_WIDGET_VISIBLE (widget);
539 gtk_widget_unparent (widget);
541 toolbar->children = g_list_remove_link (toolbar->children, children);
543 g_list_free (children);
544 toolbar->num_children--;
546 if (was_visible && GTK_WIDGET_VISIBLE (container))
547 gtk_widget_queue_resize (GTK_WIDGET (container));
555 gtk_toolbar_foreach (GtkContainer *container,
556 GtkCallback callback,
557 gpointer callback_data)
561 GtkToolbarChild *child;
563 g_return_if_fail (container != NULL);
564 g_return_if_fail (GTK_IS_TOOLBAR (container));
565 g_return_if_fail (callback != NULL);
567 toolbar = GTK_TOOLBAR (container);
569 for (children = toolbar->children; children; children = children->next)
571 child = children->data;
573 if (child->type != GTK_TOOLBAR_CHILD_SPACE)
574 (*callback) (child->widget, callback_data);
579 gtk_toolbar_append_item (GtkToolbar *toolbar,
581 const char *tooltip_text,
582 const char *tooltip_private_text,
584 GtkSignalFunc callback,
587 return gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_BUTTON,
589 tooltip_text, tooltip_private_text,
590 icon, callback, user_data,
591 toolbar->num_children);
595 gtk_toolbar_prepend_item (GtkToolbar *toolbar,
597 const char *tooltip_text,
598 const char *tooltip_private_text,
600 GtkSignalFunc callback,
603 return gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_BUTTON,
605 tooltip_text, tooltip_private_text,
606 icon, callback, user_data,
611 gtk_toolbar_insert_item (GtkToolbar *toolbar,
613 const char *tooltip_text,
614 const char *tooltip_private_text,
616 GtkSignalFunc callback,
620 return gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_BUTTON,
622 tooltip_text, tooltip_private_text,
623 icon, callback, user_data,
628 gtk_toolbar_append_space (GtkToolbar *toolbar)
630 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_SPACE,
634 toolbar->num_children);
638 gtk_toolbar_prepend_space (GtkToolbar *toolbar)
640 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_SPACE,
648 gtk_toolbar_insert_space (GtkToolbar *toolbar,
651 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_SPACE,
659 gtk_toolbar_append_widget (GtkToolbar *toolbar,
661 const gchar *tooltip_text,
662 const gchar *tooltip_private_text)
664 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_WIDGET,
666 tooltip_text, tooltip_private_text,
668 toolbar->num_children);
672 gtk_toolbar_prepend_widget (GtkToolbar *toolbar,
674 const gchar *tooltip_text,
675 const gchar *tooltip_private_text)
677 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_WIDGET,
679 tooltip_text, tooltip_private_text,
681 toolbar->num_children);
685 gtk_toolbar_insert_widget (GtkToolbar *toolbar,
687 const char *tooltip_text,
688 const char *tooltip_private_text,
691 gtk_toolbar_insert_element (toolbar, GTK_TOOLBAR_CHILD_WIDGET,
693 tooltip_text, tooltip_private_text,
699 gtk_toolbar_append_element (GtkToolbar *toolbar,
700 GtkToolbarChildType type,
703 const char *tooltip_text,
704 const char *tooltip_private_text,
706 GtkSignalFunc callback,
709 return gtk_toolbar_insert_element (toolbar, type, widget, text,
710 tooltip_text, tooltip_private_text,
711 icon, callback, user_data,
712 toolbar->num_children);
716 gtk_toolbar_prepend_element (GtkToolbar *toolbar,
717 GtkToolbarChildType type,
720 const char *tooltip_text,
721 const char *tooltip_private_text,
723 GtkSignalFunc callback,
726 return gtk_toolbar_insert_element (toolbar, type, widget, text,
727 tooltip_text, tooltip_private_text,
728 icon, callback, user_data, 0);
732 gtk_toolbar_insert_element (GtkToolbar *toolbar,
733 GtkToolbarChildType type,
736 const char *tooltip_text,
737 const char *tooltip_private_text,
739 GtkSignalFunc callback,
743 GtkToolbarChild *child;
746 g_return_val_if_fail (toolbar != NULL, NULL);
747 g_return_val_if_fail (GTK_IS_TOOLBAR (toolbar), NULL);
748 g_return_val_if_fail ((type != GTK_TOOLBAR_CHILD_WIDGET) || (widget != NULL), NULL);
750 child = g_new (GtkToolbarChild, 1);
757 case GTK_TOOLBAR_CHILD_SPACE:
758 child->widget = NULL;
761 case GTK_TOOLBAR_CHILD_WIDGET:
762 child->widget = widget;
765 case GTK_TOOLBAR_CHILD_BUTTON:
766 case GTK_TOOLBAR_CHILD_TOGGLEBUTTON:
767 case GTK_TOOLBAR_CHILD_RADIOBUTTON:
768 if (type == GTK_TOOLBAR_CHILD_BUTTON)
770 child->widget = gtk_button_new ();
771 gtk_button_set_relief (GTK_BUTTON (child->widget), toolbar->relief);
773 else if (type == GTK_TOOLBAR_CHILD_TOGGLEBUTTON)
775 child->widget = gtk_toggle_button_new ();
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);
788 gtk_signal_connect (GTK_OBJECT (child->widget), "clicked",
789 callback, user_data);
791 vbox = gtk_vbox_new (FALSE, 0);
792 gtk_container_add (GTK_CONTAINER (child->widget), vbox);
793 gtk_widget_show (vbox);
797 child->label = gtk_label_new (text);
798 gtk_box_pack_end (GTK_BOX (vbox), child->label, FALSE, FALSE, 0);
799 if (toolbar->style != GTK_TOOLBAR_ICONS)
800 gtk_widget_show (child->label);
805 child->icon = GTK_WIDGET (icon);
806 gtk_box_pack_end (GTK_BOX (vbox), child->icon, FALSE, FALSE, 0);
807 if (toolbar->style != GTK_TOOLBAR_TEXT)
808 gtk_widget_show (child->icon);
811 gtk_widget_show (child->widget);
815 g_assert_not_reached ();
818 if ((type != GTK_TOOLBAR_CHILD_SPACE) && tooltip_text)
819 gtk_tooltips_set_tip (toolbar->tooltips, child->widget,
820 tooltip_text, tooltip_private_text);
822 toolbar->children = g_list_insert (toolbar->children, child, position);
823 toolbar->num_children++;
825 if (type != GTK_TOOLBAR_CHILD_SPACE)
826 gtk_widget_set_parent (child->widget, GTK_WIDGET (toolbar));
828 if ((type != GTK_TOOLBAR_CHILD_SPACE) && GTK_WIDGET_VISIBLE (toolbar))
830 if (GTK_WIDGET_REALIZED (toolbar)
831 && !GTK_WIDGET_REALIZED (child->widget))
832 gtk_widget_realize (child->widget);
834 if (GTK_WIDGET_MAPPED (toolbar)
835 && !GTK_WIDGET_MAPPED (child->widget))
836 gtk_widget_map (child->widget);
839 if (GTK_WIDGET_VISIBLE (toolbar) &&
840 ((type == GTK_TOOLBAR_CHILD_SPACE) ||
841 GTK_WIDGET_VISIBLE (child->widget)))
842 gtk_widget_queue_resize (GTK_WIDGET (toolbar));
844 return child->widget;
848 gtk_toolbar_set_orientation (GtkToolbar *toolbar,
849 GtkOrientation orientation)
851 gtk_signal_emit (GTK_OBJECT (toolbar), toolbar_signals[ORIENTATION_CHANGED], orientation);
855 gtk_toolbar_set_style (GtkToolbar *toolbar,
856 GtkToolbarStyle style)
858 gtk_signal_emit (GTK_OBJECT (toolbar), toolbar_signals[STYLE_CHANGED], style);
862 gtk_toolbar_set_space_size (GtkToolbar *toolbar,
865 g_return_if_fail (toolbar != NULL);
866 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
868 if (toolbar->space_size != space_size)
870 toolbar->space_size = space_size;
871 gtk_widget_queue_resize (GTK_WIDGET (toolbar));
876 gtk_toolbar_set_tooltips (GtkToolbar *toolbar,
879 g_return_if_fail (toolbar != NULL);
880 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
883 gtk_tooltips_enable (toolbar->tooltips);
885 gtk_tooltips_disable (toolbar->tooltips);
889 gtk_toolbar_set_button_relief (GtkToolbar *toolbar,
890 GtkReliefStyle relief)
893 GtkToolbarChild *child;
895 g_return_if_fail (toolbar != NULL);
896 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
898 if (toolbar->relief != relief)
900 toolbar->relief = relief;
902 for (children = toolbar->children; children; children = children->next)
904 child = children->data;
905 if (child->type == GTK_TOOLBAR_CHILD_BUTTON)
906 gtk_button_set_relief (GTK_BUTTON (child->widget), relief);
909 gtk_widget_queue_resize (GTK_WIDGET (toolbar));
914 gtk_toolbar_get_button_relief (GtkToolbar *toolbar)
916 g_return_val_if_fail (toolbar != NULL, GTK_RELIEF_NORMAL);
917 g_return_val_if_fail (GTK_IS_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
919 return toolbar->relief;
923 gtk_toolbar_marshal_signal_1 (GtkObject *object,
928 GtkToolbarSignal1 rfunc;
930 rfunc = (GtkToolbarSignal1) func;
932 (*rfunc) (object, GTK_VALUE_ENUM (args[0]), func_data);
936 gtk_real_toolbar_orientation_changed (GtkToolbar *toolbar,
937 GtkOrientation orientation)
939 g_return_if_fail (toolbar != NULL);
940 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
942 if (toolbar->orientation != orientation)
944 toolbar->orientation = orientation;
945 gtk_widget_queue_resize (GTK_WIDGET (toolbar));
950 gtk_real_toolbar_style_changed (GtkToolbar *toolbar,
951 GtkToolbarStyle style)
954 GtkToolbarChild *child;
956 g_return_if_fail (toolbar != NULL);
957 g_return_if_fail (GTK_IS_TOOLBAR (toolbar));
959 if (toolbar->style != style)
961 toolbar->style = style;
963 for (children = toolbar->children; children; children = children->next)
965 child = children->data;
967 if (child->type == GTK_TOOLBAR_CHILD_BUTTON ||
968 child->type == GTK_TOOLBAR_CHILD_RADIOBUTTON ||
969 child->type == GTK_TOOLBAR_CHILD_TOGGLEBUTTON)
972 case GTK_TOOLBAR_ICONS:
973 if (child->icon && !GTK_WIDGET_VISIBLE (child->icon))
974 gtk_widget_show (child->icon);
976 if (child->label && GTK_WIDGET_VISIBLE (child->label))
977 gtk_widget_hide (child->label);
981 case GTK_TOOLBAR_TEXT:
982 if (child->icon && GTK_WIDGET_VISIBLE (child->icon))
983 gtk_widget_hide (child->icon);
985 if (child->label && !GTK_WIDGET_VISIBLE (child->label))
986 gtk_widget_show (child->label);
990 case GTK_TOOLBAR_BOTH:
991 if (child->icon && !GTK_WIDGET_VISIBLE (child->icon))
992 gtk_widget_show (child->icon);
994 if (child->label && !GTK_WIDGET_VISIBLE (child->label))
995 gtk_widget_show (child->label);
1000 g_assert_not_reached ();
1004 gtk_widget_queue_resize (GTK_WIDGET (toolbar));