diff options
| author | Ross Burton <ross@openedhand.com> | 2008-01-10 11:06:09 +0000 |
|---|---|---|
| committer | Ross Burton <ross@openedhand.com> | 2008-01-10 11:06:09 +0000 |
| commit | e84e87594633a0efd40b3a703c819d94b4b6b68c (patch) | |
| tree | 9bff8cb3eaf25e8d379e560934037d79087b08f2 /meta/packages/gtk+/gtk+-2.12.5/toggle-font.diff | |
| parent | 305ca5dc9a27f91db1be64fec070a4e4f78fba19 (diff) | |
| download | poky-e84e87594633a0efd40b3a703c819d94b4b6b68c.tar.gz | |
gtk: upgrade 2.15.3 to 2.15.5
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@3447 311d38ba-8fff-0310-9ca6-ca027cbcb966
Diffstat (limited to 'meta/packages/gtk+/gtk+-2.12.5/toggle-font.diff')
| -rw-r--r-- | meta/packages/gtk+/gtk+-2.12.5/toggle-font.diff | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/meta/packages/gtk+/gtk+-2.12.5/toggle-font.diff b/meta/packages/gtk+/gtk+-2.12.5/toggle-font.diff new file mode 100644 index 0000000000..59ad150b2f --- /dev/null +++ b/meta/packages/gtk+/gtk+-2.12.5/toggle-font.diff | |||
| @@ -0,0 +1,100 @@ | |||
| 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 | |||
