summaryrefslogtreecommitdiff
path: root/gtk/gtkcheckmenuitem.c
diff options
context:
space:
mode:
authorSoeren Sandmann <sandmann@daimi.au.dk>2003-08-29 18:28:23 +0000
committerSøren Sandmann Pedersen <ssp@src.gnome.org>2003-08-29 18:28:23 +0000
commit545b40a1b306cf2603d2a845eda320624e901683 (patch)
treeecdef4048435fcf335f5403c70f0da78bf0ee1a6 /gtk/gtkcheckmenuitem.c
parent4ec7006f282d3570b9ecff8e9e5eaef484f0723f (diff)
downloadgtk+-545b40a1b306cf2603d2a845eda320624e901683.tar.gz
Only treat buttons as homogeneous when they are narrower than 13 time the
Fri Aug 29 20:32:07 2003 Soeren Sandmann <sandmann@daimi.au.dk> * gtk/gtktoolbar.c: Only treat buttons as homogeneous when they are narrower than 13 time the estimated character width of the font. (#107781, David Bordoley) * gtk/gtktoggletoolbutton.c (gtk_toggle_tool_button_init): Check here if the GtkToggleButton is active. This may be the case if it is a radio button. * gtk/gtktoolbar.c: Clarify documentation wrt. GtkSignalFunc vs. void (*) (GtkWidget, gpointer). (#107495, Mariano Suarez-Alvarez). * gtk/gtkcheckmenuitem.[ch]: new "draw_as_radio" property. (#111207, David Bordoley). * gtk/gtktoggletoolbutton.c (gtk_toggle_tool_button_create_menu_proxy): use new "draw_as_radio" property on the menu item when the item is a radio tool button * gtk/gtktoolbutton.c (gtk_tool_button_create_menu_proxy): Fixes to only pay attention to the "use_underline" property when the button label comes from the "label" property.
Diffstat (limited to 'gtk/gtkcheckmenuitem.c')
-rw-r--r--gtk/gtkcheckmenuitem.c95
1 files changed, 71 insertions, 24 deletions
diff --git a/gtk/gtkcheckmenuitem.c b/gtk/gtkcheckmenuitem.c
index 26f1b2a46b..7902944f67 100644
--- a/gtk/gtkcheckmenuitem.c
+++ b/gtk/gtkcheckmenuitem.c
@@ -39,7 +39,8 @@ enum {
enum {
PROP_0,
PROP_ACTIVE,
- PROP_INCONSISTENT
+ PROP_INCONSISTENT,
+ PROP_DRAW_AS_RADIO
};
static void gtk_check_menu_item_class_init (GtkCheckMenuItemClass *klass);
@@ -127,6 +128,14 @@ gtk_check_menu_item_class_init (GtkCheckMenuItemClass *klass)
FALSE,
G_PARAM_READWRITE));
+ g_object_class_install_property (gobject_class,
+ PROP_INCONSISTENT,
+ g_param_spec_boolean ("draw_as_radio",
+ _("Draw as radio menu item"),
+ _("Whether the menu item looks like a radio menu item"),
+ FALSE,
+ G_PARAM_READWRITE));
+
widget_class->expose_event = gtk_check_menu_item_expose;
menu_item_class->activate = gtk_check_menu_item_activate;
@@ -306,6 +315,48 @@ gtk_check_menu_item_get_inconsistent (GtkCheckMenuItem *check_menu_item)
return check_menu_item->inconsistent;
}
+/**
+ * gtk_check_menu_item_set_draw_as_radio:
+ * @check_menu_item: a #GtkCheckMenuItem
+ * @draw_as_radio: whether @check_menu_item is drawn like a #GtkRadioMenuItem
+ *
+ * Sets whether @check_menu_item is drawn like a #GtkRadioMenuItem
+ *
+ **/
+void
+gtk_check_menu_item_set_draw_as_radio (GtkCheckMenuItem *check_menu_item,
+ gboolean draw_as_radio)
+{
+ g_return_if_fail (GTK_IS_CHECK_MENU_ITEM (check_menu_item));
+
+ draw_as_radio = draw_as_radio != FALSE;
+
+ if (draw_as_radio != check_menu_item->draw_as_radio)
+ {
+ check_menu_item->draw_as_radio = draw_as_radio;
+
+ gtk_widget_queue_draw (GTK_WIDGET (check_menu_item));
+
+ g_object_notify (G_OBJECT (check_menu_item), "draw_as_radio");
+ }
+}
+
+/**
+ * gtk_check_menu_item_get_draw_as_radio:
+ * @check_menu_item: a #GtkCheckMenuItem
+ *
+ * Returns whether @check_menu_item looks like a #GtkRadioMenuItem
+ *
+ * Return value: Whether @check_menu_item looks like a #GtkRadioMenuItem
+ **/
+gboolean
+gtk_check_menu_item_get_draw_as_radio (GtkCheckMenuItem *check_menu_item)
+{
+ g_return_val_if_fail (GTK_IS_CHECK_MENU_ITEM (check_menu_item), FALSE);
+
+ return check_menu_item->draw_as_radio;
+}
+
static void
gtk_check_menu_item_init (GtkCheckMenuItem *check_menu_item)
{
@@ -398,34 +449,30 @@ gtk_real_check_menu_item_draw_indicator (GtkCheckMenuItem *check_menu_item,
{
state_type = GTK_WIDGET_STATE (widget);
- if (check_menu_item->always_show_toggle)
+ if (check_menu_item->inconsistent)
+ shadow_type = GTK_SHADOW_ETCHED_IN;
+ else if (check_menu_item->active)
+ shadow_type = GTK_SHADOW_IN;
+ else
+ shadow_type = GTK_SHADOW_OUT;
+
+ if (!GTK_WIDGET_IS_SENSITIVE (widget))
+ state_type = GTK_STATE_INSENSITIVE;
+
+ if (check_menu_item->draw_as_radio)
{
- shadow_type = GTK_SHADOW_OUT;
- if (check_menu_item->active)
- shadow_type = GTK_SHADOW_IN;
+ gtk_paint_option (widget->style, widget->window,
+ state_type, shadow_type,
+ area, widget, "option",
+ x, y, width, height);
}
else
{
- shadow_type = GTK_SHADOW_IN;
- if (check_menu_item->active &&
- (state_type == GTK_STATE_PRELIGHT))
- shadow_type = GTK_SHADOW_OUT;
+ gtk_paint_check (widget->style, widget->window,
+ state_type, shadow_type,
+ area, widget, "check",
+ x, y, width, height);
}
-
- if (check_menu_item->inconsistent)
- {
- shadow_type = GTK_SHADOW_ETCHED_IN;
- if (state_type == GTK_STATE_ACTIVE)
- state_type = GTK_STATE_NORMAL;
- }
-
- if (!GTK_WIDGET_IS_SENSITIVE (widget))
- state_type = GTK_STATE_INSENSITIVE;
-
- gtk_paint_check (widget->style, widget->window,
- state_type, shadow_type,
- area, widget, "check",
- x, y, width, height);
}
}
}