X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lwlib%2Fxlwmenu.c;h=b903917c61844a50ad562db0838ad48b8625c392;hb=6ea9e612056ffdae141f444c5901d782af8d78ce;hp=12dca517bb0edefe730fc6e4dbdd9a9894674a35;hpb=72a705551741d6f85a40eea486c222bac482d8dc;p=chise%2Fxemacs-chise.git.1 diff --git a/lwlib/xlwmenu.c b/lwlib/xlwmenu.c index 12dca51..b903917 100644 --- a/lwlib/xlwmenu.c +++ b/lwlib/xlwmenu.c @@ -83,23 +83,23 @@ xlwMenuResources[] = /* We must use an iso8859-1 font here, or people without $LANG set lose. It's fair to assume that those who do have $LANG set also have the *fontList resource set, or at least know how to deal with this. */ - XtRString, "-*-helvetica-bold-r-*-*-*-120-*-*-*-*-iso8859-1"}, + XtRString, (XtPointer) "-*-helvetica-bold-r-*-*-*-120-*-*-*-*-iso8859-1"}, #else {XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct *), - offset(menu.font), XtRString, "XtDefaultFont"}, + offset(menu.font), XtRString, (XtPointer) "XtDefaultFont"}, # ifdef USE_XFONTSET {XtNfontSet, XtCFontSet, XtRFontSet, sizeof(XFontSet), - offset(menu.font_set), XtRString, "XtDefaultFontSet"}, + offset(menu.font_set), XtRString, (XtPointer) "XtDefaultFontSet"}, # endif #endif {XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel), - offset(menu.foreground), XtRString, "XtDefaultForeground"}, + offset(menu.foreground), XtRString, (XtPointer) "XtDefaultForeground"}, {XtNbuttonForeground, XtCButtonForeground, XtRPixel, sizeof(Pixel), - offset(menu.button_foreground), XtRString, "XtDefaultForeground"}, + offset(menu.button_foreground), XtRString, (XtPointer) "XtDefaultForeground"}, {XtNhighlightForeground, XtCHighlightForeground, XtRPixel, sizeof(Pixel), - offset(menu.highlight_foreground), XtRString, "XtDefaultForeground"}, + offset(menu.highlight_foreground), XtRString, (XtPointer) "XtDefaultForeground"}, {XtNtitleForeground, XtCTitleForeground, XtRPixel, sizeof(Pixel), - offset(menu.title_foreground), XtRString, "XtDefaultForeground"}, + offset(menu.title_foreground), XtRString, (XtPointer) "XtDefaultForeground"}, {XtNmargin, XtCMargin, XtRDimension, sizeof(Dimension), offset(menu.margin), XtRImmediate, (XtPointer)2}, {XmNmarginWidth, XmCMarginWidth, XmRHorizontalDimension, sizeof(Dimension), @@ -423,10 +423,9 @@ string_width_u (XlwMenuWidget mw, int i, j; #ifdef NEED_MOTIF + chars = ""; if (!XmStringGetLtoR (string, XmFONTLIST_DEFAULT_TAG, &chars)) - { - chars = ""; - } + chars = ""; #else chars = string; #endif @@ -458,7 +457,7 @@ string_width_u (XlwMenuWidget mw, } static void -massage_resource_name (CONST char *in, char *out) +massage_resource_name (const char *in, char *out) { /* Turn a random string into something suitable for using as a resource. For example: @@ -480,15 +479,26 @@ massage_resource_name (CONST char *in, char *out) Boolean firstp = True; while (*in) { - char ch = massaged_resource_char[(unsigned char) *in++]; - if (ch) + if (*in == '%' && *(in + 1) == '_') + in += 2; + else { - *out++ = firstp ? tolower (ch) : toupper (ch); - firstp = False; - while ((ch = massaged_resource_char[(unsigned char) *in++]) != '\0') - *out++ = ch; - if (!*(in-1)) /* Overshot the NULL byte? */ - break; + char ch; + + if (*in == '%' && *(in + 1) == '%') + in++; + ch = massaged_resource_char[(unsigned char) *in++]; + if (ch) + { + int int_ch = (int) (unsigned char) ch; + *out++ = firstp ? tolower (int_ch) : toupper (int_ch); + firstp = False; + while ((ch = massaged_resource_char[(unsigned char) *in++]) + != '\0') + *out++ = ch; + if (!*(in-1)) /* Overshot the NULL byte? */ + break; + } } } *out = 0; @@ -506,23 +516,21 @@ nameResource[] = 0, XtRImmediate, 0 } }; -/* - * This function looks through string searching for parameter - * inserts of the form: - * %[padding]1 - * padding is space (' ') or dash ('-') characters meaning - * padding to the left or right of the inserted parameter. - * In essence all %1 strings are replaced by value in the return - * value (which the caller is expected to free). - * %% means insert one % (like printf). - * %1 means insert value. - * %-1 means insert value followed by one space. The latter is - * not inserted if value is a zero length string. - */ +/* This function searches STRING for parameter inserts of the form: + %[padding]1 + padding is either space (' ') or dash ('-') meaning + padding to the left or right of the inserted parameter. + In essence, all %1 strings are replaced by VALUE in the return value. + The caller is expected to free the return value using XtFree(). + %% means insert one % (like printf). + %1 means insert VALUE. + %-1 means insert VALUE followed by one space. The latter is + not inserted if VALUE is a zero length string. +*/ static char* -parameterize_string (CONST char *string, CONST char *value) +parameterize_string (const char *string, const char *value) { - char *percent; + const char *percent; char *result; unsigned int done = 0; unsigned int ntimes; @@ -531,24 +539,25 @@ parameterize_string (CONST char *string, CONST char *value) { result = XtMalloc(1); result[0] = '\0'; - return (result); + return result; } if (!value) value = ""; - for (ntimes = 1, result = (char *) string; (percent = strchr(result, '%')); + for (ntimes = 1, percent = string; + (percent = strchr (percent, '%')); ntimes++) - result = &percent[1]; + percent++; result = XtMalloc ((ntimes * strlen(value)) + strlen(string) + 4); result[0] = '\0'; - while ((percent = strchr(string, '%'))) + while ((percent = strchr (string, '%'))) { unsigned int left_pad; unsigned int right_pad; - char *p; + const char *p; if (percent[1] == '%') { /* it's a real % */ @@ -867,16 +876,18 @@ string_draw_u (XlwMenuWidget mw, #endif ) { -int i,s=0; -char *chars; + int i, s = 0; + char *chars; #ifdef NEED_MOTIF - XmStringGetLtoR (string, XmFONTLIST_DEFAULT_TAG, &chars); + chars = ""; + if (!XmStringGetLtoR (string, XmFONTLIST_DEFAULT_TAG, &chars)) + chars = ""; #else chars = string; #endif - for (i=0;chars[i];++i) { - if (chars[i]=='%'&&chars[i+1]=='_') { + for (i=0; chars[i]; ++i) { + if (chars[i] == '%' && chars[i+1] == '_') { int w; x += string_draw_range (mw, window, x, y, gc, chars, s, i); @@ -1475,7 +1486,7 @@ print_widget_value (widget_value *wv, int just_one, int depth) print_widget_value (wv->next, 0, depth); } } -#endif +#endif /* SLOPPY_TYPES < 2 */ static Boolean all_dashes_p (char *s) @@ -1489,30 +1500,29 @@ all_dashes_p (char *s) return True; return False; } -#endif +#endif /* SLOPPY_TYPES */ static widget_value_type menu_item_type (widget_value *val) { if (val->type != UNSPECIFIED_TYPE) return val->type; - else - { #if SLOPPY_TYPES - if (all_dashes_p (val->name)) - return SEPARATOR_TYPE; - else if (val->name && val->name[0] == '\0') /* push right */ - return PUSHRIGHT_TYPE; - else if (val->contents) /* cascade */ - return CASCADE_TYPE; - else if (val->call_data) /* push button */ - return BUTTON_TYPE; - else - return TEXT_TYPE; + else if (all_dashes_p (val->name)) + return SEPARATOR_TYPE; + else if (val->name && val->name[0] == '\0') /* push right */ + return PUSHRIGHT_TYPE; + else if (val->contents) /* cascade */ + return CASCADE_TYPE; + else if (val->call_data) /* push button */ + return BUTTON_TYPE; + else + return TEXT_TYPE; #else + else abort(); + return UNSPECIFIED_TYPE; /* Not reached */ #endif - } } static void @@ -1528,7 +1538,7 @@ label_button_size (XlwMenuWidget mw, 2 * mw->menu.vertical_margin + 2 * mw->menu.shadow_thickness); /* no left column decoration */ - *toggle_width = mw->menu.horizontal_margin + mw->menu.shadow_thickness;; + *toggle_width = mw->menu.horizontal_margin + mw->menu.shadow_thickness; *label_width = string_width_u (mw, resource_widget_value (mw, val)); *bindings_width = mw->menu.horizontal_margin + mw->menu.shadow_thickness; @@ -1872,7 +1882,7 @@ radio_button_draw (XlwMenuWidget mw, static struct _shadow_names { - CONST char * name; + const char * name; shadow_type type; } shadow_names[] = { @@ -2808,30 +2818,22 @@ make_shadow_gcs (XlwMenuWidget mw) xgcv.foreground = mw->menu.top_shadow_color; xgcv.background = mw->core.background_pixel; /* xgcv.stipple = mw->menu.top_shadow_pixmap; gtb */ -#ifdef NEED_MOTIF if (mw->menu.top_shadow_pixmap && mw->menu.top_shadow_pixmap != XmUNSPECIFIED_PIXMAP) xgcv.stipple = mw->menu.top_shadow_pixmap; else xgcv.stipple = 0; -#else - xgcv.stipple = mw->menu.top_shadow_pixmap; -#endif /* NEED_MOTIF */ pm = (xgcv.stipple ? GCStipple|GCFillStyle : 0); mw->menu.shadow_top_gc = XtGetGC((Widget)mw, GCForeground|GCBackground|pm, &xgcv); xgcv.foreground = mw->menu.bottom_shadow_color; /* xgcv.stipple = mw->menu.bottom_shadow_pixmap; gtb */ -#ifdef NEED_MOTIF - if (mw->menu.top_shadow_pixmap && - mw->menu.top_shadow_pixmap != XmUNSPECIFIED_PIXMAP) + if (mw->menu.bottom_shadow_pixmap && + mw->menu.bottom_shadow_pixmap != XmUNSPECIFIED_PIXMAP) xgcv.stipple = mw->menu.bottom_shadow_pixmap; else xgcv.stipple = 0; -#else - xgcv.stipple = mw->menu.bottom_shadow_pixmap; -#endif /* NEED_MOTIF */ pm = (xgcv.stipple ? GCStipple|GCFillStyle : 0); mw->menu.shadow_bottom_gc = XtGetGC ((Widget)mw, GCForeground|GCBackground|pm, &xgcv);