- From: Atsuhiko Yamanaka <ymnk@jcraft.com>
- Date: Thu, 28 Nov 2002 15:48:26 +0900
- To: www-amaya-dev@w3.org
Hi,
Thank you for accepting my patches.
Today, I will report font initialization problem for Gtk widgets on I18N
platform. For example, in 'thotlib/dialogue/appdialogue.c', there are some
code to initialize fonts of GTK widgets, as follow,
w->style->font = DefaultFont;
On I18N platform, 'w->style->font' usually points to the fontset and
such a assignment will change the ideal behavior of Gtk-system and XIM.
In the attached patch, that code will be replaced with the following code,
if (w->style->font == NULL ||
w->style->font->type != GDK_FONT_FONTSET)
w->style->font = DefaultFont;
By the way, IMHO, the font setting for Gtk widgets will be done by
Gtk-Theme-Engine, so I think such explicit font initializations will not be
required at least on GTK platform.
Thanks,
--
ymnk
/************************************************************************/
diff -Naur Amaya/thotlib/dialogue/appdialogue.c Amaya-20021128/thotlib/dialogue/appdialogue.c
--- Amaya/thotlib/dialogue/appdialogue.c 2002-11-26 08:51:52.000000000 +0000
+++ Amaya-20021128/thotlib/dialogue/appdialogue.c 2002-11-28 06:01:33.000000000 +0000
@@ -2434,7 +2434,9 @@
if (label)
{
w = gtk_label_new (label);
- w->style->font = DefaultFont;
+ if (w->style->font == NULL ||
+ w->style->font->type != GDK_FONT_FONTSET)
+ w->style->font = DefaultFont;
gtk_misc_set_alignment (GTK_MISC (w), 0.5, 0.5);
gtk_box_pack_start (GTK_BOX (row), w, FALSE, TRUE, 5);
}
@@ -2504,7 +2506,9 @@
else
gtk_widget_show_all (row->parent);
}
- w->style->font = DefaultFont;
+ if (w->style->font == NULL ||
+ w->style->font->type != GDK_FONT_FONTSET)
+ w->style->font = DefaultFont;
gtk_box_pack_start (GTK_BOX (row), combo, TRUE, TRUE, 20);
FrameTable[frame].Text_Zone = w;
gtk_widget_show (w);
@@ -3087,7 +3091,9 @@
Main_Wd = gtk_window_new (GTK_WINDOW_TOPLEVEL);
/* gtk_widget_show_all (Main_Wd);*/
gtk_quit_add_destroy(1, GTK_OBJECT(Main_Wd));
- Main_Wd->style->font = DefaultFont;
+ if (Main_Wd->style->font == NULL ||
+ Main_Wd->style->font->type != GDK_FONT_FONTSET)
+ Main_Wd->style->font = DefaultFont;
gtk_window_set_title (GTK_WINDOW (Main_Wd), name);
gtk_window_set_policy (GTK_WINDOW (Main_Wd), TRUE, TRUE, FALSE);
gtk_widget_set_uposition(GTK_WIDGET(Main_Wd), X, Y);
diff -Naur Amaya/thotlib/dialogue/dialogapi.c Amaya-20021128/thotlib/dialogue/dialogapi.c
--- Amaya/thotlib/dialogue/dialogapi.c 2002-11-26 16:30:25.000000000 +0000
+++ Amaya-20021128/thotlib/dialogue/dialogapi.c 2002-11-28 06:13:40.000000000 +0000
@@ -2099,7 +2099,9 @@
/* Create the window message */
msgbox = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_widget_realize (GTK_WIDGET(msgbox));
- msgbox->style->font = DefaultFont;
+ if (msgbox->style->font == NULL ||
+ msgbox->style->font->type != GDK_FONT_FONTSET)
+ msgbox->style->font = DefaultFont;
gtk_window_set_title (GTK_WINDOW (msgbox), TtaGetMessage (LIB, TMSG_LIB_CONFIRM));
gtk_window_set_policy (GTK_WINDOW (msgbox), TRUE, TRUE, FALSE);
gtk_widget_set_uposition(GTK_WIDGET(msgbox), ShowX, ShowY);
@@ -4037,7 +4039,9 @@
w = gtk_label_new (title);
gtk_misc_set_alignment (GTK_MISC (w), 0.0, 0.5);
gtk_widget_show_all (w);
- w->style->font = DefaultFont;
+ if (w->style->font == NULL ||
+ w->style->font->type != GDK_FONT_FONTSET)
+ w->style->font = DefaultFont;
/* gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);*/
gtk_box_pack_start (GTK_BOX(menu), w, FALSE, FALSE, 0);
adbloc->E_ThotWidget[0] = w;
@@ -4270,7 +4274,9 @@
w = gtk_label_new (title);
gtk_misc_set_alignment (GTK_MISC (w), 0.0, 0.5);
gtk_widget_show_all (w);
- w->style->font = DefaultFont;
+ if (w->style->font == NULL ||
+ w->style->font->type != GDK_FONT_FONTSET)
+ w->style->font = DefaultFont;
gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
gtk_widget_set_name (w, "Dialogue");
gtk_box_pack_start (GTK_BOX(menu), w, FALSE, FALSE, 0);
@@ -4409,7 +4415,9 @@
gtk_misc_set_alignment (GTK_MISC (tmpw), 0.0, 0.5);
gtk_widget_show_all (tmpw);
current_style = gtk_style_copy(gtk_widget_get_style(tmpw));
- current_style->font = DefaultFont;
+ if (current_style->font == NULL ||
+ current_style->font->type != GDK_FONT_FONTSET)
+ current_style->font = DefaultFont;
gtk_widget_set_style(tmpw, current_style);
gtk_label_set_justify (GTK_LABEL (tmpw), GTK_JUSTIFY_LEFT);
gtk_container_add (GTK_CONTAINER(w), tmpw);
@@ -4467,7 +4475,9 @@
#ifdef _GTK
/* Cree un sous-menu d'un menu */
menu = gtk_menu_new ();
- menu->style->font=DefaultFont;
+ if (menu->style->font == NULL ||
+ menu->style->font->type != GDK_FONT_FONTSET)
+ menu->style->font=DefaultFont;
#else /* _GTK */
#ifndef _WINDOWS
n = 0;
@@ -4773,7 +4783,9 @@
w = gtk_menu_item_new_with_label (&text[index + 1]);
gtk_widget_show_all (w);
current_style = gtk_style_copy(gtk_widget_get_style(w));
- current_style->font = DefaultFont;
+ if (current_style->font == NULL ||
+ current_style->font->type != GDK_FONT_FONTSET)
+ current_style->font = DefaultFont;
gtk_widget_set_style(w, current_style);
adbloc->E_ThotWidget[ent] = w;
@@ -4793,7 +4805,9 @@
#ifdef _GTK
w = gtk_menu_item_new ();
current_style = gtk_style_copy(gtk_widget_get_style(w));
- current_style->font = DefaultFont;
+ if (current_style->font == NULL ||
+ current_style->font->type != GDK_FONT_FONTSET)
+ current_style->font = DefaultFont;
gtk_widget_set_style(w, current_style);
gtk_widget_show_all (w);
gtk_menu_append (GTK_MENU (menu),w);
@@ -5718,8 +5732,12 @@
tmpw->style->font = DefaultFont;
}
else
+ {
/* keep the default font*/
- tmpw->style->font = DefaultFont;
+ if (tmpw->style->font == NULL ||
+ tmpw->style->font->type != GDK_FONT_FONTSET)
+ tmpw->style->font = DefaultFont;
+ }
/* On interprete un changement de couleur comme un set_sensitive */
if ((int) color != -1)
gtk_widget_set_sensitive (GTK_WIDGET(w), FALSE);
@@ -7017,7 +7035,9 @@
w = gtk_label_new (title);
gtk_misc_set_alignment (GTK_MISC (w), 0.0, 0.5);
gtk_widget_show (w);
- w->style->font=DefaultFont;
+ if (w->style->font == NULL ||
+ w->style->font->type != GDK_FONT_FONTSET)
+ w->style->font=DefaultFont;
gtk_box_pack_start (GTK_BOX(row), w, FALSE, FALSE, 0);
catalogue->Cat_Title = w;
#endif /* _GTK */
@@ -7040,7 +7060,9 @@
#else /* _GTK */
w = gtk_button_new ();
gtk_widget_show (w);
- w->style->font=DefaultFont;
+ if (w->style->font == NULL ||
+ w->style->font->type != GDK_FONT_FONTSET)
+ w->style->font=DefaultFont;
tmpw = gtk_label_new (label);
gtk_misc_set_alignment (GTK_MISC (tmpw), 0.0, 0.5);
gtk_widget_show(tmpw);
@@ -7143,7 +7165,9 @@
/* Create a scrolled window to control the gtklist & gtklist contain the items */
tmpw = gtk_scrolled_window_new (NULL, NULL);
gtk_widget_show (tmpw);
- tmpw->style->font=DefaultFont;
+ if (tmpw->style->font == NULL ||
+ tmpw->style->font->type != GDK_FONT_FONTSET)
+ tmpw->style->font=DefaultFont;
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (tmpw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_box_pack_start (GTK_BOX(row), tmpw, TRUE, TRUE, 0);
gtk_widget_set_usize (tmpw, width, height*30);
@@ -7174,7 +7198,9 @@
/* A list and a text entry zone */
tmpw = gtk_scrolled_window_new (NULL, NULL);
gtk_widget_show (tmpw);
- tmpw->style->font=DefaultFont;
+ if (tmpw->style->font == NULL ||
+ tmpw->style->font->type != GDK_FONT_FONTSET)
+ tmpw->style->font=DefaultFont;
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (tmpw),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_box_pack_start (GTK_BOX(row), tmpw, TRUE, TRUE, 0);
@@ -7200,7 +7226,9 @@
GTK_SIGNAL_FUNC (CallTextEnterGTK), (gpointer)catalogue);
tmpw = gtk_entry_new ();
gtk_widget_show (tmpw);
- tmpw->style->font = DefaultFont;
+ if (tmpw->style->font == NULL ||
+ tmpw->style->font->type != GDK_FONT_FONTSET)
+ tmpw->style->font = DefaultFont;
gtk_box_pack_start (GTK_BOX(row), tmpw, FALSE, FALSE, 0);
gtk_object_set_data (GTK_OBJECT(w), "EntryZone", (gpointer)tmpw);
if (react)
@@ -7551,7 +7579,9 @@
tmpw = gtk_label_new (text);
gtk_misc_set_alignment (GTK_MISC (tmpw), 0.0, 0.5);
gtk_widget_show (GTK_WIDGET(tmpw));
- tmpw->style->font=DefaultFont;
+ if (tmpw->style->font == NULL ||
+ tmpw->style->font->type != GDK_FONT_FONTSET)
+ tmpw->style->font=DefaultFont;
gtk_label_set_justify (GTK_LABEL (tmpw), GTK_JUSTIFY_LEFT);
gtk_box_pack_start (GTK_BOX(w), GTK_WIDGET(tmpw), FALSE, FALSE, 0);
/* on fou les couleurs (A FAIRE)*/
@@ -7719,7 +7749,9 @@
/* create the vbox for all the elements */
tmpw = gtk_vbox_new (FALSE, 0);
gtk_widget_show (GTK_WIDGET(tmpw));
- tmpw->style->font = DefaultFont;
+ if (tmpw->style->font == NULL ||
+ tmpw->style->font->type != GDK_FONT_FONTSET)
+ tmpw->style->font = DefaultFont;
gtk_box_pack_start (GTK_BOX(row), GTK_WIDGET(tmpw), FALSE, FALSE, 0);
row = tmpw;
/* Create the label title */
@@ -7728,14 +7760,18 @@
w = gtk_label_new (title);
gtk_misc_set_alignment (GTK_MISC (w), 0.0, 0.5);
gtk_widget_show (GTK_WIDGET(w));
- w->style->font=DefaultFont;
+ if (w->style->font == NULL ||
+ w->style->font->type != GDK_FONT_FONTSET)
+ w->style->font=DefaultFont;
gtk_widget_set_name (w, "Dialogue");
gtk_box_pack_start (GTK_BOX(row), w, FALSE, FALSE, 2);
}
/* new text widget added into the row widget */
w = gtk_entry_new ();
gtk_widget_show (w);
- w->style->font=DefaultFont;
+ if (w->style->font == NULL ||
+ w->style->font->type != GDK_FONT_FONTSET)
+ w->style->font=DefaultFont;
gtk_box_pack_start (GTK_BOX(row), w, FALSE, FALSE, 2);
/* assigne the good size for the widget */
if (width == 0)
@@ -8053,7 +8089,9 @@
w = gtk_label_new (bounds);
gtk_misc_set_alignment (GTK_MISC (w), 0.0, 0.5);
gtk_widget_show (GTK_WIDGET(w));
- w->style->font = DefaultFont;
+ if (w->style->font == NULL ||
+ w->style->font->type != GDK_FONT_FONTSET)
+ w->style->font = DefaultFont;
gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT);
gtk_box_pack_start (GTK_BOX(row), w, FALSE, FALSE, 0);
Received on Thursday, 28 November 2002 01:46:57 UTC