summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorKristian Rietveld <kris@gtk.org>2003-12-18 00:44:37 +0000
committerKristian Rietveld <kristian@src.gnome.org>2003-12-18 00:44:37 +0000
commitbc6e2d55637ef2ff00727a244da3cfd241bc456c (patch)
tree4b4b6d6efa9776becb1ddaa0145c233c56ce2eaa /gtk
parent3050f437c5505f7fde4d06dcff88664de260150e (diff)
downloadgtk+-bc6e2d55637ef2ff00727a244da3cfd241bc456c.tar.gz
added language and language_set properties like GtkTextTag has. (#103800,
Thu Dec 18 01:41:50 2003 Kristian Rietveld <kris@gtk.org> * gtk/gtkcellrenderertext.c (gtk_cell_renderer_text_class_init), (gtk_cell_renderer_text_finalize), (gtk_cell_renderer_text_get_property), (gtk_cell_renderer_text_set_property), (get_layout): added language and language_set properties like GtkTextTag has. (#103800, reported by Owen Taylor).
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtkcellrenderertext.c49
1 files changed, 48 insertions, 1 deletions
diff --git a/gtk/gtkcellrenderertext.c b/gtk/gtkcellrenderertext.c
index 9451eb082f..9af6543c53 100644
--- a/gtk/gtkcellrenderertext.c
+++ b/gtk/gtkcellrenderertext.c
@@ -92,6 +92,7 @@ enum {
PROP_STRIKETHROUGH,
PROP_UNDERLINE,
PROP_RISE,
+ PROP_LANGUAGE,
/* Whether-a-style-arg-is-set args */
PROP_BACKGROUND_SET,
@@ -106,7 +107,8 @@ enum {
PROP_EDITABLE_SET,
PROP_STRIKETHROUGH_SET,
PROP_UNDERLINE_SET,
- PROP_RISE_SET
+ PROP_RISE_SET,
+ PROP_LANGUAGE_SET
};
static gpointer parent_class;
@@ -120,7 +122,10 @@ typedef struct _GtkCellRendererTextPrivate GtkCellRendererTextPrivate;
struct _GtkCellRendererTextPrivate
{
guint single_paragraph : 1;
+ guint language_set : 1;
+
gulong focus_out_id;
+ PangoLanguage *language;
};
@@ -374,6 +379,15 @@ gtk_cell_renderer_text_class_init (GtkCellRendererTextClass *class)
PANGO_UNDERLINE_NONE,
G_PARAM_READABLE | G_PARAM_WRITABLE));
+ g_object_class_install_property (object_class,
+ PROP_LANGUAGE,
+ g_param_spec_string ("language",
+ _("Language"),
+ _("The language this text is in, as an ISO code. Pango can use this as a hint when rendering the text. If you don't understand this parameter, you probably don't need it"),
+ NULL,
+ G_PARAM_READWRITE));
+
+
/* Style props are set or not */
#define ADD_SET_PROP(propname, propval, nick, blurb) g_object_class_install_property (object_class, propval, g_param_spec_boolean (propname, nick, blurb, FALSE, G_PARAM_READABLE | G_PARAM_WRITABLE))
@@ -430,6 +444,10 @@ gtk_cell_renderer_text_class_init (GtkCellRendererTextClass *class)
_("Underline set"),
_("Whether this tag affects underlining"));
+ ADD_SET_PROP ("language_set", PROP_LANGUAGE_SET,
+ _("Language set"),
+ _("Whether this tag affects the language the text is renderer as"));
+
text_cell_renderer_signals [EDITED] =
g_signal_new ("edited",
G_OBJECT_CLASS_TYPE (object_class),
@@ -448,6 +466,9 @@ static void
gtk_cell_renderer_text_finalize (GObject *object)
{
GtkCellRendererText *celltext = GTK_CELL_RENDERER_TEXT (object);
+ GtkCellRendererTextPrivate *priv;
+
+ priv = GTK_CELL_RENDERER_TEXT_GET_PRIVATE (object);
pango_font_description_free (celltext->font);
@@ -457,6 +478,9 @@ gtk_cell_renderer_text_finalize (GObject *object)
if (celltext->extra_attrs)
pango_attr_list_unref (celltext->extra_attrs);
+ if (priv->language)
+ g_object_unref (priv->language);
+
(* G_OBJECT_CLASS (parent_class)->finalize) (object);
}
@@ -594,6 +618,10 @@ gtk_cell_renderer_text_get_property (GObject *object,
g_value_set_int (value, celltext->rise);
break;
+ case PROP_LANGUAGE:
+ g_value_set_string (value, pango_language_to_string (priv->language));
+ break;
+
case PROP_BACKGROUND_SET:
g_value_set_boolean (value, celltext->background_set);
break;
@@ -634,6 +662,10 @@ gtk_cell_renderer_text_get_property (GObject *object,
case PROP_RISE_SET:
g_value_set_boolean (value, celltext->rise_set);
break;
+
+ case PROP_LANGUAGE_SET:
+ g_value_set_boolean (value, priv->language_set);
+ break;
case PROP_BACKGROUND:
case PROP_FOREGROUND:
@@ -1044,6 +1076,14 @@ gtk_cell_renderer_text_set_property (GObject *object,
celltext->calc_fixed_height = TRUE;
break;
+ case PROP_LANGUAGE:
+ priv->language_set = TRUE;
+ if (priv->language)
+ g_object_unref (priv->language);
+ priv->language = pango_language_from_string (g_value_get_string (value));
+ g_object_notify (object, "language_set");
+ break;
+
case PROP_BACKGROUND_SET:
celltext->background_set = g_value_get_boolean (value);
break;
@@ -1093,6 +1133,10 @@ gtk_cell_renderer_text_set_property (GObject *object,
celltext->rise_set = g_value_get_boolean (value);
break;
+ case PROP_LANGUAGE_SET:
+ priv->language_set = g_value_get_boolean (value);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
break;
@@ -1183,6 +1227,9 @@ get_layout (GtkCellRendererText *celltext,
uline = celltext->underline_style;
else
uline = PANGO_UNDERLINE_NONE;
+
+ if (priv->language_set)
+ add_attr (attr_list, pango_attr_language_new (priv->language));
if ((flags & GTK_CELL_RENDERER_PRELIT) == GTK_CELL_RENDERER_PRELIT)
{