Added gtk+ recipe for maemo-gtk changes
[oespirit1] / gtk+ / files / gtk+2.0-2.12.12 / toggle-font.diff
1 Index: gtk/gtkcellrenderertoggle.c
2 ===================================================================
3 --- gtk/gtkcellrenderertoggle.c (revision 18523)
4 +++ gtk/gtkcellrenderertoggle.c (working copy)
5 @@ -71,6 +71,8 @@
6    PROP_INDICATOR_SIZE
7  };
8  
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
12  
13  static guint toggle_cell_signals[LAST_SIGNAL] = { 0 };
14 @@ -80,8 +82,9 @@
15  typedef struct _GtkCellRendererTogglePrivate GtkCellRendererTogglePrivate;
16  struct _GtkCellRendererTogglePrivate
17  {
18 -  gint indicator_size;
19 -
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;
24  };
25  
26 @@ -104,6 +107,7 @@
27    GTK_CELL_RENDERER (celltoggle)->ypad = 2;
28  
29    priv->indicator_size = TOGGLE_WIDTH;
30 +  priv->override_size = 0;
31    priv->inconsistent = FALSE;
32  }
33  
34 @@ -210,7 +214,7 @@
35        g_value_set_boolean (value, celltoggle->radio);
36        break;
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);
40        break;
41      default:
42        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
43 @@ -245,7 +249,7 @@
44        celltoggle->radio = g_value_get_boolean (value);
45        break;
46      case PROP_INDICATOR_SIZE:
47 -      priv->indicator_size = g_value_get_int (value);
48 +      priv->override_size = g_value_get_int (value);
49        break;
50      default:
51        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
52 @@ -273,6 +277,27 @@
53  }
54  
55  static void
56 +on_widget_style_set (GtkWidget *widget, GtkStyle *previous, gpointer user_data)
57 +{
58 +  GtkCellRendererTogglePrivate *priv = user_data;
59 +  PangoContext *context;
60 +  PangoFontMetrics *metrics;
61 +  int height;
62 +  
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));
67 +
68 +  height = pango_font_metrics_get_ascent (metrics) +
69 +    pango_font_metrics_get_descent (metrics);
70 +  
71 +  pango_font_metrics_unref (metrics);
72 +  
73 +  priv->indicator_size = PANGO_PIXELS (height * 0.85);
74 +}
75 +
76 +static void
77  gtk_cell_renderer_toggle_get_size (GtkCellRenderer *cell,
78                                    GtkWidget       *widget,
79                                    GdkRectangle    *cell_area,
80 @@ -287,6 +312,20 @@
81  
82    priv = GTK_CELL_RENDERER_TOGGLE_GET_PRIVATE (cell);
83  
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);
90 +    }
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);
94 +    
95 +    on_widget_style_set (widget, NULL, priv);
96 +  }
97 +
98    calc_width = (gint) cell->xpad * 2 + priv->indicator_size;
99    calc_height = (gint) cell->ypad * 2 + priv->indicator_size;
100