On Mon, Jan 19, 2009 at 06:47:28AM +0000, Thomas Adam wrote:
> I've been toying around with this patch for a while now, which seems
> to work.  Given that we have PositionPlacement which allows for
> placingwindows at a specific location, StartMaximized will start a
> window maximized, allowing for the usual arguments per the Maximize
> command[1].
> For instance:
> 
> Style somewindow PositionPlacement 0 50, \
>     StartMaximized growonlayers $[w.layer] -1 grow grow
> 
> Or more simply:
> 
> Style somewindow StartMaximized

Does the new style take the same arguments as the maximize
command, or does it have a different syntax?

> Comments/suggestions welcome.

I ponder if we shouldn't have a much more generic mechanism here.
At the moment we have:

  StartsOnDesk/Page/Screen
  StartsLowered/Raised
  StartsShaded
  StartIconic/Normal

All of these could be replaced by a hypothetic style
"InitWindowCommand" (stupid name, suggestions welcome):

  Style Foo MapFooFunc
  AddToFunc MapFooFunc
  + I MoveToPage 1 1
  + I Iconify true

This way, it would even be possible to get these stupid Open
Office windows under control that shade themselves on startup.

Of course the parsing would be difficult if the command contains
commas.

> -- Thomas Adam
> 
> [1] I found it surprising that the Maximize command has no "error"
> checking of its inputs, hence:  "Maximize 0 50 jlksdjsdljlksdlk"
> silently works, regardless.  I might fix this at some point.

