summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorHavoc Pennington <hp@redhat.com>2000-06-21 20:41:15 +0000
committerHavoc Pennington <hp@src.gnome.org>2000-06-21 20:41:15 +0000
commit443e8c395e9f45d89f669c944366055eead5d021 (patch)
treede32955aa0aae3cffd4f5ecf3d035c8309e60d28 /gtk
parentf534125777af40642d3587eb1e0cb2de6946f4f2 (diff)
downloadgtk+-443e8c395e9f45d89f669c944366055eead5d021.tar.gz
Use gtk_get_default_language
2000-06-21 Havoc Pennington <hp@redhat.com> * gtk/gtkwidget.c (gtk_widget_create_pango_context): Use gtk_get_default_language * gtk/gtkmain.h, gtk/gtkmain.c (gtk_get_default_language): new function to get the default language * gtk/gtktexttagprivate.h, gtk/gtktexttag.c, gtktextview.c: s/gtk_text_view_style_values/gtk_text_style_values/ * gtk/gtktexttag.c, gtk/gtktexttag.h, gtk/gtktexttagprivate.h: Add a "language" field to tags. (gtk_text_tag_set_arg): Fix bug in setting "bg_full_height_set" tag.
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtkmain.c17
-rw-r--r--gtk/gtkmain.h18
-rw-r--r--gtk/gtktextlayout.c30
-rw-r--r--gtk/gtktexttag.c76
-rw-r--r--gtk/gtktexttag.h2
-rw-r--r--gtk/gtktexttagprivate.h34
-rw-r--r--gtk/gtktextview.c4
-rw-r--r--gtk/gtkwidget.c11
8 files changed, 121 insertions, 71 deletions
diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c
index a30676274e..6446776888 100644
--- a/gtk/gtkmain.c
+++ b/gtk/gtkmain.c
@@ -487,6 +487,23 @@ gtk_set_locale (void)
return gdk_set_locale ();
}
+gchar*
+gtk_get_default_language (void)
+{
+ gchar *lang;
+ gchar *p;
+
+ lang = g_strdup (setlocale (LC_CTYPE, NULL));
+ p = strchr (lang, '.');
+ if (p)
+ *p = '\0';
+ p = strchr (lang, '@');
+ if (p)
+ *p = '\0';
+
+ return lang;
+}
+
void
gtk_main (void)
{
diff --git a/gtk/gtkmain.h b/gtk/gtkmain.h
index 9668fbda66..fb262c7788 100644
--- a/gtk/gtkmain.h
+++ b/gtk/gtkmain.h
@@ -78,13 +78,17 @@ gchar* gtk_check_version (guint required_major,
/* Initialization, exit, mainloop and miscellaneous routines
*/
-void gtk_init (int *argc,
- char ***argv);
-gboolean gtk_init_check (int *argc,
- char ***argv);
-void gtk_exit (gint error_code);
-gchar* gtk_set_locale (void);
-gint gtk_events_pending (void);
+
+void gtk_init (int *argc,
+ char ***argv);
+gboolean gtk_init_check (int *argc,
+ char ***argv);
+void gtk_exit (gint error_code);
+gchar* gtk_set_locale (void);
+gchar* gtk_get_default_language (void);
+gint gtk_events_pending (void);
+
+
/* The following is the event func GTK+ registers with GDK
* we expose it mainly to allow filtering of events between
diff --git a/gtk/gtktextlayout.c b/gtk/gtktextlayout.c
index 82a8e83c57..b4dd559fb1 100644
--- a/gtk/gtktextlayout.c
+++ b/gtk/gtktextlayout.c
@@ -189,7 +189,7 @@ free_style_cache (GtkTextLayout *text_layout)
{
if (text_layout->one_style_cache)
{
- gtk_text_view_style_values_unref (text_layout->one_style_cache);
+ gtk_text_style_values_unref (text_layout->one_style_cache);
text_layout->one_style_cache = NULL;
}
}
@@ -204,7 +204,7 @@ gtk_text_layout_destroy (GtkObject *object)
gtk_text_layout_set_buffer (layout, NULL);
if (layout->default_style)
- gtk_text_view_style_values_unref (layout->default_style);
+ gtk_text_style_values_unref (layout->default_style);
layout->default_style = NULL;
if (layout->ltr_context)
@@ -280,10 +280,10 @@ gtk_text_layout_set_default_style (GtkTextLayout *layout,
if (values == layout->default_style)
return;
- gtk_text_view_style_values_ref (values);
+ gtk_text_style_values_ref (values);
if (layout->default_style)
- gtk_text_view_style_values_unref (layout->default_style);
+ gtk_text_style_values_unref (layout->default_style);
layout->default_style = values;
@@ -784,7 +784,7 @@ get_style (GtkTextLayout *layout,
*/
if (layout->one_style_cache != NULL)
{
- gtk_text_view_style_values_ref (layout->one_style_cache);
+ gtk_text_style_values_ref (layout->one_style_cache);
return layout->one_style_cache;
}
@@ -798,8 +798,8 @@ get_style (GtkTextLayout *layout,
{
/* One ref for the return value, one ref for the
layout->one_style_cache reference */
- gtk_text_view_style_values_ref (layout->default_style);
- gtk_text_view_style_values_ref (layout->default_style);
+ gtk_text_style_values_ref (layout->default_style);
+ gtk_text_style_values_ref (layout->default_style);
layout->one_style_cache = layout->default_style;
if (tags)
@@ -811,14 +811,14 @@ get_style (GtkTextLayout *layout,
/* Sort tags in ascending order of priority */
gtk_text_tag_array_sort (tags, tag_count);
- style = gtk_text_view_style_values_new ();
+ style = gtk_text_style_values_new ();
- gtk_text_view_style_values_copy (layout->default_style,
- style);
+ gtk_text_style_values_copy (layout->default_style,
+ style);
- gtk_text_view_style_values_fill_from_tags (style,
- tags,
- tag_count);
+ gtk_text_style_values_fill_from_tags (style,
+ tags,
+ tag_count);
g_free (tags);
@@ -826,7 +826,7 @@ get_style (GtkTextLayout *layout,
/* Leave this style as the last one seen */
g_assert (layout->one_style_cache == NULL);
- gtk_text_view_style_values_ref (style); /* ref held by layout->one_style_cache */
+ gtk_text_style_values_ref (style); /* ref held by layout->one_style_cache */
layout->one_style_cache = style;
/* Returning yet another refcount */
@@ -840,7 +840,7 @@ release_style (GtkTextLayout *layout,
g_return_if_fail (style != NULL);
g_return_if_fail (style->refcount > 0);
- gtk_text_view_style_values_unref (style);
+ gtk_text_style_values_unref (style);
}
/*
diff --git a/gtk/gtktexttag.c b/gtk/gtktexttag.c
index e7f89a35fb..225cd4ef52 100644
--- a/gtk/gtktexttag.c
+++ b/gtk/gtktexttag.c
@@ -87,6 +87,7 @@ enum {
ARG_UNDERLINE,
ARG_OFFSET,
ARG_BG_FULL_HEIGHT,
+ ARG_LANGUAGE,
/* Whether-a-style-arg-is-set args */
ARG_BACKGROUND_SET,
@@ -109,6 +110,7 @@ enum {
ARG_UNDERLINE_SET,
ARG_OFFSET_SET,
ARG_BG_FULL_HEIGHT_SET,
+ ARG_LANGUAGE_SET,
LAST_ARG
};
@@ -220,7 +222,9 @@ gtk_text_tag_class_init (GtkTextTagClass *klass)
GTK_ARG_READWRITE, ARG_OFFSET);
gtk_object_add_arg_type ("GtkTextTag::background_full_height", GTK_TYPE_BOOL,
GTK_ARG_READWRITE, ARG_BG_FULL_HEIGHT);
-
+ gtk_object_add_arg_type ("GtkTextTag::language", GTK_TYPE_STRING,
+ GTK_ARG_READWRITE, ARG_LANGUAGE);
+
/* Style args are set or not */
gtk_object_add_arg_type ("GtkTextTag::background_set", GTK_TYPE_BOOL,
GTK_ARG_READWRITE, ARG_BACKGROUND_SET);
@@ -270,6 +274,8 @@ gtk_text_tag_class_init (GtkTextTagClass *klass)
GTK_ARG_READWRITE, ARG_OFFSET_SET);
gtk_object_add_arg_type ("GtkTextTag::background_full_height_set", GTK_TYPE_BOOL,
GTK_ARG_READWRITE, ARG_BG_FULL_HEIGHT_SET);
+ gtk_object_add_arg_type ("GtkTextTag::language_set", GTK_TYPE_BOOL,
+ GTK_ARG_READWRITE, ARG_LANGUAGE_SET);
signals[EVENT] =
gtk_signal_new ("event",
@@ -309,7 +315,7 @@ gtk_text_tag_new (const gchar *name)
tag->name = g_strdup(name);
- tag->values = gtk_text_view_style_values_new();
+ tag->values = gtk_text_style_values_new();
return tag;
}
@@ -328,9 +334,9 @@ gtk_text_tag_destroy (GtkObject *object)
g_assert(tkxt_tag->table == NULL);
- gtk_text_view_style_values_unref(tkxt_tag->values);
+ gtk_text_style_values_unref(tkxt_tag->values);
tkxt_tag->values = NULL;
-
+
(* GTK_OBJECT_CLASS(parent_class)->destroy) (object);
}
@@ -584,6 +590,10 @@ gtk_text_tag_set_arg (GtkObject *object, GtkArg *arg, guint arg_id)
tkxt_tag->values->bg_full_height = GTK_VALUE_BOOL(*arg);
break;
+ case ARG_LANGUAGE:
+ tkxt_tag->language_set = TRUE;
+ tkxt_tag->values->language = g_strdup (GTK_VALUE_STRING(*arg));
+ break;
/* Whether the value should be used... */
@@ -668,8 +678,12 @@ gtk_text_tag_set_arg (GtkObject *object, GtkArg *arg, guint arg_id)
break;
case ARG_BG_FULL_HEIGHT_SET:
- tkxt_tag->bg_full_height_set = TRUE;
- tkxt_tag->values->bg_full_height = GTK_VALUE_BOOL(*arg);
+ tkxt_tag->bg_full_height_set = GTK_VALUE_BOOL(*arg);
+ break;
+
+ case ARG_LANGUAGE_SET:
+ tkxt_tag->language_set = GTK_VALUE_BOOL(*arg);
+ size_changed = TRUE;
break;
default:
@@ -796,6 +810,10 @@ gtk_text_tag_get_arg (GtkObject *object, GtkArg *arg, guint arg_id)
case ARG_BG_FULL_HEIGHT:
GTK_VALUE_BOOL(*arg) = tag->values->bg_full_height;
break;
+
+ case ARG_LANGUAGE:
+ GTK_VALUE_STRING(*arg) = g_strdup (tag->values->language);
+ break;
case ARG_BACKGROUND_SET:
case ARG_BACKGROUND_GDK_SET:
@@ -870,6 +888,10 @@ gtk_text_tag_get_arg (GtkObject *object, GtkArg *arg, guint arg_id)
case ARG_BG_FULL_HEIGHT_SET:
GTK_VALUE_BOOL(*arg) = tag->bg_full_height_set;
break;
+
+ case ARG_LANGUAGE_SET:
+ GTK_VALUE_BOOL(*arg) = tag->language_set;
+ break;
case ARG_BACKGROUND:
case ARG_FOREGROUND:
@@ -1020,7 +1042,7 @@ gtk_text_tag_array_sort(GtkTextTag** tag_array_p,
*/
GtkTextStyleValues*
-gtk_text_view_style_values_new(void)
+gtk_text_style_values_new(void)
{
GtkTextStyleValues *values;
@@ -1029,13 +1051,15 @@ gtk_text_view_style_values_new(void)
/* 0 is a valid value for most of the struct */
values->refcount = 1;
+
+ values->language = gtk_get_default_language ();
return values;
}
void
-gtk_text_view_style_values_copy(GtkTextStyleValues *src,
- GtkTextStyleValues *dest)
+gtk_text_style_values_copy(GtkTextStyleValues *src,
+ GtkTextStyleValues *dest)
{
guint orig_refcount;
@@ -1072,13 +1096,14 @@ gtk_text_view_style_values_copy(GtkTextStyleValues *src,
*dest = *src;
dest->font_desc = pango_font_description_copy (src->font_desc);
-
+ dest->language = g_strdup (src->language);
+
dest->refcount = orig_refcount;
dest->realized = FALSE;
}
void
-gtk_text_view_style_values_ref(GtkTextStyleValues *values)
+gtk_text_style_values_ref(GtkTextStyleValues *values)
{
g_return_if_fail(values != NULL);
@@ -1086,7 +1111,7 @@ gtk_text_view_style_values_ref(GtkTextStyleValues *values)
}
void
-gtk_text_view_style_values_unref(GtkTextStyleValues *values)
+gtk_text_style_values_unref(GtkTextStyleValues *values)
{
g_return_if_fail(values != NULL);
g_return_if_fail(values->refcount > 0);
@@ -1108,15 +1133,18 @@ gtk_text_view_style_values_unref(GtkTextStyleValues *values)
if (values->tab_array)
gtk_text_view_tab_array_unref(values->tab_array);
+
+ if (values->language)
+ g_free (values->language);
g_free(values);
}
}
void
-gtk_text_view_style_values_realize(GtkTextStyleValues *values,
- GdkColormap *cmap,
- GdkVisual *visual)
+gtk_text_style_values_realize(GtkTextStyleValues *values,
+ GdkColormap *cmap,
+ GdkVisual *visual)
{
g_return_if_fail(values != NULL);
g_return_if_fail(values->refcount > 0);
@@ -1135,9 +1163,9 @@ gtk_text_view_style_values_realize(GtkTextStyleValues *values,
}
void
-gtk_text_view_style_values_unrealize(GtkTextStyleValues *values,
- GdkColormap *cmap,
- GdkVisual *visual)
+gtk_text_style_values_unrealize(GtkTextStyleValues *values,
+ GdkColormap *cmap,
+ GdkVisual *visual)
{
g_return_if_fail(values != NULL);
g_return_if_fail(values->refcount > 0);
@@ -1157,9 +1185,9 @@ gtk_text_view_style_values_unrealize(GtkTextStyleValues *values,
}
void
-gtk_text_view_style_values_fill_from_tags(GtkTextStyleValues *dest,
- GtkTextTag** tags,
- guint n_tags)
+gtk_text_style_values_fill_from_tags(GtkTextStyleValues *dest,
+ GtkTextTag** tags,
+ guint n_tags)
{
guint n = 0;
@@ -1266,6 +1294,12 @@ gtk_text_view_style_values_fill_from_tags(GtkTextStyleValues *dest,
if (tag->bg_full_height_set)
dest->bg_full_height = vals->bg_full_height;
+
+ if (tag->language_set)
+ {
+ g_free (dest->language);
+ dest->language = g_strdup (vals->language);
+ }
++n;
}
diff --git a/gtk/gtktexttag.h b/gtk/gtktexttag.h
index a21d42bcc1..6fed3c7d71 100644
--- a/gtk/gtktexttag.h
+++ b/gtk/gtktexttag.h
@@ -79,10 +79,10 @@ struct _GtkTextTag {
guint bg_full_height_set : 1;
guint elide_set : 1;
guint editable_set : 1;
+ guint language_set : 1;
guint pad1 : 1;
guint pad2 : 1;
guint pad3 : 1;
- guint pad4 : 1;
};
struct _GtkTextTagClass {
diff --git a/gtk/gtktexttagprivate.h b/gtk/gtktexttagprivate.h
index 022299e984..c19ddf2754 100644
--- a/gtk/gtktexttagprivate.h
+++ b/gtk/gtktexttagprivate.h
@@ -7,11 +7,11 @@
* the defaults with settings in the given tags, which should be sorted in
* ascending order of priority
*/
-void gtk_text_view_style_values_fill_from_tags (GtkTextStyleValues *values,
- GtkTextTag **tags,
- guint n_tags);
-void gtk_text_tag_array_sort (GtkTextTag **tag_array_p,
- guint len);
+void gtk_text_style_values_fill_from_tags (GtkTextStyleValues *values,
+ GtkTextTag **tags,
+ guint n_tags);
+void gtk_text_tag_array_sort (GtkTextTag **tag_array_p,
+ guint len);
/*
* Style object created by folding a set of tags together
@@ -79,6 +79,8 @@ struct _GtkTextStyleValues
* GTK_WRAPMODE_NONE, GTK_WRAPMODE_WORD
*/
+ gchar *language;
+
/* hide the text */
guint elide : 1;
@@ -98,20 +100,20 @@ struct _GtkTextStyleValues
guint pad4 : 1;
};
-GtkTextStyleValues *gtk_text_view_style_values_new (void);
-void gtk_text_view_style_values_copy (GtkTextStyleValues *src,
- GtkTextStyleValues *dest);
-void gtk_text_view_style_values_unref (GtkTextStyleValues *values);
-void gtk_text_view_style_values_ref (GtkTextStyleValues *values);
+GtkTextStyleValues *gtk_text_style_values_new (void);
+void gtk_text_style_values_copy (GtkTextStyleValues *src,
+ GtkTextStyleValues *dest);
+void gtk_text_style_values_unref (GtkTextStyleValues *values);
+void gtk_text_style_values_ref (GtkTextStyleValues *values);
/* ensure colors are allocated, etc. for drawing */
-void gtk_text_view_style_values_realize (GtkTextStyleValues *values,
- GdkColormap *cmap,
- GdkVisual *visual);
+void gtk_text_style_values_realize (GtkTextStyleValues *values,
+ GdkColormap *cmap,
+ GdkVisual *visual);
/* free the stuff again */
-void gtk_text_view_style_values_unrealize (GtkTextStyleValues *values,
- GdkColormap *cmap,
- GdkVisual *visual);
+void gtk_text_style_values_unrealize (GtkTextStyleValues *values,
+ GdkColormap *cmap,
+ GdkVisual *visual);
#endif
diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c
index 124f16dbfb..27b71014f0 100644
--- a/gtk/gtktextview.c
+++ b/gtk/gtktextview.c
@@ -2406,7 +2406,7 @@ gtk_text_view_ensure_layout (GtkTextView *text_view)
g_object_unref (G_OBJECT (ltr_context));
g_object_unref (G_OBJECT (rtl_context));
- style = gtk_text_view_style_values_new ();
+ style = gtk_text_style_values_new ();
gtk_widget_ensure_style (widget);
gtk_text_view_set_values_from_style (text_view, style, widget->style);
@@ -2421,7 +2421,7 @@ gtk_text_view_ensure_layout (GtkTextView *text_view)
gtk_text_layout_set_default_style (text_view->layout, style);
- gtk_text_view_style_values_unref (style);
+ gtk_text_style_values_unref (style);
}
}
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 1e15a26a8c..e67d3297c5 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -3204,7 +3204,7 @@ PangoContext *
gtk_widget_create_pango_context (GtkWidget *widget)
{
PangoContext *context;
- char *lang, *p;
+ char *lang;
g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
@@ -3216,14 +3216,7 @@ gtk_widget_create_pango_context (GtkWidget *widget)
PANGO_DIRECTION_LTR : PANGO_DIRECTION_RTL);
pango_context_set_font_description (context, widget->style->font_desc);
- lang = g_strdup (setlocale (LC_CTYPE, NULL));
- p = strchr (lang, '.');
- if (p)
- *p = '\0';
- p = strchr (lang, '@');
- if (p)
- *p = '\0';
-
+ lang = gtk_get_default_language ();
pango_context_set_lang (context, lang);
g_free (lang);