1 Index: gtk/gtkcellrenderertoggle.c
2 ===================================================================
3 --- gtk/gtkcellrenderertoggle.c (revision 18523)
4 +++ gtk/gtkcellrenderertoggle.c (working copy)
9 +/* This is a hard-coded default which promptly gets overridden by a size
10 + calculated from the font size. */
11 #define TOGGLE_WIDTH 13
13 static guint toggle_cell_signals[LAST_SIGNAL] = { 0 };
15 typedef struct _GtkCellRendererTogglePrivate GtkCellRendererTogglePrivate;
16 struct _GtkCellRendererTogglePrivate
18 - gint indicator_size;
20 + gint indicator_size; /* This is the real size */
21 + gint override_size; /* This is the size set from the indicator-size property */
22 + GtkWidget *cached_widget;
23 guint inconsistent : 1;
27 GTK_CELL_RENDERER (celltoggle)->ypad = 2;
29 priv->indicator_size = TOGGLE_WIDTH;
30 + priv->override_size = 0;
31 priv->inconsistent = FALSE;
35 g_value_set_boolean (value, celltoggle->radio);
37 case PROP_INDICATOR_SIZE:
38 - g_value_set_int (value, priv->indicator_size);
39 + g_value_set_int (value, priv->override_size ? priv->override_size : priv->indicator_size);
42 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
44 celltoggle->radio = g_value_get_boolean (value);
46 case PROP_INDICATOR_SIZE:
47 - priv->indicator_size = g_value_get_int (value);
48 + priv->override_size = g_value_get_int (value);
51 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
56 +on_widget_style_set (GtkWidget *widget, GtkStyle *previous, gpointer user_data)
58 + GtkCellRendererTogglePrivate *priv = user_data;
59 + PangoContext *context;
60 + PangoFontMetrics *metrics;
63 + context = gtk_widget_get_pango_context (widget);
64 + metrics = pango_context_get_metrics (context,
65 + widget->style->font_desc,
66 + pango_context_get_language (context));
68 + height = pango_font_metrics_get_ascent (metrics) +
69 + pango_font_metrics_get_descent (metrics);
71 + pango_font_metrics_unref (metrics);
73 + priv->indicator_size = PANGO_PIXELS (height * 0.85);
77 gtk_cell_renderer_toggle_get_size (GtkCellRenderer *cell,
79 GdkRectangle *cell_area,
82 priv = GTK_CELL_RENDERER_TOGGLE_GET_PRIVATE (cell);
84 + if (priv->override_size) {
85 + priv->indicator_size = priv->override_size;
86 + } else if (priv->cached_widget != widget) {
87 + if (priv->cached_widget) {
88 + g_object_remove_weak_pointer (widget, &priv->cached_widget);
89 + g_signal_handlers_disconnect_by_func (priv->cached_widget, on_widget_style_set, priv);
91 + priv->cached_widget = widget;
92 + g_object_add_weak_pointer (widget, &priv->cached_widget);
93 + g_signal_connect (widget, "style-set", on_widget_style_set, priv);
95 + on_widget_style_set (widget, NULL, priv);
98 calc_width = (gint) cell->xpad * 2 + priv->indicator_size;
99 calc_height = (gint) cell->ypad * 2 + priv->indicator_size;