diff -urN AfterStep-1.0/afterstep/add_window.c AfterStep-1.0-I18N/afterstep/add_window.c
--- AfterStep-1.0/afterstep/add_window.c Wed Mar 19 10:26:41 1997
+++ AfterStep-1.0-I18N/afterstep/add_window.c Fri Feb 27 15:23:29 1998
@@ -107,6 +107,10 @@
XrmValue rm_value;
unsigned long buttons;
XTextProperty text_prop;
+#ifdef I18N
+ char **list;
+ int num;
+#endif
NeedToResizeToo = False;
/* allocate space for the afterstep window */
@@ -127,9 +131,27 @@
return(NULL);
}
if ( XGetWMName(dpy, tmp_win->w, &text_prop) != 0 )
+#ifdef I18N
+ {
+ if (text_prop.value) {
+ text_prop.nitems = strlen(text_prop.value);
+ if (text_prop.encoding == XA_STRING)
+ tmp_win->name = (char *)text_prop.value;
+ else {
+ if (XmbTextPropertyToTextList(dpy,&text_prop,&list,&num) >= Success
+ && num > 0 && *list)
+ tmp_win->name = *list;
+ else
+ tmp_win->name = (char *)text_prop.value;
+ }
+ } else
+ tmp_win->name = NoName;
+ }
+#else
tmp_win->name = (char *)text_prop.value ;
- else
- tmp_win->name = NoName;
+#endif
+ else
+ tmp_win->name = NoName;
tmp_win->focus_sequence = 1;
SetCirculateSequence(tmp_win, -1);
@@ -268,9 +290,35 @@
return(NULL);
}
XSetWindowBorderWidth (dpy, tmp_win->w,0);
+#ifdef I18N
+ if (XGetWindowProperty(dpy, tmp_win->w, XA_WM_ICON_NAME, 0L, 200L, False,
+ AnyPropertyType, &actual_type, &actual_format, &nitems,
+ &bytesafter,(unsigned char **)&tmp_win->icon_name)
+ == Success && actual_type != None) {
+ text_prop.value = tmp_win->icon_name;
+ text_prop.encoding = actual_type;
+ text_prop.format = actual_format;
+ text_prop.nitems = nitems;
+ if (text_prop.value) {
+ text_prop.nitems = strlen(text_prop.value);
+ if (text_prop.encoding == XA_STRING)
+ tmp_win->icon_name = (char *)text_prop.value;
+ else {
+ if (XmbTextPropertyToTextList(dpy,&text_prop,&list,&num) >= Success
+ && num > 0 && *list)
+ tmp_win->icon_name = *list;
+ else
+ tmp_win->icon_name = (char *)text_prop.value;
+ }
+ } else
+ tmp_win->icon_name = NULL;
+ } else
+ tmp_win->icon_name = NULL;
+#else
XGetWindowProperty (dpy, tmp_win->w, XA_WM_ICON_NAME, 0L, 200L, False,
- XA_STRING, &actual_type, &actual_format, &nitems,
- &bytesafter,(unsigned char **)&tmp_win->icon_name);
+ XA_STRING, &actual_type, &actual_format, &nitems,
+ &bytesafter,(unsigned char **)&tmp_win->icon_name);
+#endif
if(tmp_win->icon_name==(char *)NULL)
tmp_win->icon_name = tmp_win->name;
@@ -487,7 +535,25 @@
}
XChangeWindowAttributes (dpy, tmp_win->w, valuemask, &attributes);
if ( XGetWMName(dpy, tmp_win->w, &text_prop) != 0 )
- tmp_win->name = (char *)text_prop.value ;
+#ifdef I18N
+ {
+ if (text_prop.value) {
+ text_prop.nitems = strlen(text_prop.value);
+ if (text_prop.encoding == XA_STRING)
+ tmp_win->name = (char *)text_prop.value;
+ else {
+ if (XmbTextPropertyToTextList(dpy,&text_prop,&list,&num) >= Success
+ && num > 0 && *list)
+ tmp_win->name = *list;
+ else
+ tmp_win->name = (char *)text_prop.value;
+ }
+ } else
+ tmp_win->name = NoName;
+ }
+#else
+ tmp_win->name = (char *)text_prop.value ;
+#endif
else
tmp_win->name = NoName;
diff -urN AfterStep-1.0/afterstep/afterstep.c AfterStep-1.0-I18N/afterstep/afterstep.c
--- AfterStep-1.0/afterstep/afterstep.c Mon May 5 00:19:57 1997
+++ AfterStep-1.0-I18N/afterstep/afterstep.c Fri Feb 27 15:21:52 1998
@@ -66,6 +66,10 @@
#include <X11/extensions/shape.h>
#endif /* SHAPE */
+#ifdef I18N
+#include <X11/Xlocale.h>
+#endif
+
#if defined (sparc) && defined (SVR4)
/* Solaris has sysinfo instead of gethostname. */
#include <sys/systeminfo.h>
@@ -163,6 +167,11 @@
Bool single = False;
Bool option_error = FALSE;
+
+#ifdef I18N
+ if (setlocale(LC_CTYPE, "") == NULL)
+ afterstep_err("can't set locale", NULL, NULL, NULL);
+#endif
#ifdef M4
/* Set the defaults for m4 processing */
diff -urN AfterStep-1.0/afterstep/afterstep.h AfterStep-1.0-I18N/afterstep/afterstep.h
--- AfterStep-1.0/afterstep/afterstep.h Tue Mar 11 09:49:26 1997
+++ AfterStep-1.0-I18N/afterstep/afterstep.h Fri Feb 27 15:21:53 1998
@@ -119,6 +119,9 @@
{
char *name; /* name of the font */
XFontStruct *font; /* font structure */
+#ifdef I18N
+ XFontSet fontset; /* font set */
+#endif
int height; /* height of the font */
int y; /* Y coordinate to draw characters */
} MyFont;
diff -urN AfterStep-1.0/afterstep/borders.c AfterStep-1.0-I18N/afterstep/borders.c
--- AfterStep-1.0/afterstep/borders.c Fri Mar 21 09:09:21 1997
+++ AfterStep-1.0-I18N/afterstep/borders.c Fri Feb 27 15:21:53 1998
@@ -295,6 +295,8 @@
if((t->icon_name != NULL)&&(Scr.PagerFont.height > 0))
{
NewFontAndColor(Scr.PagerFont.font->fid,TextColor,BackColor);
+#undef FONTSET
+#define FONTSET Scr.PagerFont.fontset
XDrawImageString(dpy, t->pager_view, Scr.FontGC, 2,Scr.PagerFont.y+2,
t->icon_name, strlen(t->icon_name));
}
@@ -589,8 +591,10 @@
}
NewFontAndColor(Scr.WindowFont.font->fid,Forecolor, BackColor);
+
-
+#undef FONTSET
+#define FONTSET Scr.WindowFont.fontset
if(NewTitle)
XClearWindow(dpy,t->title_w);
@@ -630,8 +634,13 @@
if(t->name != (char *)NULL) {
if (onoroff && (Textures.flags & GradientText)) {
- DrawTexturedText(dpy,t->title_w,Scr.WindowFont.font,hor_off,
+#ifdef I18N
+ DrawTexturedText(dpy,t->title_w,Scr.WindowFont.font,Scr.WindowFont.fontset,hor_off,
4,Scr.TitleGradient, t->name, strlen(t->name));
+#else
+ DrawTexturedText(dpy,t->title_w,Scr.WindowFont.font,hor_off,
+ 4,Scr.TitleGradient, t->name, strlen(t->name));
+#endif
} else {
XDrawString (dpy, t->title_w,Scr.FontGC,hor_off,
Scr.WindowFont.y+ 4,
diff -urN AfterStep-1.0/afterstep/configure.c AfterStep-1.0-I18N/afterstep/configure.c
--- AfterStep-1.0/afterstep/configure.c Sun Mar 9 09:43:54 1997
+++ AfterStep-1.0-I18N/afterstep/configure.c Fri Feb 27 15:21:53 1998
@@ -27,7 +27,9 @@
#include <fcntl.h>
#include <unistd.h>
#include <pwd.h>
-
+#ifdef I18N
+#include <X11/Xlocale.h>
+#endif
#include <X11/Xproto.h>
#include <X11/Xatom.h>
#ifdef M4
@@ -412,6 +414,11 @@
char line[256],*tline;
char *Home; /* the HOME environment variable */
int HomeLen; /* length of Home */
+
+#ifdef I18N
+ char *Lang;
+#endif
+
#ifdef ENABLE_TEXTURE
int icol, mcol, ucol, tcol, scol; /* texture colors */
int defcol;
@@ -463,10 +470,37 @@
}
else
{
- home_file = safemalloc(HomeLen+strlen(config_file)+3);
- strcpy(home_file,Home);
- strcat(home_file,"/");
- strcat(home_file,config_file);
+#ifdef I18N
+ if ((Lang = setlocale(LC_CTYPE, NULL)) != NULL) {
+ home_file = safemalloc(HomeLen+strlen(Lang)+strlen(config_file)+4);
+ strcpy(home_file,Home);
+ strcat(home_file,"/");
+ strcat(home_file,Lang);
+ strcat(home_file,"/");
+ strcat(home_file,config_file);
+ config_fd = fopen(home_file,"r");
+ if (config_fd == (FILE *)NULL) {
+ free(home_file);
+ home_file = safemalloc(HomeLen+strlen(config_file)+3);
+ strcpy(home_file,Home);
+ strcat(home_file,"/");
+ strcat(home_file,config_file);
+ }
+ else
+ fclose(config_fd);
+ }
+ else {
+ home_file = safemalloc(HomeLen+strlen(config_file)+3);
+ strcpy(home_file,Home);
+ strcat(home_file,"/");
+ strcat(home_file,config_file);
+ }
+#else
+ home_file = safemalloc(HomeLen+strlen(config_file)+3);
+ strcpy(home_file,Home);
+ strcat(home_file,"/");
+ strcat(home_file,config_file);
+#endif
}
afterstep_file = home_file;
config_fd = fopen(home_file,"r");
@@ -508,7 +542,7 @@
orig_tline = tline;
while(tline != (char *)0)
{
- while(isspace(*tline))tline++;
+ while(isspace((unsigned char)*tline))tline++;
if((strlen(&tline[0])>1)&&(tline[0]!='#')&&(tline[0]!='*'))
match_string(main_config,tline,"error in config:",config_fd);
tline = fgets(line,(sizeof line)-1,config_fd);
@@ -1286,6 +1320,15 @@
#endif
void GetColors(void)
{
+#ifdef I18N
+ XFontSetExtents *fset_extents;
+ XFontStruct **fs_list;
+ char **ml;
+ int mc;
+ char *ds;
+ char *fn_tmp;
+ int fn_tmp_length;
+#endif
extern MyFont *IconFont;
if(have_the_colors) return;
@@ -1353,6 +1396,33 @@
}
/* load the font */
+#ifdef I18N
+ if ((Scr.StdFont.fontset = XCreateFontSet(dpy, Scr.StdFont.name, &ml,
+ &mc, &ds)) == NULL) {
+ nofont(Scr.StdFont.name);
+ fn_tmp_length = strlen(Scr.StdFont.name) + strlen(",-*--14-*");
+ fn_tmp = malloc(fn_tmp_length + 1);
+ strcpy(fn_tmp,Scr.StdFont.name);
+ strcat(fn_tmp,",-*--14-*");
+ fprintf(stderr,"Trying... %s\n",fn_tmp);
+ if ((Scr.StdFont.fontset = XCreateFontSet(dpy, fn_tmp,
+ &ml, &mc, &ds)) == NULL) {
+ nofont(fn_tmp);
+ fprintf(stderr,"Trying... fixed,-*--14-*\n");
+ if ((Scr.StdFont.fontset = XCreateFontSet(dpy, "fixed,-*--14-*",
+ &ml, &mc, &ds)) == NULL) {
+ fprintf(stderr,"ERROR: no fontset available\n");
+ exit(1);
+ }
+ }
+ }
+ XFontsOfFontSet(Scr.StdFont.fontset, &fs_list, &ml);
+ Scr.StdFont.font = fs_list[0];
+ fset_extents = XExtentsOfFontSet(Scr.StdFont.fontset);
+ Scr.StdFont.height = fset_extents->max_logical_extent.height;
+ Scr.StdFont.y = Scr.StdFont.font->ascent;
+ Scr.EntryHeight = Scr.StdFont.height + HEIGHT_EXTRA +2;
+#else
if ((Scr.StdFont.font = XLoadQueryFont(dpy, Scr.StdFont.name)) == NULL)
{
nofont(Scr.StdFont.name);
@@ -1362,7 +1432,35 @@
Scr.StdFont.height = Scr.StdFont.font->ascent + Scr.StdFont.font->descent;
Scr.StdFont.y = Scr.StdFont.font->ascent;
Scr.EntryHeight = Scr.StdFont.height + HEIGHT_EXTRA +2;
+#endif
/* load the window-title font */
+#ifdef I18N
+ if ((Scr.WindowFont.fontset = XCreateFontSet(dpy, Scr.WindowFont.name, &ml,
+ &mc, &ds)) == NULL) {
+ nofont(Scr.WindowFont.name);
+
+ fn_tmp_length = strlen(Scr.WindowFont.name) + strlen(",-*--14-*");
+ fn_tmp = malloc(fn_tmp_length + 1);
+ strcpy(fn_tmp,Scr.WindowFont.name);
+ strcat(fn_tmp,",-*--14-*");
+ fprintf(stderr,"Trying... %s\n",fn_tmp);
+ if ((Scr.WindowFont.fontset = XCreateFontSet(dpy, fn_tmp,
+ &ml, &mc, &ds)) == NULL) {
+ nofont(fn_tmp);
+ fprintf(stderr,"Trying... fixed,-*--14-*\n");
+ if ((Scr.WindowFont.fontset = XCreateFontSet(dpy, "fixed,-*--14-*",
+ &ml, &mc, &ds)) == NULL) {
+ fprintf(stderr,"ERROR: no fontset available\n");
+ exit(1);
+ }
+ }
+ }
+ XFontsOfFontSet(Scr.WindowFont.fontset, &fs_list, &ml);
+ Scr.WindowFont.font = fs_list[0];
+ fset_extents = XExtentsOfFontSet(Scr.WindowFont.fontset);
+ Scr.WindowFont.height = fset_extents->max_logical_extent.height;
+ Scr.WindowFont.y = Scr.WindowFont.font->ascent;
+#else
if ((Scr.WindowFont.font = XLoadQueryFont(dpy, Scr.WindowFont.name)) == NULL)
{
nofont(Scr.WindowFont.name);
@@ -1373,17 +1471,30 @@
Scr.WindowFont.height=
Scr.WindowFont.font->ascent+Scr.WindowFont.font->descent;
Scr.WindowFont.y = Scr.WindowFont.font->ascent;
+#endif
+
/* load the pager-label font */
#ifndef NO_PAGER
if(Scr.PagerFont.name != NULL)
{
+#ifdef I18N
+ if ((Scr.PagerFont.fontset = XCreateFontSet(dpy, Scr.PagerFont.name, &ml,
+ &mc, &ds)) != NULL) {
+ XFontsOfFontSet(Scr.PagerFont.fontset, &fs_list, &ml);
+ Scr.PagerFont.font = fs_list[0];
+ fset_extents = XExtentsOfFontSet(Scr.PagerFont.fontset);
+ Scr.PagerFont.height = fset_extents->max_logical_extent.height;
+ Scr.PagerFont.y = Scr.PagerFont.font->ascent;
+ }
+#else
if ((Scr.PagerFont.font = XLoadQueryFont(dpy, Scr.PagerFont.name))!=NULL)
{
Scr.PagerFont.height=
Scr.PagerFont.font->ascent+Scr.PagerFont.font->descent;
Scr.PagerFont.y = Scr.PagerFont.font->ascent;
}
+#endif
else
nofont(Scr.PagerFont.name);
}
@@ -1391,13 +1502,42 @@
IconFont = &Scr.StdFont;
if(Scr.IconFont.name != NULL) {
- if ((Scr.IconFont.font = XLoadQueryFont(dpy, Scr.IconFont.name))!=NULL) {
- Scr.IconFont.height=
- Scr.IconFont.font->ascent+Scr.IconFont.font->descent;
- Scr.IconFont.y = Scr.IconFont.font->ascent;
- IconFont = &Scr.IconFont;
- } else
- nofont(Scr.IconFont.name);
+#ifdef I18N
+ if ((Scr.IconFont.fontset = XCreateFontSet(dpy, Scr.IconFont.name, &ml,
+ &mc, &ds)) == NULL) {
+ nofont(Scr.IconFont.name);
+ fn_tmp_length = strlen(Scr.IconFont.name) + strlen(",-*--14-*");
+ fn_tmp = malloc(fn_tmp_length + 1);
+ strcpy(fn_tmp,Scr.IconFont.name);
+ strcat(fn_tmp,",-*--14-*");
+ fprintf(stderr,"Trying... %s\n",fn_tmp);
+ if ((Scr.IconFont.fontset = XCreateFontSet(dpy, fn_tmp,
+ &ml, &mc, &ds)) == NULL) {
+ nofont(fn_tmp);
+ fprintf(stderr,"Trying... fixed,-*--14-*\n");
+ if ((Scr.IconFont.fontset = XCreateFontSet(dpy, "fixed,-*--14-*",
+ &ml, &mc, &ds)) == NULL) {
+ fprintf(stderr,"ERROR: no fontset available\n");
+ exit(1);
+ }
+ }
+ }
+
+ XFontsOfFontSet(Scr.IconFont.fontset, &fs_list, &ml);
+ Scr.IconFont.font = fs_list[0];
+ fset_extents = XExtentsOfFontSet(Scr.IconFont.fontset);
+ Scr.IconFont.height = fset_extents->max_logical_extent.height;
+ Scr.IconFont.y = Scr.IconFont.font->ascent;
+ IconFont = &Scr.IconFont;
+#else
+ if ((Scr.IconFont.font = XLoadQueryFont(dpy, Scr.IconFont.name))!=NULL) {
+ Scr.IconFont.height=
+ Scr.IconFont.font->ascent+Scr.IconFont.font->descent;
+ Scr.IconFont.y = Scr.IconFont.font->ascent;
+ IconFont = &Scr.IconFont;
+ } else
+ nofont(Scr.IconFont.name);
+#endif
} else {
if ((Scr.IconFont.font = XLoadQueryFont(dpy, "fixed"))!=NULL) {
Scr.IconFont.height=
@@ -1448,7 +1588,7 @@
mr = NewMenuRoot(name);
GetColors();
- while(isspace(*pline))pline++;
+ while(isspace((unsigned char)*pline))pline++;
while((pline != (char *)0)
&&(mystrncasecmp("End",pline,3)!=0))
{
@@ -1482,7 +1622,7 @@
orig_tline = pline;
- while(isspace(*pline))pline++;
+ while(isspace((unsigned char)*pline))pline++;
}
MakeMenu(mr);
@@ -1834,7 +1974,7 @@
cur->x = 5;
if(cur->func==F_TITLE)
/* Title */
- cur->y_height = NS_TITLE_HEIGHT+1;
+ cur->y_height = Scr.EntryHeight;
else if(cur->func==F_NOP && *cur->item==0)
/* Separator */
cur->y_height = HEIGHT_SEPARATOR;
@@ -2156,7 +2296,7 @@
char *tmp,*ptr;
int len;
- while(isspace(*source))
+ while(isspace((unsigned char)*source))
source++;
len = strlen(source);
tmp = source + len -1;
@@ -2681,6 +2821,9 @@
#endif
#ifdef NO_SAVEUNDERS
strcat(options, "NO_SAVEUNDERS ");
+#endif
+#ifdef I18N
+ strcat(options, "I18N ");
#endif
#ifdef NO_WINDOWLIST
strcat(options, "NO_WINDOWLIST ");
diff -urN AfterStep-1.0/afterstep/events.c AfterStep-1.0-I18N/afterstep/events.c
--- AfterStep-1.0/afterstep/events.c Sat Apr 26 21:21:36 1997
+++ AfterStep-1.0-I18N/afterstep/events.c Fri Feb 27 15:24:30 1998
@@ -363,7 +363,12 @@
Atom actual = None;
int actual_format;
unsigned long nitems, bytesafter;
-
+#ifdef I18N
+ XTextProperty text_prop;
+ char **list;
+ int num;
+#endif
+
if ((!Tmp_win)||(XGetGeometry(dpy, Tmp_win->w, &JunkRoot, &JunkX, &JunkY,
&JunkWidth, &JunkHeight, &JunkBW, &JunkDepth) == 0))
return;
@@ -371,6 +376,31 @@
switch (Event.xproperty.atom)
{
case XA_WM_NAME:
+#ifdef I18N
+ if (XGetWindowProperty (dpy, Tmp_win->w, Event.xproperty.atom, 0L,
+ MAX_NAME_LEN, False, AnyPropertyType, &actual,
+ &actual_format, &nitems, &bytesafter,
+ (unsigned char **) &prop) != Success ||
+ actual == None)
+ return;
+ text_prop.value = prop;
+ text_prop.encoding = actual;
+ text_prop.format = actual_format;
+ text_prop.nitems = nitems;
+ if (text_prop.value) {
+ text_prop.nitems = strlen(text_prop.value);
+ if (text_prop.encoding == XA_STRING)
+ prop = (char *)text_prop.value;
+ else {
+ if (XmbTextPropertyToTextList(dpy,&text_prop,&list,&num) >= Success
+ && num > 0 && *list)
+ prop = *list;
+ else
+ prop = (char *)text_prop.value;
+ }
+ } else
+ prop = NoName;
+#else
if (XGetWindowProperty (dpy, Tmp_win->w, Event.xproperty.atom, 0L,
MAX_NAME_LEN, False, XA_STRING, &actual,
&actual_format, &nitems, &bytesafter,
@@ -378,6 +408,7 @@
actual == None)
return;
if (!prop) prop = NoName;
+#endif
free_window_names (Tmp_win, True, False);
Tmp_win->name = prop;
@@ -403,6 +434,31 @@
break;
case XA_WM_ICON_NAME:
+#ifdef I18N
+ if (XGetWindowProperty (dpy, Tmp_win->w, Event.xproperty.atom, 0L,
+ MAX_NAME_LEN, False, AnyPropertyType, &actual,
+ &actual_format, &nitems, &bytesafter,
+ (unsigned char **) &prop) != Success ||
+ actual == None)
+ return;
+ text_prop.value = prop;
+ text_prop.encoding = actual;
+ text_prop.format = actual_format;
+ text_prop.nitems = nitems;
+ if (text_prop.value) {
+ text_prop.nitems = strlen(text_prop.value);
+ if (text_prop.encoding == XA_STRING)
+ prop = (char *)text_prop.value;
+ else {
+ if (XmbTextPropertyToTextList(dpy,&text_prop,&list,&num) >= Success
+ && num > 0 && *list)
+ prop = *list;
+ else
+ prop = (char *)text_prop.value;
+ }
+ } else
+ prop = NoName;
+#else
if (XGetWindowProperty (dpy, Tmp_win->w, Event.xproperty.atom, 0,
MAX_ICON_NAME_LEN, False, XA_STRING, &actual,
&actual_format, &nitems, &bytesafter,
@@ -410,6 +466,7 @@
actual == None)
return;
if (!prop) prop = NoName;
+#endif
free_window_names (Tmp_win, False, True);
Tmp_win->icon_name = prop;
BroadcastName(M_ICON_NAME,Tmp_win->w,Tmp_win->frame,
diff -urN AfterStep-1.0/afterstep/functions.c AfterStep-1.0-I18N/afterstep/functions.c
--- AfterStep-1.0/afterstep/functions.c Sat Apr 26 21:50:08 1997
+++ AfterStep-1.0-I18N/afterstep/functions.c Fri Feb 27 15:21:54 1998
@@ -483,6 +483,8 @@
if((tmp_win->icon_name != NULL)&&(Scr.PagerFont.height > 0))
{
NewFontAndColor(Scr.PagerFont.font->fid,TextColor,BackColor);
+#undef FONTSET
+#define FONTSET Scr.PagerFont.fontset
XDrawString (dpy, tmp_win->pager_view,Scr.FontGC,2,Scr.PagerFont.y+2,
tmp_win->icon_name, strlen(tmp_win->icon_name));
}
diff -urN AfterStep-1.0/afterstep/icons.c AfterStep-1.0-I18N/afterstep/icons.c
--- AfterStep-1.0/afterstep/icons.c Fri Mar 21 09:09:21 1997
+++ AfterStep-1.0-I18N/afterstep/icons.c Fri Feb 27 15:21:54 1998
@@ -225,40 +225,30 @@
Tmp_win->icon_p_width-2,titleH+6);
XSetForeground(dpy, Scr.IconGC, Scr.HiColors.fore);
if (Tmp_win->icon_name==NULL) {
- if (Tmp_win->name!=NULL) {
- cnt = strlen(Tmp_win->name);
- textX = XTextWidth(Scr.IconFont.font,Tmp_win->name, cnt);
- if (textX < Tmp_win->icon_p_width) {
- textX = (Tmp_win->icon_p_width-textX)/2;
- text = Tmp_win->name;
- } else {
- int i;
- /* try to find approx. characters that fit here */
- i=(Tmp_win->icon_p_width*cnt)/textX;
- textX = 1;
- text = &(Tmp_win->name[cnt-i]);
- cnt = i;
- }
- }
+ if (Tmp_win->name!=NULL) {
+ cnt = strlen(Tmp_win->name);
+ textX = XTextWidth(Scr.IconFont.font,Tmp_win->name, cnt);
+ if (textX > Tmp_win->icon_p_width - 4)
+ textX = Tmp_win->icon_p_width - 4 - textX;
+ else
+ textX = (Tmp_win->icon_p_width - textX)/2;
+ text = Tmp_win->name;
+ }
} else {
- cnt = strlen(Tmp_win->icon_name);
- textX = XTextWidth(Scr.IconFont.font,Tmp_win->icon_name, cnt);
- if (textX < Tmp_win->icon_p_width) {
- textX = (Tmp_win->icon_p_width-textX)/2;
- text = Tmp_win->icon_name;
- } else {
- int i;
- /* try to find approx. characters that fit here */
- i=(Tmp_win->icon_p_width*cnt)/textX;
- textX = 1;
- text = &(Tmp_win->icon_name[cnt-i]);
- cnt = i;
- }
+ cnt = strlen(Tmp_win->icon_name);
+ textX = XTextWidth(Scr.IconFont.font,Tmp_win->icon_name, cnt);
+ if (textX > Tmp_win->icon_p_width - 4)
+ textX = Tmp_win->icon_p_width - 4 - textX;
+ else
+ textX = (Tmp_win->icon_p_width - textX)/2;
+ text = Tmp_win->icon_name;
}
+#undef FONTSET
+#define FONTSET Scr.IconFont.fontset
XDrawString(dpy, Tmp_win->icon_pixmap_w, Scr.IconGC, textX,
- Scr.IconFont.font->ascent+1, text, cnt);
+ Scr.IconFont.font->ascent+1, text, cnt);
+ }
}
- }
}
diff -urN AfterStep-1.0/afterstep/menus.c AfterStep-1.0-I18N/afterstep/menus.c
--- AfterStep-1.0/afterstep/menus.c Sun Apr 20 05:26:01 1997
+++ AfterStep-1.0-I18N/afterstep/menus.c Fri Feb 27 15:21:54 1998
@@ -126,7 +126,7 @@
}
if(ActiveItem) {
if (!(Scr.flags & MenusHigh))
- y = MenuY - 10 + ((ActiveItem->item_num)*(ActiveItem->y_height));
+ y = MenuY + ((ActiveItem->item_num)*(ActiveItem->y_height))-(Scr.EntryHeight & 1) - (Scr.EntryHeight >>1);
else
y = MenuY + (Scr.EntryHeight >>1);
@@ -395,17 +395,37 @@
XChangeGC(dpy,Scr.ScratchGC1,Globalgcm,&Globalgcv);
currentGC = Scr.ScratchGC1;
}
- if(*mi->item)
- XDrawString(dpy, mr->w, currentGC,mi->x,text_y, mi->item, mi->strlen);
- if(mi->strlen2>0)
- XDrawString(dpy, mr->w, currentGC,mi->x2,text_y, mi->item2,mi->strlen2);
-
- d=(Scr.EntryHeight-7)/2;
- if(mi->func != F_POPUP && mi->hotkey != 0) {
- hk[0]= mi->hotkey;
- XDrawString(dpy, mr->w, currentGC,
- mr->width-d-4- XTextWidth(Scr.StdFont.font, hk, 1)/2,
- text_y, hk, 1);
+ if (mi->item_num == 0) { /* when paintig first entry(menu title) */
+ text_y = Scr.WindowFont.y + 4;
+#undef FONTSET
+#define FONTSET Scr.WindowFont.fontset
+ if(*mi->item)
+ XDrawString(dpy, mr->w, currentGC,mi->x,text_y, mi->item, mi->strlen);
+ if(mi->strlen2>0)
+ XDrawString(dpy, mr->w, currentGC,mi->x2,text_y, mi->item2,mi->strlen2);
+
+ d=(Scr.EntryHeight-7)/2;
+ if(mi->func != F_POPUP && mi->hotkey != 0) {
+ hk[0]= mi->hotkey;
+ XDrawString(dpy, mr->w, currentGC,
+ mr->width-d-4- XTextWidth(Scr.StdFont.font, hk, 1)/2,
+ text_y, hk, 1);
+ }
+ } else {
+#undef FONTSET
+#define FONTSET Scr.StdFont.fontset
+ if(*mi->item)
+ XDrawString(dpy, mr->w, currentGC,mi->x,text_y, mi->item, mi->strlen);
+ if(mi->strlen2>0)
+ XDrawString(dpy, mr->w, currentGC,mi->x2,text_y, mi->item2,mi->strlen2);
+
+ d=(Scr.EntryHeight-7)/2;
+ if(mi->func != F_POPUP && mi->hotkey != 0) {
+ hk[0]= mi->hotkey;
+ XDrawString(dpy, mr->w, currentGC,
+ mr->width-d-4- XTextWidth(Scr.StdFont.font, hk, 1)/2,
+ text_y, hk, 1);
+ }
}
d=(Scr.EntryHeight-7)/2;
if(mi->func == F_POPUP)
diff -urN AfterStep-1.0/afterstep/misc.h AfterStep-1.0-I18N/afterstep/misc.h
--- AfterStep-1.0/afterstep/misc.h Wed Mar 19 10:37:12 1997
+++ AfterStep-1.0-I18N/afterstep/misc.h Fri Feb 27 15:21:54 1998
@@ -107,6 +107,17 @@
XChangeGC(dpy,Scr.FontGC,Globalgcm,&Globalgcv); \
}
+#ifdef I18N
+#ifdef __STDC__
+#define XTextWidth(x,y,z) XmbTextEscapement(x ## set,y,z)
+#else
+#define XTextWidth(x,y,z) XmbTextEscapement(x/**/set,y,z)
+#endif
+#define XDrawString(t,u,v,w,x,y,z) XmbDrawString(t,u,FONTSET,v,w,x,y,z)
+#define XDrawImageString(t,u,v,w,x,y,z) XmbDrawImageString(t,u,FONTSET,v,w,x,y,z)
+#endif
+
+
#ifdef NO_ICONS
#define ICON_HEIGHT 1
#else
diff -urN AfterStep-1.0/afterstep/module.c AfterStep-1.0-I18N/afterstep/module.c
--- AfterStep-1.0/afterstep/module.c Sun Mar 9 09:45:29 1997
+++ AfterStep-1.0-I18N/afterstep/module.c Fri Feb 27 15:21:54 1998
@@ -107,11 +107,11 @@
strcpy(command,action);
cptr = command;
- while((isspace(*cptr))&&(*cptr != '\n')&&(*cptr != 0))
+ while((isspace((unsigned char)*cptr))&&(*cptr != '\n')&&(*cptr != 0))
cptr++;
end = cptr;
- while((!(isspace(*end))&&(*end != '\n'))&&(*end != 0)&&(end <(command+256)))
+ while((!(isspace((unsigned char)*end))&&(*end != '\n'))&&(*end != 0)&&(end <(command+256)))
end++;
if((*end == 0)||(end >= command+256))
@@ -122,7 +122,7 @@
if(aptr)
{
- while((isspace(*aptr)||(*aptr=='\n'))&&(*aptr!=0)&&(aptr<(command+256)))
+ while((isspace((unsigned char)*aptr)||(*aptr=='\n'))&&(*aptr!=0)&&(aptr<(command+256)))
aptr++;
if((*aptr == 0)||(*aptr == '\n'))
aptr = NULL;
diff -urN AfterStep-1.0/afterstep/move.c AfterStep-1.0-I18N/afterstep/move.c
--- AfterStep-1.0/afterstep/move.c Sat Mar 1 13:26:44 1997
+++ AfterStep-1.0-I18N/afterstep/move.c Fri Feb 27 15:21:54 1998
@@ -317,6 +317,8 @@
offset = (Scr.SizeStringWidth + SIZE_HINDENT*2
- XTextWidth(Scr.StdFont.font,str,strlen(str)))/2;
+#undef FONTSET
+#define FONTSET Scr.StdFont.fontset
XDrawString (dpy, Scr.SizeWindow, Scr.NormalGC,
offset,
Scr.StdFont.font->ascent + SIZE_VINDENT,
diff -urN AfterStep-1.0/afterstep/pager.c AfterStep-1.0-I18N/afterstep/pager.c
--- AfterStep-1.0/afterstep/pager.c Sat Mar 1 13:26:44 1997
+++ AfterStep-1.0-I18N/afterstep/pager.c Fri Feb 27 15:21:54 1998
@@ -70,6 +70,8 @@
TextColor = Scr.HiColors.fore;
BackColor = Scr.HiColors.back;
NewFontAndColor(Scr.PagerFont.font->fid,TextColor,BackColor);
+#undef FONTSET
+#define FONTSET Scr.PagerFont.fontset
flush_expose(Scr.Hilite->pager_view);
XDrawImageString (dpy, Scr.Hilite->pager_view, Scr.FontGC,
2,Scr.PagerFont.y+2,
diff -urN AfterStep-1.0/afterstep/resize.c AfterStep-1.0-I18N/afterstep/resize.c
--- AfterStep-1.0/afterstep/resize.c Sat Mar 1 13:26:45 1997
+++ AfterStep-1.0-I18N/afterstep/resize.c Fri Feb 27 15:21:55 1998
@@ -444,6 +444,8 @@
Scr.StdFont.height,False);
}
+#undef FONTSET
+#define FONTSET Scr.StdFont.fontset
XDrawString (dpy, Scr.SizeWindow, Scr.NormalGC,
offset, Scr.StdFont.font->ascent + SIZE_VINDENT, str, 13);
diff -urN AfterStep-1.0/afterstep/stepgfx.c AfterStep-1.0-I18N/afterstep/stepgfx.c
--- AfterStep-1.0/afterstep/stepgfx.c Sat Mar 1 10:18:57 1997
+++ AfterStep-1.0-I18N/afterstep/stepgfx.c Fri Feb 27 15:21:55 1998
@@ -597,9 +597,13 @@
* text - text to draw
* chars - chars in text
************************************************************************/
+#ifdef I18N
+void DrawTexturedText(Display *dpy, Drawable d, XFontStruct *font, XFontSet fontset,
+ int x, int y, Pixmap gradient, char *text, int chars)
+#else
void DrawTexturedText(Display *dpy, Drawable d, XFontStruct *font,
int x, int y, Pixmap gradient, char *text, int chars)
-
+#endif
{
Pixmap mask;
int w,h;
@@ -607,7 +611,11 @@
XGCValues gcv;
/* make the mask pixmap */
+#ifdef I18N
+ w = XmbTextEscapement(fontset,text,chars);
+#else
w = XTextWidth(font,text,chars);
+#endif
h = font->ascent+font->descent;
mask=XCreatePixmap(dpy,DefaultRootWindow(dpy),w+1,h+1,1);
gcv.foreground = 0;
@@ -616,7 +624,12 @@
gc = XCreateGC(dpy,mask,GCFunction|GCForeground|GCFont,&gcv);
XFillRectangle(dpy,mask,gc,0,0,w,h);
XSetForeground(dpy,gc,1);
+#ifdef I18N
+/* ref: misc.h */
+ XmbDrawString(dpy,mask,fontset,gc,0,font->ascent,text,chars);
+#else
XDrawString(dpy,mask,gc,0,font->ascent,text,chars);
+#endif
XFreeGC(dpy,gc);
/* draw the texture */
gcv.function=GXcopy;
diff -urN AfterStep-1.0/afterstep/stepgfx.h AfterStep-1.0-I18N/afterstep/stepgfx.h
--- AfterStep-1.0/afterstep/stepgfx.h Thu Oct 17 07:31:59 1996
+++ AfterStep-1.0-I18N/afterstep/stepgfx.h Fri Feb 27 15:21:55 1998
@@ -24,9 +24,13 @@
extern int DrawDegradeRelief(Display *dpy, Drawable d, int x, int y, int w,
int h, int from[3], int to[3], int relief,
int maxcols);
+#ifdef I18N
+extern void DrawTexturedText(Display *dpy, Drawable d, XFontStruct *font, XFontSet fontset,
+ int x, int y, Pixmap gradient, char *text, int chars);
+#else
extern void DrawTexturedText(Display *dpy, Drawable d, XFontStruct *font,
int x, int y, Pixmap gradient, char *text, int chars);
-
+#endif
extern int MakeShadowColors(Display *dpy, int from[3], int to[3],
unsigned long *dark, unsigned long *light);
diff -urN AfterStep-1.0/afterstep/style.c AfterStep-1.0-I18N/afterstep/style.c
--- AfterStep-1.0/afterstep/style.c Wed Mar 19 10:26:42 1997
+++ AfterStep-1.0-I18N/afterstep/style.c Fri Feb 27 15:21:55 1998
@@ -56,11 +56,11 @@
if(restofline == NULL)return;
while((*restofline != 0)&&(*restofline != '\n'))
{
- while(isspace(*restofline))restofline++;
+ while(isspace((unsigned char)*restofline))restofline++;
if(mystrncasecmp(restofline,"ICON",4)==0)
{
restofline +=4;
- while(isspace(*restofline))restofline++;
+ while(isspace((unsigned char)*restofline))restofline++;
tmp = restofline;
len = 0;
while((tmp != NULL)&&(*tmp != 0)&&(*tmp != ',')&&(*tmp != '\n'))
@@ -83,11 +83,11 @@
if(mystrncasecmp(restofline,"COLOR",5)==0)
{
restofline +=5;
- while(isspace(*restofline))restofline++;
+ while(isspace((unsigned char)*restofline))restofline++;
tmp = restofline;
len = 0;
while((tmp != NULL)&&(*tmp != 0)&&(*tmp != ',')&&
- (*tmp != '\n')&&(*tmp != '/')&&(!isspace(*tmp)))
+ (*tmp != '\n')&&(*tmp != '/')&&(!isspace((unsigned char)*tmp)))
{
tmp++;
len++;
@@ -100,15 +100,15 @@
off_flags |= FORE_COLOR_FLAG;
}
- while(isspace(*tmp))tmp++;
+ while(isspace((unsigned char)*tmp))tmp++;
if(*tmp == '/')
{
tmp++;
- while(isspace(*tmp))tmp++;
+ while(isspace((unsigned char)*tmp))tmp++;
restofline = tmp;
len = 0;
while((tmp != NULL)&&(*tmp != 0)&&(*tmp != ',')&&
- (*tmp != '\n')&&(*tmp != '/')&&(!isspace(*tmp)))
+ (*tmp != '\n')&&(*tmp != '/')&&(!isspace((unsigned char)*tmp)))
{
tmp++;
len++;
@@ -126,11 +126,11 @@
if(mystrncasecmp(restofline,"FORECOLOR",9)==0)
{
restofline +=9;
- while(isspace(*restofline))restofline++;
+ while(isspace((unsigned char)*restofline))restofline++;
tmp = restofline;
len = 0;
while((tmp != NULL)&&(*tmp != 0)&&(*tmp != ',')&&
- (*tmp != '\n')&&(*tmp != '/')&&(!isspace(*tmp)))
+ (*tmp != '\n')&&(*tmp != '/')&&(!isspace((unsigned char)*tmp)))
{
tmp++;
len++;
@@ -148,11 +148,11 @@
if(mystrncasecmp(restofline,"BACKCOLOR",9)==0)
{
restofline +=9;
- while(isspace(*restofline))restofline++;
+ while(isspace((unsigned char)*restofline))restofline++;
tmp = restofline;
len = 0;
while((tmp != NULL)&&(*tmp != 0)&&(*tmp != ',')&&
- (*tmp != '\n')&&(*tmp != '/')&&(!isspace(*tmp)))
+ (*tmp != '\n')&&(*tmp != '/')&&(!isspace((unsigned char)*tmp)))
{
tmp++;
len++;
@@ -201,11 +201,11 @@
restofline +=8;
sscanf(restofline,"%d",&butt);
- while(isspace(*restofline))restofline++;
- while((!isspace(*restofline))&&(*restofline!= 0)&&
+ while(isspace((unsigned char)*restofline))restofline++;
+ while((!isspace((unsigned char)*restofline))&&(*restofline!= 0)&&
(*restofline != ',')&&(*restofline != '\n'))
restofline++;
- while(isspace(*restofline))restofline++;
+ while(isspace((unsigned char)*restofline))restofline++;
off_buttons |= (1<<(butt-1));
}
@@ -214,11 +214,11 @@
restofline +=6;
sscanf(restofline,"%d",&butt);
- while(isspace(*restofline))restofline++;
- while((!isspace(*restofline))&&(*restofline!= 0)&&
+ while(isspace((unsigned char)*restofline))restofline++;
+ while((!isspace((unsigned char)*restofline))&&(*restofline!= 0)&&
(*restofline != ',')&&(*restofline != '\n'))
restofline++;
- while(isspace(*restofline))restofline++;
+ while(isspace((unsigned char)*restofline))restofline++;
on_buttons |= (1<<(butt-1));
}
@@ -277,40 +277,40 @@
restofline +=11;
off_flags |= BW_FLAG;
sscanf(restofline,"%d",&bw);
- while(isspace(*restofline))restofline++;
- while((!isspace(*restofline))&&(*restofline!= 0)&&
+ while(isspace((unsigned char)*restofline))restofline++;
+ while((!isspace((unsigned char)*restofline))&&(*restofline!= 0)&&
(*restofline != ',')&&(*restofline != '\n'))
restofline++;
- while(isspace(*restofline))restofline++;
+ while(isspace((unsigned char)*restofline))restofline++;
}
else if(mystrncasecmp(restofline,"HandleWidth",11)==0)
{
restofline +=11;
off_flags |= NOBW_FLAG;
sscanf(restofline,"%d",&nobw);
- while(isspace(*restofline))restofline++;
- while((!isspace(*restofline))&&(*restofline!= 0)&&
+ while(isspace((unsigned char)*restofline))restofline++;
+ while((!isspace((unsigned char)*restofline))&&(*restofline!= 0)&&
(*restofline != ',')&&(*restofline != '\n'))
restofline++;
- while(isspace(*restofline))restofline++;
+ while(isspace((unsigned char)*restofline))restofline++;
}
else if(mystrncasecmp(restofline,"STARTSONDESK",12)==0)
{
restofline +=12;
off_flags |= STAYSONDESK_FLAG;
sscanf(restofline,"%d",&desknumber);
- while(isspace(*restofline))restofline++;
- while((!isspace(*restofline))&&(*restofline!= 0)&&
+ while(isspace((unsigned char)*restofline))restofline++;
+ while((!isspace((unsigned char)*restofline))&&(*restofline!= 0)&&
(*restofline != ',')&&(*restofline != '\n'))
restofline++;
- while(isspace(*restofline))restofline++;
+ while(isspace((unsigned char)*restofline))restofline++;
}
else if(mystrncasecmp(restofline,"STARTSANYWHERE",14)==0)
{
restofline +=14;
on_flags |= STAYSONDESK_FLAG;
}
- while(isspace(*restofline))restofline++;
+ while(isspace((unsigned char)*restofline))restofline++;
if(*restofline == ',')
restofline++;
else if((*restofline != 0)&&(*restofline != '\n'))
diff -urN AfterStep-1.0/configure.h AfterStep-1.0-I18N/configure.h
--- AfterStep-1.0/configure.h Mon Mar 3 04:50:40 1997
+++ AfterStep-1.0-I18N/configure.h Fri Feb 27 15:21:55 1998
@@ -62,6 +62,16 @@
#define XPMLIBRARY -L/usr/lib/X11 -lXpm
/***************************************************************************
+ *#define I18N
+ * If you want to use i18n feature, specify #define I18N
+ * Then you can use non-english fonts in window title, Icon,
+ * and Menu. you have to set the locale appropriately before
+ * you start the window manager.
+ ***************************************************************************/
+/* #define I18N */
+
+
+/***************************************************************************
*#define M4
* Causes m4 pre-processor patches to be included. Try man m4 for more info.
* Warning: m4 defines macros for some simple things like "include"
diff -urN AfterStep-1.0/lib/CopyString.c AfterStep-1.0-I18N/lib/CopyString.c
--- AfterStep-1.0/lib/CopyString.c Wed Aug 21 23:23:34 1996
+++ AfterStep-1.0-I18N/lib/CopyString.c Fri Feb 27 15:21:55 1998
@@ -12,7 +12,7 @@
int len;
char *start;
- while(((isspace(*source))&&(*source != '\n'))&&(*source != 0))
+ while(((isspace((unsigned char)*source))&&(*source != '\n'))&&(*source != 0))
{
source++;
}
@@ -25,7 +25,7 @@
}
source--;
- while((isspace(*source))&&(*source != 0)&&(len >0))
+ while((isspace((unsigned char)*source))&&(*source != 0)&&(len >0))
{
len--;
source--;
syntax highlighted by Code2HTML, v. 0.9.1