diff options
Diffstat (limited to 'gtk/gtktoolbutton.c')
-rw-r--r-- | gtk/gtktoolbutton.c | 150 |
1 files changed, 86 insertions, 64 deletions
diff --git a/gtk/gtktoolbutton.c b/gtk/gtktoolbutton.c index 318b43a2be..4491aeb888 100644 --- a/gtk/gtktoolbutton.c +++ b/gtk/gtktoolbutton.c @@ -78,6 +78,18 @@ static void gtk_tool_button_construct_contents (GtkToolItem *tool_item); static GObjectClass *parent_class = NULL; static guint toolbutton_signals[LAST_SIGNAL] = { 0 }; +struct _GtkToolButtonPrivate +{ + GtkWidget *button; + + gchar *stock_id; + gchar *label_text; + GtkWidget *label_widget; + GtkWidget *icon_widget; + + guint use_underline : 1; +}; + GType gtk_tool_button_get_type (void) { @@ -212,17 +224,19 @@ gtk_tool_button_init (GtkToolButton *button, GtkToolButtonClass *klass) { GtkToolItem *toolitem = GTK_TOOL_ITEM (button); + + button->priv = g_new0 (GtkToolButtonPrivate, 1); gtk_tool_item_set_homogeneous (toolitem, TRUE); /* create button */ - button->button = g_object_new (klass->button_type, NULL); - gtk_button_set_focus_on_click (GTK_BUTTON (button->button), FALSE); - g_signal_connect_object (button->button, "clicked", + button->priv->button = g_object_new (klass->button_type, NULL); + gtk_button_set_focus_on_click (GTK_BUTTON (button->priv->button), FALSE); + g_signal_connect_object (button->priv->button, "clicked", G_CALLBACK (button_clicked), button, 0); - gtk_container_add (GTK_CONTAINER (button), button->button); - gtk_widget_show (button->button); + gtk_container_add (GTK_CONTAINER (button), button->priv->button); + gtk_widget_show (button->priv->button); } static void @@ -295,24 +309,24 @@ gtk_tool_button_construct_contents (GtkToolItem *tool_item) gtk_tool_item_set_proxy_menu_item (tool_item, MENU_ID, NULL); } - if (button->icon_widget && button->icon_widget->parent) + if (button->priv->icon_widget && button->priv->icon_widget->parent) { - gtk_container_remove (GTK_CONTAINER (button->icon_widget->parent), - button->icon_widget); + gtk_container_remove (GTK_CONTAINER (button->priv->icon_widget->parent), + button->priv->icon_widget); } - if (button->label_widget && button->label_widget->parent) + if (button->priv->label_widget && button->priv->label_widget->parent) { - gtk_container_remove (GTK_CONTAINER (button->label_widget->parent), - button->label_widget); + gtk_container_remove (GTK_CONTAINER (button->priv->label_widget->parent), + button->priv->label_widget); } - if (GTK_BIN (button->button)->child) + if (GTK_BIN (button->priv->button)->child) { /* Note: we are not destroying the label_widget or icon_widget * here because they were removed from their containers above */ - gtk_widget_destroy (GTK_BIN (button->button)->child); + gtk_widget_destroy (GTK_BIN (button->priv->button)->child); } style = gtk_tool_item_get_toolbar_style (GTK_TOOL_ITEM (button)); @@ -325,9 +339,9 @@ gtk_tool_button_construct_contents (GtkToolItem *tool_item) if (need_label) { - if (button->label_widget) + if (button->priv->label_widget) { - label = button->label_widget; + label = button->priv->label_widget; } else { @@ -335,12 +349,12 @@ gtk_tool_button_construct_contents (GtkToolItem *tool_item) gboolean elide; gchar *label_text; - if (button->label_text) + if (button->priv->label_text) { - label_text = button->label_text; - elide = button->use_underline; + label_text = button->priv->label_text; + elide = button->priv->use_underline; } - else if (button->stock_id && gtk_stock_lookup (button->stock_id, &stock_item)) + else if (button->priv->stock_id && gtk_stock_lookup (button->priv->stock_id, &stock_item)) { label_text = stock_item.label; elide = TRUE; @@ -367,20 +381,20 @@ gtk_tool_button_construct_contents (GtkToolItem *tool_item) icon_size = gtk_tool_item_get_icon_size (GTK_TOOL_ITEM (button)); if (need_icon) { - if (button->icon_widget) + if (button->priv->icon_widget) { - icon = button->icon_widget; + icon = button->priv->icon_widget; if (GTK_IS_IMAGE (icon)) { - g_object_set (G_OBJECT (button->icon_widget), + g_object_set (G_OBJECT (button->priv->icon_widget), "icon-size", icon_size, NULL); } } - else if (button->stock_id) + else if (button->priv->stock_id) { - icon = gtk_image_new_from_stock (button->stock_id, icon_size); + icon = gtk_image_new_from_stock (button->priv->stock_id, icon_size); gtk_widget_show (icon); } } @@ -389,32 +403,32 @@ gtk_tool_button_construct_contents (GtkToolItem *tool_item) { case GTK_TOOLBAR_ICONS: if (icon) - gtk_container_add (GTK_CONTAINER (button->button), icon); + gtk_container_add (GTK_CONTAINER (button->priv->button), icon); break; case GTK_TOOLBAR_BOTH: box = gtk_vbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (box), icon, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (box), label, FALSE, TRUE, 0); - gtk_container_add (GTK_CONTAINER (button->button), box); + gtk_container_add (GTK_CONTAINER (button->priv->button), box); break; case GTK_TOOLBAR_BOTH_HORIZ: box = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (box), icon, FALSE, TRUE, 0); gtk_box_pack_start (GTK_BOX (box), label, TRUE, TRUE, 0); - gtk_container_add (GTK_CONTAINER (button->button), box); + gtk_container_add (GTK_CONTAINER (button->priv->button), box); break; case GTK_TOOLBAR_TEXT: - gtk_container_add (GTK_CONTAINER (button->button), label); + gtk_container_add (GTK_CONTAINER (button->priv->button), label); break; } if (box) gtk_widget_show (box); - gtk_button_set_relief (GTK_BUTTON (button->button), + gtk_button_set_relief (GTK_BUTTON (button->priv->button), gtk_tool_item_get_relief_style (GTK_TOOL_ITEM (button))); gtk_widget_queue_resize (GTK_WIDGET (button)); @@ -470,10 +484,10 @@ gtk_tool_button_get_property (GObject *object, g_value_set_boolean (value, gtk_tool_button_get_use_underline (button)); break; case PROP_STOCK_ID: - g_value_set_string (value, button->stock_id); + g_value_set_string (value, button->priv->stock_id); break; case PROP_ICON_WIDGET: - g_value_set_object (value, button->icon_widget); + g_value_set_object (value, button->priv->icon_widget); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -485,8 +499,8 @@ gtk_tool_button_finalize (GObject *object) { GtkToolButton *button = GTK_TOOL_BUTTON (object); - g_free (button->stock_id); - button->stock_id = NULL; + g_free (button->priv->stock_id); + button->priv->stock_id = NULL; parent_class->finalize (object); } @@ -539,17 +553,17 @@ gtk_tool_button_create_menu_proxy (GtkToolItem *item) gboolean use_mnemonic = TRUE; const char *label; - if (button->label_widget && GTK_IS_LABEL (button->label_widget)) + if (button->priv->label_widget && GTK_IS_LABEL (button->priv->label_widget)) { - label = gtk_label_get_label (GTK_LABEL (button->label_widget)); - use_mnemonic = gtk_label_get_use_underline (GTK_LABEL (button->label_widget)); + label = gtk_label_get_label (GTK_LABEL (button->priv->label_widget)); + use_mnemonic = gtk_label_get_use_underline (GTK_LABEL (button->priv->label_widget)); } - else if (button->label_text) + else if (button->priv->label_text) { - label = button->label_text; - use_mnemonic = button->use_underline; + label = button->priv->label_text; + use_mnemonic = button->priv->use_underline; } - else if (button->stock_id && gtk_stock_lookup (button->stock_id, &stock_item)) + else if (button->priv->stock_id && gtk_stock_lookup (button->priv->stock_id, &stock_item)) { label = stock_item.label; use_mnemonic = FALSE; @@ -565,14 +579,14 @@ gtk_tool_button_create_menu_proxy (GtkToolItem *item) else menu_item = gtk_image_menu_item_new_with_label (label); - if (button->icon_widget && GTK_IS_IMAGE (button->icon_widget)) + if (button->priv->icon_widget && GTK_IS_IMAGE (button->priv->icon_widget)) { - menu_image = clone_image_menu_size (GTK_IMAGE (button->icon_widget), + menu_image = clone_image_menu_size (GTK_IMAGE (button->priv->icon_widget), gtk_widget_get_settings (GTK_WIDGET (button))); } - else if (button->stock_id) + else if (button->priv->stock_id) { - menu_image = gtk_image_new_from_stock (button->stock_id, GTK_ICON_SIZE_MENU); + menu_image = gtk_image_new_from_stock (button->priv->stock_id, GTK_ICON_SIZE_MENU); } if (menu_image) @@ -581,7 +595,7 @@ gtk_tool_button_create_menu_proxy (GtkToolItem *item) g_signal_connect_closure_by_id (menu_item, g_signal_lookup ("activate", G_OBJECT_TYPE (menu_item)), 0, g_cclosure_new_object_swap (G_CALLBACK (gtk_button_clicked), - G_OBJECT (GTK_TOOL_BUTTON (button)->button)), + G_OBJECT (GTK_TOOL_BUTTON (button)->priv->button)), FALSE); gtk_tool_item_set_proxy_menu_item (GTK_TOOL_ITEM (button), MENU_ID, menu_item); @@ -642,9 +656,9 @@ gtk_tool_button_set_label (GtkToolButton *button, g_return_if_fail (GTK_IS_TOOL_BUTTON (button)); - old_label = button->label_text; + old_label = button->priv->label_text; - button->label_text = g_strdup (label); + button->priv->label_text = g_strdup (label); gtk_tool_button_construct_contents (GTK_TOOL_ITEM (button)); g_object_notify (G_OBJECT (button), "label"); @@ -658,7 +672,7 @@ gtk_tool_button_get_label (GtkToolButton *button) { g_return_val_if_fail (GTK_IS_TOOL_BUTTON (button), NULL); - return button->label_text; + return button->priv->label_text; } void @@ -669,9 +683,9 @@ gtk_tool_button_set_use_underline (GtkToolButton *button, use_underline = use_underline != FALSE; - if (use_underline != button->use_underline) + if (use_underline != button->priv->use_underline) { - button->use_underline = use_underline; + button->priv->use_underline = use_underline; gtk_tool_button_construct_contents (GTK_TOOL_ITEM (button)); @@ -684,7 +698,7 @@ gtk_tool_button_get_use_underline (GtkToolButton *button) { g_return_val_if_fail (GTK_IS_TOOL_BUTTON (button), FALSE); - return button->use_underline; + return button->priv->use_underline; } void @@ -695,9 +709,9 @@ gtk_tool_button_set_stock_id (GtkToolButton *button, g_return_if_fail (GTK_IS_TOOL_BUTTON (button)); - old_stock_id = button->stock_id; + old_stock_id = button->priv->stock_id; - button->stock_id = g_strdup (stock_id); + button->priv->stock_id = g_strdup (stock_id); gtk_tool_button_construct_contents (GTK_TOOL_ITEM (button)); g_object_notify (G_OBJECT (button), "stock_id"); @@ -710,7 +724,7 @@ gtk_tool_button_get_stock_id (GtkToolButton *button) { g_return_val_if_fail (GTK_IS_TOOL_BUTTON (button), NULL); - return button->stock_id; + return button->priv->stock_id; } void @@ -720,10 +734,10 @@ gtk_tool_button_set_icon_widget (GtkToolButton *button, g_return_if_fail (GTK_IS_TOOL_BUTTON (button)); g_return_if_fail (icon == NULL || GTK_IS_WIDGET (icon)); - if (icon != button->icon_widget) + if (icon != button->priv->icon_widget) { - if (button->icon_widget) - g_object_unref (G_OBJECT (button->icon_widget)); + if (button->priv->icon_widget) + g_object_unref (G_OBJECT (button->priv->icon_widget)); if (icon) { @@ -731,7 +745,7 @@ gtk_tool_button_set_icon_widget (GtkToolButton *button, gtk_object_sink (GTK_OBJECT (icon)); } - button->icon_widget = icon; + button->priv->icon_widget = icon; gtk_tool_button_construct_contents (GTK_TOOL_ITEM (button)); @@ -746,10 +760,10 @@ gtk_tool_button_set_label_widget (GtkToolButton *button, g_return_if_fail (GTK_IS_TOOL_BUTTON (button)); g_return_if_fail (label_widget == NULL || GTK_IS_WIDGET (label_widget)); - if (label_widget != button->label_widget) + if (label_widget != button->priv->label_widget) { - if (button->label_widget) - g_object_unref (button->label_widget); + if (button->priv->label_widget) + g_object_unref (button->priv->label_widget); if (label_widget) { @@ -757,7 +771,7 @@ gtk_tool_button_set_label_widget (GtkToolButton *button, gtk_object_sink (GTK_OBJECT (label_widget)); } - button->label_widget = label_widget; + button->priv->label_widget = label_widget; gtk_tool_button_construct_contents (GTK_TOOL_ITEM (button)); @@ -770,7 +784,7 @@ gtk_tool_button_get_label_widget (GtkToolButton *button) { g_return_val_if_fail (GTK_IS_TOOL_BUTTON (button), NULL); - return button->label_widget; + return button->priv->label_widget; } GtkWidget * @@ -778,5 +792,13 @@ gtk_tool_button_get_icon_widget (GtkToolButton *button) { g_return_val_if_fail (GTK_IS_TOOL_BUTTON (button), NULL); - return button->icon_widget; + return button->priv->icon_widget; +} + +GtkWidget * +_gtk_tool_button_get_button (GtkToolButton *button) +{ + g_return_val_if_fail (GTK_IS_TOOL_BUTTON (button), NULL); + + return button->priv->button; } |