ratpoison-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[RP] i18n patch for 1.4.0


From: rubikitch
Subject: [RP] i18n patch for 1.4.0
Date: Mon, 03 Apr 2006 16:14:42 +0900 (JST)

From: Shawn Betts <address@hidden>
Subject: [RP] Ratpoison 1.4.0
Date: Sun, 02 Apr 2006 16:44:13 -0400

> I've released 1.4.0. Any patches that didn't go in and bugs that

Thank you!
I updated i18n patch.
With i18n patch, you can use fontsets to display non-ascii chars.

diff -u /tmp/ratpoison-1.4.0/src/actions.c src/actions.c
--- /tmp/ratpoison-1.4.0/src/actions.c  2006-03-16 10:27:17.000000000 +0900
+++ src/actions.c       2006-04-03 10:48:13.000000000 +0900
@@ -1664,7 +1664,7 @@
               /* Display the frame's number inside the window. */
               XDrawString (dpy, wins[i], s->normal_gc,
                            defaults.bar_x_padding,
-                           defaults.bar_y_padding + 
defaults.font->max_bounds.ascent,
+                           defaults.bar_y_padding + font_ascent,
                            num, strlen (num));
 
               free (num);
@@ -3108,7 +3108,7 @@
   for(i=0; license_text[i]; i++)
   {
     XDrawString (dpy, s->help_window, s->normal_gc,
-                 x, y + defaults.font->max_bounds.ascent,
+                 x, y + font_ascent,
                  license_text[i], strlen (license_text[i]));
 
     y += FONT_HEIGHT (defaults.font);
@@ -3153,19 +3153,19 @@
       XGrabKeyboard (dpy, s->help_window, False, GrabModeSync, GrabModeAsync, 
CurrentTime);
 
       XDrawString (dpy, s->help_window, s->normal_gc,
-                   10, y + defaults.font->max_bounds.ascent,
+                   10, y + font_ascent,
                    "ratpoison key bindings", strlen ("ratpoison key 
bindings"));
 
       y += FONT_HEIGHT (defaults.font) * 2;
 
       XDrawString (dpy, s->help_window, s->normal_gc,
-                   10, y + defaults.font->max_bounds.ascent,
+                   10, y + font_ascent,
                    "Command key: ", strlen ("Command key: "));
 
       keysym_name = keysym_to_string (prefix_key.sym, prefix_key.state);
       XDrawString (dpy, s->help_window, s->normal_gc,
                    10 + XTextWidth (defaults.font, "Command key: ", strlen 
("Command key: ")),
-                   y + defaults.font->max_bounds.ascent,
+                   y + font_ascent,
                    keysym_name, strlen (keysym_name));
       free (keysym_name);
 
@@ -3180,7 +3180,7 @@
               keysym_name = keysym_to_string (map->actions[i].key, 
map->actions[i].state);
 
               XDrawString (dpy, s->help_window, s->normal_gc,
-                           x, y + defaults.font->max_bounds.ascent,
+                           x, y + font_ascent,
                            keysym_name, strlen (keysym_name));
 
               if (XTextWidth (defaults.font, keysym_name, strlen 
(keysym_name)) > max_width)
@@ -3191,7 +3191,7 @@
           else
             {
               XDrawString (dpy, s->help_window, s->normal_gc,
-                           x, y + defaults.font->max_bounds.ascent,
+                           x, y + font_ascent,
                            map->actions[i].data, strlen 
(map->actions[i].data));
 
               if (XTextWidth (defaults.font, map->actions[i].data, strlen 
(map->actions[i].data)) > max_width)
@@ -3419,12 +3419,11 @@
   gv.function = GXcopy;
   gv.line_width = 1;
   gv.subwindow_mode = IncludeInferiors;
-  gv.font = defaults.font->fid;
   XFreeGC (dpy, s->normal_gc);
   s->normal_gc = XCreateGC(dpy, s->root,
                            GCForeground | GCBackground
                            | GCFunction | GCLineWidth
-                           | GCSubwindowMode | GCFont, &gv);
+                           | GCSubwindowMode, &gv);
 }
 
 static void
@@ -3441,7 +3440,7 @@
 static cmdret *
 set_font (struct cmdarg **args)
 {
-  XFontStruct *font;
+  XFontSet font;
 
   if (args[0] == NULL)
     return cmdret_new (RET_SUCCESS, "%s", defaults.font_string);
@@ -3450,6 +3449,7 @@
   if (font == NULL)
     return cmdret_new (RET_FAILURE, "deffont: unknown font");
 
+  set_extents_of_fontset(font);
   /* Save the font as the default. */
   XFreeFont (dpy, defaults.font);
   defaults.font = font;
diff -u /tmp/ratpoison-1.4.0/src/bar.c src/bar.c
--- /tmp/ratpoison-1.4.0/src/bar.c      2006-03-16 09:51:25.000000000 +0900
+++ src/bar.c   2006-04-03 10:37:27.000000000 +0900
@@ -308,7 +308,7 @@
         {
           XDrawString (dpy, s->bar_window, s->normal_gc,
                        defaults.bar_x_padding,
-                       defaults.bar_y_padding + 
defaults.font->max_bounds.ascent
+                       defaults.bar_y_padding + font_ascent
                        +  line_no * line_height,
                        msg + start, i - start);
           line_no++;
@@ -319,7 +319,7 @@
   /* Print the last line. */
   XDrawString (dpy, s->bar_window, s->normal_gc,
                defaults.bar_x_padding,
-               defaults.bar_y_padding + defaults.font->max_bounds.ascent
+               defaults.bar_y_padding + font_ascent
                +  line_no * line_height,
                msg + start, strlen (msg) - start);
 
diff -u /tmp/ratpoison-1.4.0/src/data.h src/data.h
--- /tmp/ratpoison-1.4.0/src/data.h     2006-03-16 09:31:06.000000000 +0900
+++ src/data.h  2006-04-03 10:37:28.000000000 +0900
@@ -220,7 +220,7 @@
   int padding_top;
   int padding_bottom;
 
-  XFontStruct *font;
+  XFontSet font;
   char *font_string;
 
   char *fgcolor_string;
diff -u /tmp/ratpoison-1.4.0/src/globals.c src/globals.c
--- /tmp/ratpoison-1.4.0/src/globals.c  2006-03-16 10:10:01.000000000 +0900
+++ src/globals.c       2006-04-03 10:37:28.000000000 +0900
@@ -32,6 +32,8 @@
 
 char *rp_exec_newwm = NULL;
 
+int font_ascent, font_descent, font_width;
+
 Atom wm_name;
 Atom wm_state;
 Atom wm_change_state;
diff -u /tmp/ratpoison-1.4.0/src/globals.h src/globals.h
--- /tmp/ratpoison-1.4.0/src/globals.h  2006-03-16 10:10:04.000000000 +0900
+++ src/globals.h       2006-04-03 10:38:11.000000000 +0900
@@ -27,8 +27,8 @@
 #define RET_SUCCESS 1
 #define RET_FAILURE 0
 
-#define FONT_HEIGHT(f) ((f)->max_bounds.ascent + (f)->max_bounds.descent)
-#define MAX_FONT_WIDTH(f) ((f)->max_bounds.width)
+#define FONT_HEIGHT(f) (font_ascent + font_descent)
+#define MAX_FONT_WIDTH(f) (font_width)
 
 #define WIN_EVENTS (StructureNotifyMask | PropertyChangeMask | 
ColormapChangeMask | FocusChangeMask)
 /* EMPTY is used when a frame doesn't contain a window, or a window
@@ -67,6 +67,8 @@
 
 extern struct rp_defaults defaults;
 
+extern int font_ascent, font_descent, font_width;
+
 /* The prefix key also known as the command character under screen. */
 extern struct rp_key prefix_key;
 
diff -u /tmp/ratpoison-1.4.0/src/input.c src/input.c
--- /tmp/ratpoison-1.4.0/src/input.c    2006-04-02 17:30:18.000000000 +0900
+++ src/input.c 2006-04-03 10:37:27.000000000 +0900
@@ -343,13 +343,13 @@
 
   XDrawString (dpy, s->input_window, s->normal_gc,
                defaults.bar_x_padding,
-               defaults.bar_y_padding + defaults.font->max_bounds.ascent,
+               defaults.bar_y_padding + font_ascent,
                line->prompt,
                strlen (line->prompt));
 
   XDrawString (dpy, s->input_window, s->normal_gc,
                defaults.bar_x_padding + prompt_width,
-               defaults.bar_y_padding + defaults.font->max_bounds.ascent,
+               defaults.bar_y_padding + font_ascent,
                line->buffer,
                line->length);
 
diff -u /tmp/ratpoison-1.4.0/src/main.c src/main.c
--- /tmp/ratpoison-1.4.0/src/main.c     2006-03-16 10:10:48.000000000 +0900
+++ src/main.c  2006-04-03 10:43:31.000000000 +0900
@@ -462,6 +462,17 @@
   free (prefix);
 }
 
+void
+set_extents_of_fontset(XFontSet font)
+{
+  XFontSetExtents *extent;
+  extent = XExtentsOfFontSet(font);
+  font_ascent = extent->max_logical_extent.height * 9 / 10;
+  font_descent = extent->max_logical_extent.height / 5;
+  font_width = extent->max_logical_extent.width;
+}
+
+
 static void
 init_defaults ()
 {
@@ -492,6 +503,7 @@
       exit (EXIT_FAILURE);
     }
   defaults.font_string = xstrdup (DEFAULT_FONT);
+  set_extents_of_fontset(defaults.font);
 
   defaults.fgcolor_string = xstrdup ("black");
   defaults.bgcolor_string = xstrdup ("white");
@@ -526,6 +538,7 @@
 
   myargv = argv;
 
+  setlocale(LC_CTYPE, "");
   /* Parse the arguments */
   while (1)
     {
@@ -759,3 +772,22 @@
   XSetInputFocus (dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
   XCloseDisplay (dpy);
 }
+ 
+XFontSet XLoadQueryFontSet(Display *disp, const char *fontset_name)
+{
+  XFontSet fontset;
+  int  missing_charset_count;
+  char **missing_charset_list;
+  char *def_string;
+
+  fontset = XCreateFontSet(disp, fontset_name,
+                           &missing_charset_list, &missing_charset_count,
+                           &def_string);
+  if (missing_charset_count) {
+#if 0
+    fprintf(stderr, "Missing charsets in FontSet(%s) creation.\n", 
fontset_name);
+#endif
+    XFreeStringList(missing_charset_list);
+  }
+  return fontset;
+}
diff -u /tmp/ratpoison-1.4.0/src/manage.c src/manage.c
--- /tmp/ratpoison-1.4.0/src/manage.c   2006-03-16 09:31:34.000000000 +0900
+++ src/manage.c        2006-04-03 10:48:14.000000000 +0900
@@ -198,33 +198,29 @@
 static char *
 get_wmname (Window w)
 {
-  Atom actual_type;
-  int actual_format;
-  int status;
-  unsigned long n;
-  unsigned long bytes_after;
   unsigned char *name = NULL;
   char *ret;
-
-  status = XGetWindowProperty (dpy, w, wm_name, 0L, 100L, False,
-                               XA_STRING, &actual_type, &actual_format,
-                               &n, &bytes_after, &name);
-
-  PRINT_DEBUG (("XGetWindowProperty: %d %ld %d %ld %ld '%s'\n", status, 
actual_type,
-                actual_format, n, bytes_after, name));
-
-  if (status != Success || name == NULL)
-    {
-      PRINT_DEBUG (("I can't get the WMName.\n"));
-      return NULL;
-    }
-
-  if (n == 0)
-    {
-      PRINT_DEBUG (("I can't get the WMName.\n"));
-      XFree (name);
-      return NULL;
-    }
+  XTextProperty text_prop;
+  int n;
+  char** cl;
+
+  if (XGetWMName(dpy, w, &text_prop) != 0) {
+    if (text_prop.encoding == XA_STRING) {
+      name = (char *)text_prop.value;
+    } else {
+      XmbTextPropertyToTextList(dpy, &text_prop, &cl, &n);
+      if (cl) {
+        name = strdup(cl[0]);
+        XFreeStringList(cl);
+      } else {
+        PRINT_DEBUG (("I can't get the WMName.\n"));
+        return NULL;
+      }
+    }
+  } else {
+    PRINT_DEBUG (("I can't get the WMName.\n"));
+    return NULL;
+  }
 
   PRINT_DEBUG (("WM_NAME: '%s'\n", name));
 
diff -u /tmp/ratpoison-1.4.0/src/ratpoison.h src/ratpoison.h
--- /tmp/ratpoison-1.4.0/src/ratpoison.h        2006-03-16 09:31:41.000000000 
+0900
+++ src/ratpoison.h     2006-04-03 10:48:13.000000000 +0900
@@ -31,6 +31,7 @@
 #include <stdarg.h>
 #include <string.h>
 #include <X11/Xlib.h>
+#include <X11/Xlocale.h>
 #include <X11/Xatom.h>
 #include <fcntl.h>
 
@@ -102,6 +103,14 @@
 char *xsprintf (char *fmt, ...);
 char *xvsprintf (char *fmt, va_list ap);
 int str_comp (char *s1, char *s2, int len);
+
+#define XLoadQueryFont XLoadQueryFontSet
+XFontSet XLoadQueryFontSet(Display *, const char *);
+#define XFreeFont XFreeFontSet
+void set_extents_of_fontset (XFontSet font);
+#define XTextWidth XmbTextEscapement
+#define XDrawString(d,w,gc,x,y,s,l)  
XmbDrawString(d,w,defaults.font,gc,x,y,s,l)
+
 /* Needed in cmd_tmpwm */
 void check_child_procs ();
 void chld_handler (int signum);
diff -u /tmp/ratpoison-1.4.0/src/screen.c src/screen.c
--- /tmp/ratpoison-1.4.0/src/screen.c   2006-03-16 10:27:29.000000000 +0900
+++ src/screen.c        2006-04-03 10:51:37.000000000 +0900
@@ -308,10 +308,9 @@
   gv.function = GXcopy;
   gv.line_width = 1;
   gv.subwindow_mode = IncludeInferiors;
-  gv.font = defaults.font->fid;
   s->normal_gc = XCreateGC(dpy, s->root,
                            GCForeground | GCBackground | GCFunction
-                           | GCLineWidth | GCSubwindowMode | GCFont,
+                           | GCLineWidth | GCSubwindowMode,
                            &gv);
 
   /* Create the program bar window. */
diff -u /tmp/ratpoison-1.4.0/src/split.c src/split.c
--- /tmp/ratpoison-1.4.0/src/split.c    2006-03-16 09:31:44.000000000 +0900
+++ src/split.c 2006-04-03 10:37:26.000000000 +0900
@@ -937,7 +937,7 @@
 
   XDrawString (dpy, s->frame_window, s->normal_gc,
                defaults.bar_x_padding,
-               defaults.bar_y_padding + defaults.font->max_bounds.ascent,
+               defaults.bar_y_padding + font_ascent,
                msg, strlen (msg));
 }
 
--
rubikitch
http://www.rubyist.net/~rubikitch/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]