On Tue, Mar 11, 2008 at 02:37:16PM +0100, Jesús Guerrero wrote:
> 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.

See comments below.

> 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);

I don't like initializing variables in the declaration.  If you
had compiled with -Wall -Werror you would have noticed that this
variable is not used at all.  Please remove it.

>       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);

This is not good.  The vertical margin must be added when the
MI_Y_OFFSET is set in the first place.  There may be other places
that rely on this value.

>       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;
>  }
>  
>  /*

Looks good.

> 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)

MAX_VERTICAL_SPACING and MIN_VERTICAL_SPACING are not defined in
the patch.  Anyway, MIN_VERTICAL_SPACING should be just 0 and
MAX_VERTICAL_SPACING the same value that is used for
MAX_MENU_BORDER_WIDTH.

> +     {
> +             /* 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))

Please undo this change.  Gcc emits a warning if the parentheses
are omitted.

>               {
>               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;

Please re-indent this block with tabs.

>  
>  #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;

These should be unsigned char.

> +     } vertical_margins;
> +     struct
> +     {
>               int menu;
>               int active;
>               int greyed;
>               int title;
>       } cset;



Ciao

Dominik ^_^  ^_^

P.S.: Ich lese E-Post nur zweimal täglich.

-- 

Dominik Vogt

Reply via email to