diff options
author | Soeren Sandmann <sandmann@daimi.au.dk> | 2003-07-08 18:20:45 +0000 |
---|---|---|
committer | Søren Sandmann Pedersen <ssp@src.gnome.org> | 2003-07-08 18:20:45 +0000 |
commit | 7913e63f692a7f7b155fe07246d69c58f4087688 (patch) | |
tree | ba5fed8f6268c7afd187dcb6a1f34270672957f4 /gtk | |
parent | b3b16bebcf3a28475190b764091442e7be18fdb2 (diff) | |
download | gtk+-7913e63f692a7f7b155fe07246d69c58f4087688.tar.gz |
remove correction on x when detail is "menuitem". With the new menu look
Tue Jul 8 19:57:14 2003 Soeren Sandmann <sandmann@daimi.au.dk>
* gtk/gtkstyle.c (gtk_default_draw_arrow): remove correction on x
when detail is "menuitem". With the new menu look is isn't needed
anymore.
* gtk/gtktoolitem.c (gtk_tool_item_toolbar_reconfigured): queue a
resize here, so that tool items will get a chance to relayout
themselves based on the toolbar configuration.
change DEFAULT_SPACE_SIZE to 4 instead of 5
* gtk/gtktoolbar.c
Get rid of "!GTK_BIN (item)->child means separator". Separators
are widgets in their own right
change DEFAULT_SPACE_SIZE to 4 instead of 5
(get_space_size): remove this function
(toolbar_item_is_homogeneous): new function
* gtk/gtkseparatortoolitem.c
(gtk_separator_tool_item_size_request): new function.
Tue Jul 8 14:10:35 2003 Soeren Sandmann <sandmann@daimi.au.dk>
* gtk/gtktoggletoolbutton.h: use private data, add new
internal function _gtk_toggle_tool_button_get_button()
* gtk/gtktoolbutton.h: move to private data
* gtk/gtkradiotoolbutton.c, gtk/gtktoolbutton.c: updates for new
private data.
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/gtkradiotoolbutton.c | 13 | ||||
-rw-r--r-- | gtk/gtkseparatortoolitem.c | 26 | ||||
-rw-r--r-- | gtk/gtkstyle.c | 4 | ||||
-rw-r--r-- | gtk/gtktoggletoolbutton.c | 52 | ||||
-rw-r--r-- | gtk/gtktoggletoolbutton.h | 23 | ||||
-rw-r--r-- | gtk/gtktoolbar.c | 55 | ||||
-rw-r--r-- | gtk/gtktoolbutton.c | 150 | ||||
-rw-r--r-- | gtk/gtktoolbutton.h | 14 | ||||
-rw-r--r-- | gtk/gtktoolitem.c | 2 | ||||
-rw-r--r-- | gtk/gtktoolitem.h | 1 |
10 files changed, 194 insertions, 146 deletions
diff --git a/gtk/gtkradiotoolbutton.c b/gtk/gtkradiotoolbutton.c index 46cb83801c..8f7471a598 100644 --- a/gtk/gtkradiotoolbutton.c +++ b/gtk/gtkradiotoolbutton.c @@ -67,7 +67,8 @@ gtk_radio_tool_button_class_init (GtkRadioToolButtonClass *klass) static void gtk_radio_tool_button_init (GtkRadioToolButton *button) { - gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (GTK_TOOL_BUTTON (button)->button), FALSE); + GtkToolButton *tool_button = GTK_TOOL_BUTTON (button); + gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (_gtk_tool_button_get_button (tool_button)), FALSE); } GtkToolItem * @@ -128,12 +129,18 @@ gtk_radio_tool_button_new_with_stock_from_widget (GtkWidget *group) return gtk_radio_tool_button_new (list); } +static GtkRadioButton * +get_radio_button (GtkRadioToolButton *button) +{ + return GTK_RADIO_BUTTON (_gtk_tool_button_get_button (GTK_TOOL_BUTTON (button))); +} + GSList * gtk_radio_tool_button_get_group (GtkRadioToolButton *button) { g_return_val_if_fail (GTK_IS_RADIO_TOOL_BUTTON (button), NULL); - return gtk_radio_button_get_group (GTK_RADIO_BUTTON (GTK_TOOL_BUTTON (button)->button)); + return gtk_radio_button_get_group (get_radio_button (button)); } void @@ -142,6 +149,6 @@ gtk_radio_tool_button_set_group (GtkRadioToolButton *button, { g_return_if_fail (GTK_IS_RADIO_TOOL_BUTTON (button)); - gtk_radio_button_set_group (GTK_RADIO_BUTTON (GTK_TOOL_BUTTON (button)->button), group); + gtk_radio_button_set_group (get_radio_button (button), group); } diff --git a/gtk/gtkseparatortoolitem.c b/gtk/gtkseparatortoolitem.c index b7b1a60b1f..0f1e3ad9ec 100644 --- a/gtk/gtkseparatortoolitem.c +++ b/gtk/gtkseparatortoolitem.c @@ -27,7 +27,7 @@ #include "gtktoolbar.h" /* note: keep in sync with DEFAULT_SPACE_SIZE and DEFAULT_SPACE_STYLE in gtktoolbar.c */ -#define DEFAULT_SPACE_SIZE 5 +#define DEFAULT_SPACE_SIZE 4 #define DEFAULT_SPACE_STYLE GTK_TOOLBAR_SPACE_LINE #define SPACE_LINE_DIVISION 10 @@ -35,6 +35,8 @@ #define SPACE_LINE_END 7 static void gtk_separator_tool_item_class_init (GtkSeparatorToolItemClass *class); +static void gtk_separator_tool_item_size_request (GtkWidget *widget, + GtkRequisition *requisition); static gboolean gtk_separator_tool_item_expose (GtkWidget *widget, GdkEventExpose *event); static void gtk_separator_tool_item_add (GtkContainer *container, @@ -115,6 +117,7 @@ gtk_separator_tool_item_class_init (GtkSeparatorToolItemClass *class) toolitem_class = (GtkToolItemClass *)class; widget_class = (GtkWidgetClass *)class; + widget_class->size_request = gtk_separator_tool_item_size_request; widget_class->expose_event = gtk_separator_tool_item_expose; container_class->add = gtk_separator_tool_item_add; @@ -127,6 +130,25 @@ gtk_separator_tool_item_add (GtkContainer *container, g_warning("attempt to add a child to an GtkSeparatorToolItem"); } +static void +gtk_separator_tool_item_size_request (GtkWidget *widget, + GtkRequisition *requisition) +{ + GtkToolItem *item = GTK_TOOL_ITEM (widget); + GtkOrientation orientation = gtk_tool_item_get_orientation (item); + + if (orientation == GTK_ORIENTATION_HORIZONTAL) + { + requisition->width = get_space_size (item); + requisition->height = 1; + } + else + { + requisition->height = get_space_size (item); + requisition->width = 1; + } +} + static gboolean gtk_separator_tool_item_expose (GtkWidget *widget, GdkEventExpose *event) @@ -143,7 +165,7 @@ gtk_separator_tool_item_expose (GtkWidget *widget, allocation = &(widget->allocation); orientation = gtk_tool_item_get_orientation (tool_item); area = &(event->area); - + if (orientation == GTK_ORIENTATION_HORIZONTAL) { gtk_paint_vline (widget->style, widget->window, diff --git a/gtk/gtkstyle.c b/gtk/gtkstyle.c index 44596561b0..effa4f439b 100644 --- a/gtk/gtkstyle.c +++ b/gtk/gtkstyle.c @@ -3095,10 +3095,6 @@ gtk_default_draw_arrow (GtkStyle *style, calculate_arrow_geometry (arrow_type, &x, &y, &width, &height); - if (detail && strcmp (detail, "menuitem") == 0 - && gtk_widget_get_direction (widget) == GTK_TEXT_DIR_LTR) - x = original_x + original_width - width; - if (detail && strcmp (detail, "menu_scroll_arrow_up") == 0) y++; diff --git a/gtk/gtktoggletoolbutton.c b/gtk/gtktoggletoolbutton.c index 1841d9ff5e..4e0395f156 100644 --- a/gtk/gtktoggletoolbutton.c +++ b/gtk/gtktoggletoolbutton.c @@ -33,6 +33,11 @@ enum { LAST_SIGNAL }; +struct _GtkToggleToolButtonPrivate +{ + guint active : 1; +}; + static void gtk_toggle_tool_button_init (GtkToggleToolButton *button); static void gtk_toggle_tool_button_class_init (GtkToggleToolButtonClass *klass); @@ -102,8 +107,10 @@ gtk_toggle_tool_button_class_init (GtkToggleToolButtonClass *klass) static void gtk_toggle_tool_button_init (GtkToggleToolButton *button) { - g_signal_connect_object (GTK_TOOL_BUTTON (button)->button, "toggled", - G_CALLBACK (button_toggled), button, 0); + button->priv = g_new0 (GtkToggleToolButtonPrivate, 1); + + g_signal_connect_object (_gtk_tool_button_get_button (GTK_TOOL_BUTTON (button)), + "toggled", G_CALLBACK (button_toggled), button, 0); } static gboolean @@ -116,14 +123,21 @@ gtk_toggle_tool_button_create_menu_proxy (GtkToolItem *item) gboolean use_mnemonic = TRUE; const char *label = ""; - if (tool_button->label_widget && GTK_IS_LABEL (tool_button->label_widget)) - label = gtk_label_get_label (GTK_LABEL (tool_button->label_widget)); - else if (tool_button->label_text) + GtkWidget *label_widget = gtk_tool_button_get_label_widget (tool_button); + const gchar *label_text = gtk_tool_button_get_label (tool_button); + gboolean use_underline = gtk_tool_button_get_use_underline (tool_button); + const gchar *stock_id = gtk_tool_button_get_stock_id (tool_button); + + if (label_widget && GTK_IS_LABEL (label_widget)) + { + label = gtk_label_get_label (GTK_LABEL (label_widget)); + } + else if (label_text) { - label = tool_button->label_text; - use_mnemonic = tool_button->use_underline; + label = label_text; + use_mnemonic = use_underline; } - else if (tool_button->stock_id && gtk_stock_lookup (tool_button->stock_id, &stock_item)) + else if (stock_id && gtk_stock_lookup (stock_id, &stock_item)) label = stock_item.label; if (use_mnemonic) @@ -132,7 +146,7 @@ gtk_toggle_tool_button_create_menu_proxy (GtkToolItem *item) menu_item = gtk_check_menu_item_new_with_label (label); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), - toggle_tool_button->active); + toggle_tool_button->priv->active); g_signal_connect_closure_by_id (menu_item, g_signal_lookup ("activate", G_OBJECT_TYPE (menu_item)), 0, @@ -164,12 +178,12 @@ menu_item_activated (GtkWidget *menu_item, GtkToolButton *tool_button = GTK_TOOL_BUTTON (toggle_tool_button); gboolean menu_active = gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (menu_item)); - if (toggle_tool_button->active != menu_active) + if (toggle_tool_button->priv->active != menu_active) { - toggle_tool_button->active = menu_active; + toggle_tool_button->priv->active = menu_active; - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tool_button->button), - toggle_tool_button->active); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (_gtk_tool_button_get_button (tool_button)), + toggle_tool_button->priv->active); g_signal_emit (G_OBJECT (toggle_tool_button), toggle_signals[TOGGLED], 0); } @@ -181,17 +195,17 @@ button_toggled (GtkWidget *widget, { gboolean toggle_active = GTK_TOGGLE_BUTTON (widget)->active; - if (toggle_tool_button->active != toggle_active) + if (toggle_tool_button->priv->active != toggle_active) { GtkWidget *menu_item; - toggle_tool_button->active = toggle_active; + toggle_tool_button->priv->active = toggle_active; if ((menu_item = gtk_tool_item_get_proxy_menu_item (GTK_TOOL_ITEM (toggle_tool_button), MENU_ID))) { gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), - toggle_tool_button->active); + toggle_tool_button->priv->active); } g_signal_emit (G_OBJECT (toggle_tool_button), toggle_signals[TOGGLED], 0); @@ -231,8 +245,8 @@ gtk_toggle_tool_button_set_active (GtkToggleToolButton *button, is_active = is_active != FALSE; - if (button->active != is_active) - gtk_button_clicked (GTK_BUTTON (GTK_TOOL_BUTTON (button)->button)); + if (button->priv->active != is_active) + gtk_button_clicked (GTK_BUTTON (_gtk_tool_button_get_button (GTK_TOOL_BUTTON (button)))); } gboolean @@ -240,5 +254,5 @@ gtk_toggle_tool_button_get_active (GtkToggleToolButton *button) { g_return_val_if_fail (GTK_IS_TOGGLE_TOOL_BUTTON (button), FALSE); - return button->active; + return button->priv->active; } diff --git a/gtk/gtktoggletoolbutton.h b/gtk/gtktoggletoolbutton.h index 5d8e862167..fa76661953 100644 --- a/gtk/gtktoggletoolbutton.h +++ b/gtk/gtktoggletoolbutton.h @@ -27,24 +27,25 @@ G_BEGIN_DECLS -#define GTK_TYPE_TOGGLE_TOOL_BUTTON (gtk_toggle_tool_button_get_type ()) -#define GTK_TOGGLE_TOOL_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_TOGGLE_TOOL_BUTTON, GtkToggleToolButton)) -#define GTK_TOGGLE_TOOL_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_TOGGLE_TOOL_BUTTON, GtkToggleToolButtonClass)) -#define GTK_IS_TOGGLE_TOOL_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_TOGGLE_TOOL_BUTTON)) -#define GTK_IS_TOGGLE_TOOL_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), GTK_TYPE_TOGGLE_TOOL_BUTTON)) -#define GTK_TOGGLE_TOOL_BUTTON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_TOGGLE_TOOL_BUTTON, GtkToggleToolButtonClass)) +#define GTK_TYPE_TOGGLE_TOOL_BUTTON (gtk_toggle_tool_button_get_type ()) +#define GTK_TOGGLE_TOOL_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_TOGGLE_TOOL_BUTTON, GtkToggleToolButton)) +#define GTK_TOGGLE_TOOL_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_TOGGLE_TOOL_BUTTON, GtkToggleToolButtonClass)) +#define GTK_IS_TOGGLE_TOOL_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_TOGGLE_TOOL_BUTTON)) +#define GTK_IS_TOGGLE_TOOL_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), GTK_TYPE_TOGGLE_TOOL_BUTTON)) +#define GTK_TOGGLE_TOOL_BUTTON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_TOGGLE_TOOL_BUTTON, GtkToggleToolButtonClass)) +#define GTK_TOGGLE_TOOL_BUTTON_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_TOOL_BUTTON, GtkToggleToolButtonPrivate)) +#define GTK_TOGGLE_TOOL_BUTTON_GET_PRIVATE(obj) ( -typedef struct _GtkToggleToolButton GtkToggleToolButton; -typedef struct _GtkToggleToolButtonClass GtkToggleToolButtonClass; +typedef struct _GtkToggleToolButton GtkToggleToolButton; +typedef struct _GtkToggleToolButtonClass GtkToggleToolButtonClass; +typedef struct _GtkToggleToolButtonPrivate GtkToggleToolButtonPrivate; struct _GtkToggleToolButton { GtkToolButton parent; /*< private >*/ - GtkWidget *menu_item; - - guint active : 1; + GtkToggleToolButtonPrivate *priv; }; struct _GtkToggleToolButtonClass diff --git a/gtk/gtktoolbar.c b/gtk/gtktoolbar.c index be6046cb7f..e5354e5564 100644 --- a/gtk/gtktoolbar.c +++ b/gtk/gtktoolbar.c @@ -51,7 +51,7 @@ #define DEFAULT_IPADDING 0 /* note: keep in sync with DEFAULT_SPACE_SIZE and DEFAULT_SPACE_STYLE in gtkseparatortoolitem.c */ -#define DEFAULT_SPACE_SIZE 5 +#define DEFAULT_SPACE_SIZE 4 #define DEFAULT_SPACE_STYLE GTK_TOOLBAR_SPACE_LINE #define DEFAULT_ICON_SIZE GTK_ICON_SIZE_LARGE_TOOLBAR @@ -161,7 +161,6 @@ static void gtk_toolbar_arrow_button_clicked (GtkWidget *bu GtkToolbar *toolbar); static void gtk_toolbar_update_button_relief (GtkToolbar *toolbar); static GtkReliefStyle get_button_relief (GtkToolbar *toolbar); -static gint get_space_size (GtkToolbar *toolbar); static gint get_internal_padding (GtkToolbar *toolbar); static void gtk_toolbar_remove_tool_item (GtkToolbar *toolbar, GtkToolItem *item); @@ -564,6 +563,12 @@ toolbar_item_visible (GtkToolbar *toolbar, return FALSE; } +static gboolean +toolbar_item_is_homogeneous (GtkToolItem *item) +{ + return (gtk_tool_item_get_homogeneous (item) && !GTK_IS_SEPARATOR_TOOL_ITEM (item)); +} + static void toolbar_item_set_is_overflow (GtkToolItem *item, gboolean is_overflow) @@ -773,7 +778,6 @@ gtk_toolbar_size_request (GtkWidget *widget, { GtkToolbar *toolbar = GTK_TOOLBAR (widget); GtkToolbarPrivate *priv = GTK_TOOLBAR_GET_PRIVATE (toolbar); - gint space_size = get_space_size (toolbar); GList *list; gint max_child_height; gint max_child_width; @@ -803,7 +807,7 @@ gtk_toolbar_size_request (GtkWidget *widget, max_child_width = MAX (max_child_width, requisition.width); max_child_height = MAX (max_child_height, requisition.height); - if (gtk_tool_item_get_homogeneous (item) && GTK_BIN (item)->child) + if (toolbar_item_is_homogeneous (item)) { max_homogeneous_child_width = MAX (max_homogeneous_child_width, requisition.width); max_homogeneous_child_height = MAX (max_homogeneous_child_height, requisition.height); @@ -825,11 +829,7 @@ gtk_toolbar_size_request (GtkWidget *widget, if (!toolbar_item_visible (toolbar, item)) continue; - if (!GTK_BIN (item)->child) - { - size = space_size; - } - else if (gtk_tool_item_get_homogeneous (item)) + if (toolbar_item_is_homogeneous (item)) { size = homogeneous_size; } @@ -922,21 +922,18 @@ get_item_size (GtkToolbar *toolbar, GtkRequisition requisition; GtkToolItem *item = GTK_TOOL_ITEM (child); - if (!GTK_BIN (item)->child) - return get_space_size (toolbar); - gtk_widget_get_child_requisition (child, &requisition); if (toolbar->orientation == GTK_ORIENTATION_HORIZONTAL) { - if (gtk_tool_item_get_homogeneous (item)) + if (toolbar_item_is_homogeneous (item)) return toolbar->button_maxw; else return requisition.width; } else { - if (gtk_tool_item_get_homogeneous (item)) + if (toolbar_item_is_homogeneous (item)) return toolbar->button_maxh; else return requisition.height; @@ -949,7 +946,6 @@ gtk_toolbar_size_allocate (GtkWidget *widget, { GtkToolbar *toolbar = GTK_TOOLBAR (widget); GtkToolbarPrivate *priv = GTK_TOOLBAR_GET_PRIVATE (toolbar); - gint space_size; GtkAllocation *allocations; GtkAllocation arrow_allocation; gint arrow_size; @@ -967,8 +963,6 @@ gtk_toolbar_size_allocate (GtkWidget *widget, widget->allocation = *allocation; - space_size = get_space_size (toolbar); - border_width = GTK_CONTAINER (toolbar)->border_width; if (GTK_WIDGET_REALIZED (widget)) @@ -1093,7 +1087,8 @@ gtk_toolbar_size_allocate (GtkWidget *widget, if (toolbar_item_visible (toolbar, item) && gtk_tool_item_get_expand (item) && - !toolbar_item_get_is_overflow (item) && GTK_BIN (item)->child) + !toolbar_item_get_is_overflow (item) && + !GTK_IS_SEPARATOR_TOOL_ITEM (item)) { n_expand_items++; } @@ -1104,7 +1099,8 @@ gtk_toolbar_size_allocate (GtkWidget *widget, GtkToolItem *item = list->data; if (toolbar_item_visible (toolbar, item) && gtk_tool_item_get_expand (item) && - !toolbar_item_get_is_overflow (item) && GTK_BIN (item)->child) + !toolbar_item_get_is_overflow (item) && + !GTK_IS_SEPARATOR_TOOL_ITEM (item)) { gint extra = size / n_expand_items; if (size % n_expand_items != 0) @@ -2020,18 +2016,6 @@ get_button_relief (GtkToolbar *toolbar) } static gint -get_space_size (GtkToolbar *toolbar) -{ - gint space_size = DEFAULT_SPACE_SIZE; - - gtk_widget_style_get (GTK_WIDGET (toolbar), - "space_size", &space_size, - NULL); - - return space_size; -} - -static gint get_internal_padding (GtkToolbar *toolbar) { gint ipadding = 0; @@ -2515,9 +2499,10 @@ gtk_toolbar_remove_space (GtkToolbar *toolbar, return; } - if (GTK_BIN (item)->child) + if (!GTK_IS_SEPARATOR_TOOL_ITEM (item)) { g_warning ("Toolbar position %d is not a space", position); + return; } gtk_toolbar_remove_tool_item (toolbar, item); @@ -2686,19 +2671,19 @@ gtk_toolbar_internal_insert_element (GtkToolbar *toolbar, case GTK_TOOLBAR_CHILD_BUTTON: item = gtk_tool_button_new (NULL, NULL); - child->widget = GTK_TOOL_BUTTON (item)->button; + child->widget = _gtk_tool_button_get_button (GTK_TOOL_BUTTON (item)); break; case GTK_TOOLBAR_CHILD_TOGGLEBUTTON: item = gtk_toggle_tool_button_new (); - child->widget = GTK_TOOL_BUTTON (item)->button; + child->widget = _gtk_tool_button_get_button (GTK_TOOL_BUTTON (item)); break; case GTK_TOOLBAR_CHILD_RADIOBUTTON: item = gtk_radio_tool_button_new (widget ? gtk_radio_button_get_group (GTK_RADIO_BUTTON (widget)) : NULL); - child->widget = GTK_TOOL_BUTTON (item)->button; + child->widget = _gtk_tool_button_get_button (GTK_TOOL_BUTTON (item)); break; } 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; } diff --git a/gtk/gtktoolbutton.h b/gtk/gtktoolbutton.h index e2c6efbfe7..e002e14a52 100644 --- a/gtk/gtktoolbutton.h +++ b/gtk/gtktoolbutton.h @@ -33,6 +33,7 @@ G_BEGIN_DECLS #define GTK_IS_TOOL_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_TOOL_BUTTON)) #define GTK_IS_TOOL_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), GTK_TYPE_TOOL_BUTTON)) #define GTK_TOOL_BUTTON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_TOOL_BUTTON, GtkToolButtonClass)) +#define GTK_TOOL_ITEM_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_TOOL_BUTTON, GtkToolButtonPrivate)) typedef struct _GtkToolButton GtkToolButton; typedef struct _GtkToolButtonClass GtkToolButtonClass; @@ -42,14 +43,8 @@ struct _GtkToolButton { GtkToolItem parent; - GtkWidget *button; - - gchar *stock_id; - gchar *label_text; - GtkWidget *label_widget; - GtkWidget *icon_widget; - - guint use_underline : 1; + /*< private >*/ + GtkToolButtonPrivate *priv; }; struct _GtkToolButtonClass @@ -84,6 +79,9 @@ void gtk_tool_button_set_label_widget (GtkToolButton *button, GtkWidget *label_widget); GtkWidget * gtk_tool_button_get_label_widget (GtkToolButton *button); +/* internal function */ +GtkWidget *_gtk_tool_button_get_button (GtkToolButton *button); + G_END_DECLS #endif /* __GTK_TOOL_BUTTON_H__ */ diff --git a/gtk/gtktoolitem.c b/gtk/gtktoolitem.c index db1dea96e0..d2d0ff78d7 100644 --- a/gtk/gtktoolitem.c +++ b/gtk/gtktoolitem.c @@ -508,6 +508,8 @@ gtk_tool_item_toolbar_reconfigured (GtkToolItem *tool_item) g_return_if_fail (GTK_IS_TOOL_ITEM (tool_item)); g_signal_emit (tool_item, toolitem_signals[TOOLBAR_RECONFIGURED], 0); + + gtk_widget_queue_resize (GTK_WIDGET (tool_item)); } void diff --git a/gtk/gtktoolitem.h b/gtk/gtktoolitem.h index 27498bb14f..98aef840e9 100644 --- a/gtk/gtktoolitem.h +++ b/gtk/gtktoolitem.h @@ -43,6 +43,7 @@ struct _GtkToolItem { GtkBin parent; + /*< private >*/ GtkToolItemPrivate *priv; }; |