On Tue, 11 Mar 2008 14:12:48 +0100 Dominik Vogt <[EMAIL PROTECTED]> wrote:
> On Tue, Mar 11, 2008 at 07:31:40AM +0100, Jesús Guerrero wrote: > > Hello, > > > > I made a new patch which solves one of the longstanding issues I had > > with my fvwm menus. It's not that it's something important, but it > > was a small annoyance. > > ... and where is the patch? Well, I will attach it to this mail. But, as I said, it's not a finished product. That's why I didn't include it on the first post, but since you asked... It basically works, but I need to test it extensively to make sure that nothing strange happens. At the current state, it only support the top and bottom margins. I will implement margins around separators probably later today if I can. The docs and stuff is not done. I don't want to waste my time documenting it if it's never going to be merged and I am the only one using it. But I will gladly make the docs and test stuff if you think that this would be a good addition for fvwm. The patch works as follows: MenuStyle * VerticalMargins x y Where x is the top margin and y is the bottom one. As said, margins around separators are still not implemented, though I think they would be a good addition. The separator lines are just next the the selection area, and that makes them look really bad. Thanks for your time. -- Jesús Guerrero <[EMAIL PROTECTED]>
diff -r -U5 fvwm/fvwm/menuitem.c fvwm/fvwm/menuitem.c --- fvwm/fvwm/menuitem.c 2008-03-10 22:26:15.000000000 +0100 +++ fvwm/fvwm/menuitem.c 2008-03-10 21:49:15.000000000 +0100 @@ -388,10 +388,11 @@ Region region = None; int i; int sx1; int sx2; FlocaleFont* font; + int top_margin = ST_VERTICAL_MARGIN_TOP(ms); if (!mi) { return; } @@ -404,11 +405,11 @@ else { font = ST_PSTDFONT(ms); } - y_offset = MI_Y_OFFSET(mi); + y_offset = MI_Y_OFFSET(mi) + ST_VERTICAL_MARGIN_TOP(ms); y_height = MI_HEIGHT(mi); if (MI_IS_SELECTABLE(mi)) { text_y = y_offset + MDIM_ITEM_TEXT_Y_OFFSET(*dim); } diff -r -U5 fvwm/fvwm/menus.c fvwm/fvwm/menus.c --- fvwm/fvwm/menus.c 2008-03-10 22:26:30.000000000 +0100 +++ fvwm/fvwm/menus.c 2008-03-10 21:23:52.000000000 +0100 @@ -126,10 +126,12 @@ } max; struct { unsigned is_popup_indicator_used : 1; } flags; + unsigned char top_margin; + unsigned char bottom_margin; } MenuSizingParameters; typedef enum { SCTX_MENU_ROOT, @@ -1796,11 +1798,13 @@ if (MR_LAST_ITEM(msp->menu) != NULL && MI_IS_SELECTABLE(MR_LAST_ITEM(msp->menu))) { y += relief_thickness; } - MR_HEIGHT(msp->menu) = y + MST_BORDER_WIDTH(msp->menu); + MR_HEIGHT(msp->menu) = y + MST_BORDER_WIDTH(msp->menu) + + MST_VERTICAL_MARGIN_TOP(msp->menu) + + MST_VERTICAL_MARGIN_BOTTOM(msp->menu); return has_continuation_menu; } /* diff -r -U5 fvwm/fvwm/menustyle.c fvwm/fvwm/menustyle.c --- fvwm/fvwm/menustyle.c 2008-03-10 22:26:34.000000000 +0100 +++ fvwm/fvwm/menustyle.c 2008-03-10 22:14:22.000000000 +0100 @@ -303,10 +303,31 @@ *below = val[1]; return; } +static void parse_vertical_margins_line( + char *args, signed char *top, signed char *bottom, + signed char top_default, signed char bottom_default) +{ + int val[2]; + + if (GetIntegerArguments(args, NULL, val, 2) != 2 || + val[0] < MIN_VERTICAL_SPACING || val[0] > MAX_VERTICAL_SPACING || + val[1] < MIN_VERTICAL_SPACING || val[1] > MAX_VERTICAL_SPACING) + { + /* illegal or missing parameters, return to default */ + *top = top_default; + *bottom = bottom_default; + return; + } + *top = val[0]; + *bottom = val[1]; + + return; +} + static MenuStyle *menustyle_parse_old_style(F_CMD_ARGS) { char *buffer, *rest; char *fore, *back, *stipple, *font, *style, *animated; MenuStyle *ms = NULL; @@ -404,10 +425,11 @@ "PopupIgnore", "PopupClose", "MouseWheel", "ScrollOffPage", "TrianglesUseFore", "TitleColorset", "HilightTitleBack", "TitleFont", + "VerticalMargins", NULL }; return GetTokenIndex(option, optlist, 0, NULL); } @@ -906,11 +928,11 @@ while (poption[0] == '!') { on ^= 1; poption++; } - switch((i = menustyle_get_styleopt_index(poption))) + switch(i = menustyle_get_styleopt_index(poption)) { case 0: /* fvwm */ case 1: /* mwm */ case 2: /* win */ if (i == 0) @@ -957,10 +979,12 @@ ST_DO_HILIGHT_BACK(tmpms) = 1; ST_DO_HILIGHT_FORE(tmpms) = 1; } /* common settings */ + ST_VERTICAL_MARGIN_TOP(tmpms) = 0; + ST_VERTICAL_MARGIN_BOTTOM(tmpms) = 0; ST_CSET_MENU(tmpms) = 0; ST_HAS_MENU_CSET(tmpms) = 0; ST_CSET_ACTIVE(tmpms) = 0; ST_HAS_ACTIVE_CSET(tmpms) = 0; ST_CSET_GREYED(tmpms) = 0; @@ -1565,11 +1589,16 @@ ST_PTITLEFONT(tmpms) = new_font; ST_USING_DEFAULT_TITLEFONT(tmpms) = False; } has_gc_changed = True; break; - + case 62: /* VerticalMargins */ + parse_vertical_margins_line( + args, &ST_VERTICAL_MARGIN_TOP(tmpms), + &ST_VERTICAL_MARGIN_BOTTOM(tmpms), + 0, 0); + break; #if 0 case 99: /* PositionHints */ /* to be implemented */ break; @@ -1741,10 +1770,13 @@ ST_HAS_TRIANGLE_RELIEF(destms) = ST_HAS_TRIANGLE_RELIEF(origms); /* PopupDelayed */ ST_DO_POPUP_IMMEDIATELY(destms) = ST_DO_POPUP_IMMEDIATELY(origms); /* DoubleClickTime */ ST_DOUBLE_CLICK_TIME(destms) = ST_DOUBLE_CLICK_TIME(origms); + /* VerticalMargins */ + ST_VERTICAL_MARGIN_TOP(destms) = ST_VERTICAL_MARGIN_TOP(origms); + ST_VERTICAL_MARGIN_BOTTOM(destms) = ST_VERTICAL_MARGIN_BOTTOM(origms); /* SidePic */ if (ST_SIDEPIC(destms)) { PDestroyFvwmPicture(dpy, ST_SIDEPIC(destms)); diff -r -U5 fvwm/fvwm/menustyle.h fvwm/fvwm/menustyle.h --- fvwm/fvwm/menustyle.h 2008-03-10 22:26:35.000000000 +0100 +++ fvwm/fvwm/menustyle.h 2008-03-10 18:48:01.000000000 +0100 @@ -171,10 +171,14 @@ #define MST_DOUBLE_CLICK_TIME(m) ((m)->s->ms->feel.DoubleClickTime) #define ST_ITEM_FORMAT(s) ((s)->feel.item_format) #define MST_ITEM_FORMAT(m) ((m)->s->ms->feel.item_format) #define ST_SELECT_ON_RELEASE_KEY(s) ((s)->feel.select_on_release_key) #define MST_SELECT_ON_RELEASE_KEY(m) ((m)->s->ms->feel.select_on_release_key) +#define ST_VERTICAL_MARGIN_TOP(s) ((s)->look.vertical_margins.top) +#define MST_VERTICAL_MARGIN_TOP(m) ((m)->s->ms->look.vertical_margins.top) +#define ST_VERTICAL_MARGIN_BOTTOM(s) ((s)->look.vertical_margins.bottom) +#define MST_VERTICAL_MARGIN_BOTTOM(m) ((m)->s->ms->look.vertical_margins.bottom) /* ---------------------------- type definitions --------------------------- */ typedef enum { @@ -288,10 +292,15 @@ signed char separator_above; signed char separator_below; } vertical_spacing; struct { + signed char top; + signed char bottom; + } vertical_margins; + struct + { int menu; int active; int greyed; int title; } cset;