+ widget = GTK_WIDGET (check_menu_item);
+
+ if (gtk_widget_is_drawable (widget))
+ {
+ GtkAllocation allocation;
+ GtkStyleContext *context;
+ guint border_width;
+ guint offset;
+ guint toggle_size;
+ guint toggle_spacing;
+ guint horizontal_padding;
+ guint indicator_size;
+ GtkStateFlags state;
+ GtkBorder padding;
+
+ context = gtk_widget_get_style_context (widget);
+ state = gtk_widget_get_state_flags (widget);
+ gtk_style_context_get_padding (context, state, &padding);
+
+ gtk_widget_get_allocation (widget, &allocation);
+
+ gtk_widget_style_get (widget,
+ "toggle-spacing", &toggle_spacing,
+ "horizontal-padding", &horizontal_padding,
+ "indicator-size", &indicator_size,
+ NULL);
+
+ toggle_size = GTK_MENU_ITEM (check_menu_item)->priv->toggle_size;
+ border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
+ offset = border_width + padding.left + 2;
+
+ if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_LTR)
+ {
+ x = offset + horizontal_padding +
+ (toggle_size - toggle_spacing - indicator_size) / 2;
+ }
+ else
+ {
+ x = allocation.width -
+ offset - horizontal_padding - toggle_size + toggle_spacing +
+ (toggle_size - toggle_spacing - indicator_size) / 2;
+ }
+
+ y = (allocation.height - indicator_size) / 2;
+
+ if (priv->active ||
+ priv->always_show_toggle ||
+ (state & GTK_STATE_FLAG_PRELIGHT))
+ {
+ gtk_style_context_save (context);
+
+ if (priv->inconsistent)
+ state |= GTK_STATE_FLAG_INCONSISTENT;
+ else if (priv->active)
+ state |= GTK_STATE_FLAG_ACTIVE;
+
+ gtk_style_context_set_state (context, state);
+
+ if (priv->draw_as_radio)
+ {
+ gtk_style_context_add_class (context, GTK_STYLE_CLASS_RADIO);
+ gtk_render_option (context, cr, x, y,
+ indicator_size, indicator_size);
+ }
+ else
+ {
+ gtk_style_context_add_class (context, GTK_STYLE_CLASS_CHECK);
+ gtk_render_check (context, cr, x, y,
+ indicator_size, indicator_size);
+ }
+
+ gtk_style_context_restore (context);
+ }
+ }
+}
+
+
+static void
+gtk_check_menu_item_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GtkCheckMenuItem *checkitem = GTK_CHECK_MENU_ITEM (object);
+ GtkCheckMenuItemPrivate *priv = checkitem->priv;
+
+ switch (prop_id)
+ {
+ case PROP_ACTIVE:
+ g_value_set_boolean (value, priv->active);
+ break;
+ case PROP_INCONSISTENT:
+ g_value_set_boolean (value, priv->inconsistent);
+ break;
+ case PROP_DRAW_AS_RADIO:
+ g_value_set_boolean (value, priv->draw_as_radio);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+