diff --git a/WINGs/configuration.c b/WINGs/configuration.c index 31af58d2..cb2dfb96 100644 --- a/WINGs/configuration.c +++ b/WINGs/configuration.c @@ -10,9 +10,9 @@ _WINGsConfiguration WINGsConfiguration; -#define SYSTEM_FONT "sans:pixelsize=12" - -#define BOLD_SYSTEM_FONT "sans:bold:pixelsize=12" +#define SYSTEM_FONT "Trebuchet MS,Luxi Sans" +#define BOLD_SYSTEM_FONT "Trebuchet MS,Luxi Sans:bold" +#define DEFAULT_FONT_SIZE 12 #define FLOPPY_PATH "/floppy" @@ -41,48 +41,6 @@ getButtonWithName(const char *name, unsigned defaultButton) } -// fix this -static Bool -missingOrInvalidXLFD(char *xlfd) -{ - char *ptr = xlfd; - Bool broken = False; - int count = 0; - - if (!xlfd) - return True; - - while (*ptr) { - if (*ptr=='%') { - ptr++; - if ((*ptr=='d' || *ptr=='i') && count==0) { - count++; - } else { - broken = True; - break; - } - } else if (*ptr==',') { - count = 0; - } - ptr++; - } - - if (broken) { - if (xlfd == WINGsConfiguration.systemFont) { - ptr = "system font"; - } else if (xlfd == WINGsConfiguration.boldSystemFont) { - ptr = "bold system font"; - } else { - ptr = "Unknown System Font"; - } - wwarning(_("Invalid %s specification: '%s' (only %%d is allowed and " - "at most once for each font in a fontset)."), ptr, xlfd); - } - - return broken; -} - - void W_ReadConfigurations(void) { @@ -139,12 +97,15 @@ W_ReadConfigurations(void) WMGetUDIntegerForKey(defaults, "DefaultFontSize"); } - if (missingOrInvalidXLFD(WINGsConfiguration.systemFont)) { + if (!WINGsConfiguration.systemFont) { WINGsConfiguration.systemFont = SYSTEM_FONT; } - if (missingOrInvalidXLFD(WINGsConfiguration.boldSystemFont)) { + if (!WINGsConfiguration.boldSystemFont) { WINGsConfiguration.boldSystemFont = BOLD_SYSTEM_FONT; } + if (WINGsConfiguration.defaultFontSize == 0) { + WINGsConfiguration.defaultFontSize = DEFAULT_FONT_SIZE; + } if (!WINGsConfiguration.floppyPath) { WINGsConfiguration.floppyPath = FLOPPY_PATH; } @@ -157,9 +118,6 @@ W_ReadConfigurations(void) if (WINGsConfiguration.mouseWheelDown == 0) { WINGsConfiguration.mouseWheelDown = Button5; } - if (WINGsConfiguration.defaultFontSize == 0) { - WINGsConfiguration.defaultFontSize = 12; - } } diff --git a/WINGs/wfont.c b/WINGs/wfont.c index ae2a3922..32da8760 100644 --- a/WINGs/wfont.c +++ b/WINGs/wfont.c @@ -13,7 +13,7 @@ #include -#define DEFAULT_FONT "sans-serif:pixelsize=12" +#define DEFAULT_FONT "sans serif:pixelsize=12" #define DEFAULT_SIZE WINGsConfiguration.defaultFontSize @@ -38,7 +38,7 @@ xlfdToFcPattern(char *xlfd, int size) wfree(fname); if (!pattern) { - wwarning(_("invalid font: %s. Using default %s"), xlfd, DEFAULT_FONT); + wwarning(_("invalid font: %s. Trying '%s'"), xlfd, DEFAULT_FONT); pattern = FcNameParse(DEFAULT_FONT); } diff --git a/WPrefs.app/FontSimple.c b/WPrefs.app/FontSimple.c index f3af773b..69541682 100644 --- a/WPrefs.app/FontSimple.c +++ b/WPrefs.app/FontSimple.c @@ -235,7 +235,7 @@ lookup_available_fonts(_Panel *panel) if (pat) FcPatternDestroy(pat); - panel->fonts->families[panel->fonts->familyn++].name= wstrdup("sans"); + panel->fonts->families[panel->fonts->familyn++].name= wstrdup("sans serif"); family= panel->fonts->families + panel->fonts->familyn-1; family->styles= wmalloc(sizeof(FontStyle)*2); family->stylen= 2; @@ -453,7 +453,7 @@ selectedOption(WMWidget *w, void *data) FcDefaultSubstitute(pat); if (FcPatternGetString(pat, FC_FAMILY, 0, &name) != FcResultMatch) - name= "sans"; + name= "sans serif"; found= 0; // select family @@ -672,7 +672,7 @@ createPanel(Panel *p) } } else - WMAddListItem(panel->familyL, "sans"); + WMAddListItem(panel->familyL, "sans serif"); WMSetListAction(panel->familyL, selectedFamily, panel); diff --git a/WPrefs.app/WPrefs.c b/WPrefs.app/WPrefs.c index b38625f1..e466fe9a 100644 --- a/WPrefs.app/WPrefs.c +++ b/WPrefs.app/WPrefs.c @@ -61,8 +61,8 @@ extern Panel *InitAppearance(WMScreen *scr, WMWidget *parent); -#define ICON_TITLE_FONT "sans:pixelsize=9" -#define ICON_TITLE_VFONT "sans:pixelsize=9:weight=100" +#define ICON_TITLE_FONT "sans serif:pixelsize=9" +#define ICON_TITLE_VFONT "sans serif:pixelsize=9:weight=100" #define MAX_SECTIONS 16 diff --git a/src/window.c b/src/window.c index 35cc9b69..63a68c4e 100644 --- a/src/window.c +++ b/src/window.c @@ -339,6 +339,18 @@ setupGNUstepHints(WWindow *wwin, GNUstepWMAttributes *gs_hints) if (gs_hints->extra_flags & GSNoApplicationIconFlag) { wwin->client_flags.no_appicon = 1; } + + /* temporary solution to avoid GS menus in our window list. + * it's temporary because it's not the proper way: windows at the + * floating level are also skipped from the window list with this. + * Fix it -Dan */ + if (gs_hints->flags & GSWindowLevelAttr) { + if (gs_hints->window_level == WMMainMenuWindowLevel || + gs_hints->window_level == WMSubmenuWindowLevel) { + wwin->client_flags.skip_window_list = 1; + } + } + } diff --git a/util/convertfonts.c b/util/convertfonts.c index 259aaa25..c2339514 100644 --- a/util/convertfonts.c +++ b/util/convertfonts.c @@ -103,6 +103,9 @@ main(int argc, char **argv) } } + /* we need this in order for MB_CUR_MAX to work */ + setlocale(LC_ALL, ""); + WMPLSetCaseSensitive(False); if (stat(file, &statbuf) < 0) { diff --git a/util/fontconv.c b/util/fontconv.c index a10ba23d..0f07abfd 100644 --- a/util/fontconv.c +++ b/util/fontconv.c @@ -6,7 +6,7 @@ #include "../src/wconfig.h" -#define DEFAULT_FONT "sans:pixelsize=12" +#define DEFAULT_FONT "sans serif:pixelsize=12" static int countChar(char *str, char c) @@ -54,7 +54,7 @@ getXLFDTokens(char *xlfd) len--; if (len <= 0) break; - size = strcspn(ptr, "-"); + size = strcspn(ptr, "-,"); tokens[i].str = ptr; tokens[i].len = size; ptr += size; @@ -84,20 +84,44 @@ strToInt(str *token) } +static char* +mapWeightToName(str *weight) +{ + char *normalNames[] = {"medium", "normal", "regular"}; + static char buf[32]; + int i; + + if (weight->len==0) + return ""; + + for (i=0; ilen && + strncmp(normalNames[i], weight->str, weight->len)) + { + return ""; + } + } + + snprintf(buf, sizeof(buf), ":%.*s", weight->len, weight->str); + + return buf; +} + + static char* mapSlantToName(str *slant) { - if (slant->len==0 || slant->str[0]=='*') - return "roman"; + if (slant->len==0) + return ""; switch(slant->str[0]) { case 'i': - return "italic"; + return ":italic"; case 'o': - return "oblique"; + return ":oblique"; case 'r': default: - return "roman"; + return ""; } } @@ -106,7 +130,7 @@ char* xlfdToFc(char *xlfd, char *useFamily, Bool keepXLFD) { str *tokens, *family, *weight, *slant; - char *name, buf[512]; + char *name, buf[64], *slt; int size, pixelsize; tokens = getXLFDTokens(xlfd); @@ -116,6 +140,8 @@ xlfdToFc(char *xlfd, char *useFamily, Bool keepXLFD) family = &(tokens[1]); weight = &(tokens[2]); slant = &(tokens[3]); + pixelsize = strToInt(&tokens[6]); + size = strToInt(&tokens[7]); if (useFamily) { name = wstrdup(useFamily); @@ -123,31 +149,23 @@ xlfdToFc(char *xlfd, char *useFamily, Bool keepXLFD) if (family->len==0 || family->str[0]=='*') return wstrdup(DEFAULT_FONT); - sprintf(buf, "%.*s", family->len, family->str); + snprintf(buf, sizeof(buf), "%.*s", family->len, family->str); name = wstrdup(buf); } - pixelsize = strToInt(&tokens[6]); - size = strToInt(&tokens[7]); + if (size>0 && pixelsize<=0) { + snprintf(buf, sizeof(buf), "-%d", size/10); + name = wstrappend(name, buf); + } + + name = wstrappend(name, mapWeightToName(weight)); + name = wstrappend(name, mapSlantToName(slant)); if (size<=0 && pixelsize<=0) { name = wstrappend(name, ":pixelsize=12"); } else if (pixelsize>0) { /* if pixelsize is present size will be ignored so we skip it */ - sprintf(buf, ":pixelsize=%d", pixelsize); - name = wstrappend(name, buf); - } else { - sprintf(buf, "-%d", size/10); - name = wstrappend(name, buf); - } - - if (weight->len>0 && weight->str[0]!='*') { - sprintf(buf, ":weight=%.*s", weight->len, weight->str); - name = wstrappend(name, buf); - } - - if (slant->len>0 && slant->str[0]!='*') { - sprintf(buf, ":slant=%s", mapSlantToName(slant)); + snprintf(buf, sizeof(buf), ":pixelsize=%d", pixelsize); name = wstrappend(name, buf); } @@ -165,19 +183,11 @@ char* convertFont(char *font, Bool keepXLFD) { if (font[0]=='-') { - char *res; - char *tmp= wstrdup(font); - if (MB_CUR_MAX < 2) { - char *ptr = strchr(tmp, ','); - if (ptr) *ptr= 0; - res = xlfdToFc(tmp, NULL, keepXLFD); + return xlfdToFc(font, NULL, keepXLFD); } else { - res = xlfdToFc(tmp, "sans", keepXLFD); + return xlfdToFc(font, "sans serif", keepXLFD); } - wfree(tmp); - - return res; } else { return font; }