> Index: AUTHORS
> ===================================================================
> RCS file: /home/cvs/fvwm/fvwm/AUTHORS,v
> retrieving revision 1.130
> diff -u -r1.130 AUTHORS
> --- AUTHORS   19 Oct 2008 12:04:12 -0000      1.130
> +++ AUTHORS   19 Jan 2009 06:18:20 -0000
> @@ -15,6 +15,7 @@
>  StartShaded style option.
>  Introduce the command expansion placeholder:  $[w.visiblename]
>  Make style matching honour a window's visible name (c.f. $[w.visiblename])
> +StartMaximized style option.
>  
>  Serge (gentoosiast) Koksharov:
>  Documentation fixes, bug fixes.
> Index: ChangeLog
> ===================================================================
> RCS file: /home/cvs/fvwm/fvwm/ChangeLog,v
> retrieving revision 1.3061
> diff -u -r1.3061 ChangeLog
> --- ChangeLog 30 Dec 2008 13:32:40 -0000      1.3061
> +++ ChangeLog 19 Jan 2009 06:19:11 -0000
> @@ -1,3 +1,12 @@
> +2008-12-30  Thomas Adam <thomas.ada...@gmail.com>
> +     
> +     * fvwm/add_window.c (AddWindow):
> +     * fvwm/fvwm.h:
> +     * fvwm/session.h:
> +     * fvwm/style.c:
> +     * fvwm/style.h:
> +     Allow for StartMaximized as a style option.
> +
>  2008-12-29  Alexandre Julliard  <julli...@winehq.org>
>  
>       * fvwm/ewmh_events.c (ewmh_WMStateMaxHoriz):
> Index: NEWS
> ===================================================================
> RCS file: /home/cvs/fvwm/fvwm/NEWS,v
> retrieving revision 1.767
> diff -u -r1.767 NEWS
> --- NEWS      30 Dec 2008 13:32:40 -0000      1.767
> +++ NEWS      19 Jan 2009 06:19:15 -0000
> @@ -7,6 +7,9 @@
>  
>  * New features:
>  
> +   - New style option StartMaximized for maximizing a window when it is
> +     initially mapped.
> +
>     - New extended variable
>         $[w.visiblename]
>  
> Index: doc/commands/Style.xml
> ===================================================================
> RCS file: /home/cvs/fvwm/fvwm/doc/commands/Style.xml,v
> retrieving revision 1.9
> diff -u -r1.9 Style.xml
> --- doc/commands/Style.xml    19 Oct 2008 12:04:13 -0000      1.9
> +++ doc/commands/Style.xml    19 Jan 2009 06:20:01 -0000
> @@ -76,7 +76,7 @@
>  <emphasis remap='I'>StickyAcrossDesks</emphasis> / <emphasis 
> remap='I'>!StickyAcrossDesks</emphasis>,
>  <emphasis remap='I'>!StickyStippledTitle</emphasis> / <emphasis 
> remap='I'>StickyStippledTitle</emphasis>,
>  <emphasis remap='I'>!StickyStippledIconTitle</emphasis> / <emphasis 
> remap='I'>StickyStippledIconTitle</emphasis>,
> -<emphasis remap='I'>StartIconic</emphasis> / <emphasis 
> remap='I'>StartNormal</emphasis>,
> +<emphasis remap='I'>StartIconic</emphasis> / <emphasis 
> remap='I'>StartMaximized</emphasis> / <emphasis 
> remap='I'>StartNormal</emphasis>,
>  <emphasis remap='I'>Color</emphasis>, <emphasis 
> remap='I'>ForeColor</emphasis>, <emphasis remap='I'>BackColor</emphasis>, 
> <emphasis remap='I'>Colorset</emphasis>,
>  <emphasis remap='I'>HilightFore</emphasis>, <emphasis 
> remap='I'>HilightBack</emphasis>, <emphasis 
> remap='I'>HilightColorset</emphasis>,
>  <emphasis remap='I'>BorderColorset</emphasis>, <emphasis 
> remap='I'>HilightBorderColorset</emphasis>,
> @@ -1120,6 +1120,10 @@
>  <fvwmopt cmd="Style" opt="StartNormal"/>
>  style.</para>
>  
> +<para>If the style <fvwmopt cmd="Style" opt="StartMaximized"/> is used, then 
> +the window is maximized.  Note that this option can accept the same
> +arguments as the <fvwmref cmd="Maximize"/> command.</para>
> +
>  <para><fvwmopt cmd="Style" opt="StickyIcon"/>
>  makes the window sticky when its iconified.  It de-iconifies on
>  top the active desktop.
> Index: fvwm/add_window.c
> ===================================================================
> RCS file: /home/cvs/fvwm/fvwm/fvwm/add_window.c,v
> retrieving revision 1.398
> diff -u -r1.398 add_window.c
> --- fvwm/add_window.c 6 Aug 2008 17:55:28 -0000       1.398
> +++ fvwm/add_window.c 19 Jan 2009 06:24:21 -0000
> @@ -2524,6 +2524,22 @@
>       /****** window colormap ******/
>       ReInstallActiveColormap();
>  
> +     /* Handle maximization. */
> +     if (state_args.do_start_maximized || SDO_START_MAXIMIZED(sflags))
> +     {
> +             /* Set the context window. */
> +             ecc.w.fw = fw;
> +             ecc.w.w = FW_W_FRAME(fw);
> +             ecc.w.wcontext = C_WINDOW;
> +             exc2 = exc_clone_context(
> +                     exc, &ecc, ECC_FW | ECC_W | ECC_WCONTEXT);
> +
> +             /* Actually maximize the window. */
> +             CMD_Maximize(NULL, exc2, 
> +                             SGET_START_MAXIMIZED_STRING(style));
> +             exc_destroy_context(exc2);
> +     }
> +
>       /****** ewmh setup *******/
>       EWMH_WindowInit(fw);
>  
> Index: fvwm/fvwm.h
> ===================================================================
> RCS file: /home/cvs/fvwm/fvwm/fvwm/fvwm.h,v
> retrieving revision 1.259
> diff -u -r1.259 fvwm.h
> --- fvwm/fvwm.h       28 Nov 2008 23:29:27 -0000      1.259
> +++ fvwm/fvwm.h       19 Jan 2009 06:25:28 -0000
> @@ -532,7 +532,9 @@
>       unsigned do_start_iconic : 1;
>       unsigned do_start_lowered : 1;
>       unsigned do_start_shaded : 1;
> +     unsigned do_start_maximized : 1;
>       unsigned start_shaded_dir : 3;
> +     unsigned has_start_maximized_string : 1;
>       unsigned has_border_width : 1;
>       unsigned has_color_back : 1;
>       unsigned has_color_fore : 1;
> @@ -679,6 +681,7 @@
>       pl_penalty_struct pl_penalty;
>       pl_percent_penalty_struct pl_percent_penalty;
>       char *pl_position_string;
> +     char *start_maximized_string;
>       style_flags flags;
>       style_flags flag_default;
>       style_flags flag_mask;
> Index: fvwm/session.h
> ===================================================================
> RCS file: /home/cvs/fvwm/fvwm/fvwm/session.h,v
> retrieving revision 1.25
> diff -u -r1.25 session.h
> --- fvwm/session.h    7 Aug 2007 20:17:43 -0000       1.25
> +++ fvwm/session.h    19 Jan 2009 06:26:06 -0000
> @@ -51,6 +51,7 @@
>       unsigned do_shade : 1;
>       unsigned used_title_dir_for_shading : 1;
>       unsigned do_max : 1;
> +     unsigned do_start_maximized : 1;
>  } mwtsm_state_args;
>  
>  Bool MatchWinToSM(
> Index: fvwm/style.c
> ===================================================================
> RCS file: /home/cvs/fvwm/fvwm/fvwm/style.c,v
> retrieving revision 1.260
> diff -u -r1.260 style.c
> --- fvwm/style.c      19 Oct 2008 12:04:13 -0000      1.260
> +++ fvwm/style.c      19 Jan 2009 06:26:15 -0000
> @@ -706,6 +706,13 @@
>                       *merged_style,
>                       strdup(SGET_PLACEMENT_POSITION_STRING(*add_style)));
>       }
> +     if (add_style->flags.has_start_maximized_string)
> +     {
> +             SAFEFREE(SGET_START_MAXIMIZED_STRING(*merged_style));
> +             SSET_START_MAXIMIZED_STRING(
> +                     *merged_style,
> +                     strdup(SGET_START_MAXIMIZED_STRING(*add_style)));
> +     }
>       /* merge the style flags */
>  
>       /*** ATTENTION:
> @@ -3933,6 +3940,25 @@
>                       ps->flag_mask.do_start_shaded = 1;
>                       ps->change_mask.do_start_shaded = 1;
>               }
> +             else if (StrEquals(token, "StartMaximized"))
> +             {
> +                     /* TA:  No need to PeekToken() here since we let the
> +                      * Maximize command handle the tokenising for us.
> +                      */
> +                     char *string;
> +
> +                     string = (rest != NULL) ? strdup(rest) : NULL;
> +                     rest = NULL; /* consume the entire string */
> +                     SSET_START_MAXIMIZED_STRING(*ps, string);
> +
> +                     ps->flags.do_start_maximized = on;
> +                     ps->flag_mask.do_start_maximized = 1;
> +                     ps->change_mask.do_start_maximized = 1;
> +
> +                     ps->flags.has_start_maximized_string = 1;
> +                     ps->flag_mask.has_start_maximized_string = 1;
> +                     ps->change_mask.has_start_maximized_string = 1;
> +             }
>               else if (StrEquals(token, "SaveUnder"))
>               {
>                       ps->flags.do_save_under = on;
> Index: fvwm/style.h
> ===================================================================
> RCS file: /home/cvs/fvwm/fvwm/fvwm/style.h,v
> retrieving revision 1.89
> diff -u -r1.89 style.h
> --- fvwm/style.h      17 Nov 2007 11:47:57 -0000      1.89
> +++ fvwm/style.h      19 Jan 2009 06:26:15 -0000
> @@ -19,6 +19,8 @@
>       ((sf)->do_start_lowered)
>  #define SDO_START_SHADED(sf) \
>       ((sf)->do_start_shaded)
> +#define SDO_START_MAXIMIZED(sf) \
> +     ((sf)->do_start_maximized)
>  #define SHAS_BORDER_WIDTH(sf) \
>       ((sf)->has_border_width)
>  #define SHAS_COLOR_BACK(sf) \
> @@ -657,6 +659,10 @@
>       ((s).pl_position_string)
>  #define SSET_PLACEMENT_POSITION_STRING(s,x)  \
>       ((s).pl_position_string = (x))
> +#define SGET_START_MAXIMIZED_STRING(s) \
> +     ((s).start_maximized_string)
> +#define SSET_START_MAXIMIZED_STRING(s,x) \
> +     ((s).start_maximized_string = (x))
>  
>  /* function prototypes */
>  void lookup_style(FvwmWindow *fw, window_style *styles);

Ciao

Dominik ^_^  ^_^

-- 

Dominik Vogt

Reply via email to