1999/07/07    Gtk+ and Japanese Text Input in Gimp

tkmail が RedHat-6.0 で "rpm --rebuild" できなかったので、パッチを整理し直す。なんと、glibc-1.99 時代の mklinux パッチが必要となった。世間では glibc-1.99 と glibc-2.x が根本的に違うので、linuxppc-R4 と、linuxppc-R5 は全く共立しないと言っているが、glibc-1.99 は、ユーザーランドのアプリケーションから見る限り、いわゆる i386 系の libc5 に比べて、はるかに glibc-2.x に近い。むしろ、ppclinux での悲劇は、R4 で glibc に trampoline patch という、誤ったパッチをあてたこと。これをおおっぴらに宣伝したくない気持ちは分かるが、少し胡散臭い。

決して暇なわけではないが(むしろ現実逃避に近い?)、今のままではあまりに使いにくいのと、気持ち悪いのと、新しいバージョンが出たのとを動機にして、gtk+ のフォントセレクターのエントリーウイジェットで日本語が表示されない問題を調べた。gtk/gtkfontsel.c の著者の意図にそぐわない、全く場当たり的なダーティーパッチ(いつもか)であるが、2バイトフォントが指定された際には gdk_font_load でなく、gdk_fontset_load を呼ぶことで、gimp のテキスト入力ダイアログで、取り合えず入力した日本語が表示されない問題はなくなる。

以下に、パッチを引用する。

---<ここから>----
diff -uNr gtk+-1.2.3.orig/gtk/gtkfontsel.c gtk+-1.2.3/gtk/gtkfontsel.c
--- gtk+-1.2.3.orig/gtk/gtkfontsel.c    Tue May 11 11:31:08 1999
+++ gtk+-1.2.3/gtk/gtkfontsel.c Wed Jul  7 10:34:01 1999
@@ -1746,7 +1746,8 @@
 gtk_font_selection_load_font (GtkFontSelection *fontsel)
 {
   GdkFont *font;
-  gchar *fontname, *label_text;
+  gchar *fontname, *label_text, *tmpfontname;
+  XFontStruct *xfs;

   if (fontsel->font)
     gdk_font_unref (fontsel->font);
@@ -1763,6 +1764,13 @@
       g_message("Loading: %s\n", fontname);
 #endif
       font = gdk_font_load (fontname);
+      xfs = GDK_FONT_XFONT(font);
+      if (xfs->min_byte1 != 0 || xfs->max_byte1 != 0) {
+         tmpfontname = fontname;
+         fontname = g_strdup_printf("%s,*",tmpfontname);
+         g_free(tmpfontname);
+         font = gdk_fontset_load (fontname);
+      }
       g_free(fontname);

       if (font)
diff -uNr gtk+-1.2.3.orig/gtk/gtkstyle.c gtk+-1.2.3/gtk/gtkstyle.c
--- gtk+-1.2.3.orig/gtk/gtkstyle.c      Wed Apr 14 05:20:09 1999
+++ gtk+-1.2.3/gtk/gtkstyle.c   Wed Jul  7 09:39:41 1999
@@ -407,7 +407,7 @@
   if (!default_font)
     {
       default_font =
-       gdk_font_load ("-adobe-helvetica-medium-r-normal--*-120-*-*-*-*-*-*");
+       gdk_fontset_load ("-adobe-helvetica-medium-r-normal--*-120-*-*-*-*-*-*,*");
       if (!default_font)
        default_font = gdk_font_load ("fixed");
       if (!default_font)
---<ここまで>----

glib と gtk+ の SPEC とパッチはそれぞれ SPECSSOURCES ディレクトリーに置いた。
 


Back to Keisuke Fujii's MkLinux/LinuxPPC Life