Per Dan's request that I submit a complete patch, I've updated my recent
CenterPlacement patch to be as complete as I can make it.  The attached
file contains changes to these files:

        AUTHORS
        ChangeLog
        NEWS
        fvwm/fvwm.1.in
        fvwm/fvwm.h
        fvwm/placement.c
        fvwm/style.c
        sample.fvwmrc/system.fvwm2rc-sample-1

I was unable to figure out how to write a test for the CenterPlacement
style, so I didn't change tests/purify/purify.fvwm2rc.

I hope the FVWM developers find this functionality useful.
--
Francis Litterio
[EMAIL PROTECTED]
http://world.std.com/~franl/
GPG and PGP public keys available on keyservers.

Index: AUTHORS
===================================================================
RCS file: /home/cvs/fvwm/fvwm/AUTHORS,v
retrieving revision 1.93
diff -u -r1.93 AUTHORS
--- AUTHORS     23 May 2004 16:20:23 -0000      1.93
+++ AUTHORS     27 May 2004 16:35:41 -0000
@@ -25,7 +25,7 @@
 command.
 
 Francis Litterio:
-Fixed building FvwmScript under cygwin.
+Fixed building FvwmScript under cygwin.  Added CenterPlacement style.
 
 David Fries:
 Fixed the GNOME1 patch. WindowList class name sorting.
Index: ChangeLog
===================================================================
RCS file: /home/cvs/fvwm/fvwm/ChangeLog,v
retrieving revision 1.2491
diff -u -r1.2491 ChangeLog
--- ChangeLog   26 May 2004 08:25:24 -0000      1.2491
+++ ChangeLog   27 May 2004 16:35:50 -0000
@@ -1,3 +1,11 @@
+2004-05-26  Francis Litterio  <[EMAIL PROTECTED]>
+
+       * fvwm/fvwm.1.in
+       * fvmw/fvwm.h
+       * fvwm/placement.c (__place_get_wm_pos)
+       * fvwm/style.c (style_parse_one_style_option)
+       Added support for new CenterPlacement style (cf. macro PLACE_CENTER).
+       
 2004-05-26  Dominik Vogt  <[EMAIL PROTECTED]>
 
        * fvwm/placement.c (__place_get_wm_pos):
Index: NEWS
===================================================================
RCS file: /home/cvs/fvwm/fvwm/NEWS,v
retrieving revision 1.520
diff -u -r1.520 NEWS
--- NEWS        21 Apr 2004 23:04:49 -0000      1.520
+++ NEWS        27 May 2004 16:35:52 -0000
@@ -16,6 +16,8 @@
 
 * New Style option "State".
 
+* New Style option "CenterPlacement".
+
 -------------------------------------------------------------------
 
 Changes in alpha release 2.5.10 (19-Mar-2004)
Index: fvwm/fvwm.1.in
===================================================================
RCS file: /home/cvs/fvwm/fvwm/fvwm/fvwm.1.in,v
retrieving revision 1.134
diff -u -r1.134 fvwm.1.in
--- fvwm/fvwm.1.in      9 May 2004 12:59:55 -0000       1.134
+++ fvwm/fvwm.1.in      27 May 2004 16:35:59 -0000
@@ -6256,7 +6256,7 @@
 .IR StickyAcrossDesksIcon " / " !StickyAcrossDesksIcon ,
 .IR ManualPlacement " / " CascadePlacement " / " MinOverlapPlacement " / "
 .IR MinOverlapPercentPlacement " / " TileManualPlacement " / "
-.IR TileCascadePlacement ,
+.IR TileCascadePlacement , " / " CenterPlacement ,
 .IR MinOverlapPlacementPenalties ,
 .IR MinOverlapPercentPlacementPenalties ,
 .IR DecorateTransient " / " NakedTransient ,
@@ -7295,6 +7295,9 @@
 situation. The default is
 .IR TileCascadePlacement .
 
+.I CenterPlacement
+automatically places new windows in the center of the display.
+
 .I CascadePlacement
 automatically place new windows in a cascading fashion.
 
Index: fvwm/fvwm.h
===================================================================
RCS file: /home/cvs/fvwm/fvwm/fvwm/fvwm.h,v
retrieving revision 1.230
diff -u -r1.230 fvwm.h
--- fvwm/fvwm.h 2 Apr 2004 12:09:33 -0000       1.230
+++ fvwm/fvwm.h 27 May 2004 16:36:01 -0000
@@ -467,8 +467,9 @@
 #define PLACE_TILECASCADE       0x5
 #define PLACE_CASCADE_B         0x6
 #define PLACE_MINOVERLAP        0x7
-#define PLACE_MASK              0x7
-       unsigned placement_mode : 3;
+#define PLACE_CENTER           0x8
+#define PLACE_MASK              0xF
+       unsigned placement_mode : 4;
        unsigned ewmh_placement_mode : 2; /* see ewmh.h */
 #define WS_CR_MOTION_METHOD_AUTO CR_MOTION_METHOD_AUTO
 #define WS_CR_MOTION_METHOD_USE_GRAV CR_MOTION_METHOD_USE_GRAV
Index: fvwm/placement.c
===================================================================
RCS file: /home/cvs/fvwm/fvwm/fvwm/placement.c,v
retrieving revision 1.135
diff -u -r1.135 placement.c
--- fvwm/placement.c    26 May 2004 08:25:24 -0000      1.135
+++ fvwm/placement.c    27 May 2004 16:36:02 -0000
@@ -898,6 +898,20 @@
        reason->pos.algo = placement_mode;
        switch (placement_mode)
        {
+       case PLACE_CENTER:
+               attr_g->x = (screen_g.width - fw->frame_g.width) / 2;
+               attr_g->y = ((screen_g.height - fw->frame_g.height) / 2) + 
fw->title_thickness;
+
+               /* Don't let the upper left corner be offscreen. */
+               if (attr_g->x < PageLeft)
+               {
+                       attr_g->x = PageLeft;
+               }
+               if (attr_g->y < PageTop)
+               {
+                       attr_g->y = PageTop;
+               }
+               break;
        case PLACE_TILEMANUAL:
                flags.is_smartly_placed = SmartPlacement(
                        fw, &screen_g, fw->frame_g.width, fw->frame_g.height,
@@ -1784,6 +1798,9 @@
 
                switch (reason->pos.algo)
                {
+               case PLACE_CENTER:
+                       a = "Center";
+                       break;
                case PLACE_TILEMANUAL:
                        a = "TileManual";
                        break;
Index: fvwm/style.c
===================================================================
RCS file: /home/cvs/fvwm/fvwm/fvwm/style.c,v
retrieving revision 1.225
diff -u -r1.225 style.c
--- fvwm/style.c        6 May 2004 12:08:55 -0000       1.225
+++ fvwm/style.c        27 May 2004 16:36:04 -0000
@@ -2096,7 +2096,13 @@
                break;
 
        case 'c':
-               if (StrEquals(token, "CascadePlacement"))
+               if (StrEquals(token, "CenterPlacement"))
+               {
+                       ps->flags.placement_mode = PLACE_CENTER;
+                       ps->flag_mask.placement_mode = PLACE_MASK;
+                       ps->change_mask.placement_mode = PLACE_MASK;
+               }
+               else if (StrEquals(token, "CascadePlacement"))
                {
                        ps->flags.placement_mode = PLACE_CASCADE;
                        ps->flag_mask.placement_mode = PLACE_MASK;
Index: sample.fvwmrc/system.fvwm2rc-sample-1
===================================================================
RCS file: /home/cvs/fvwm/fvwm/sample.fvwmrc/system.fvwm2rc-sample-1,v
retrieving revision 1.12
diff -u -r1.12 system.fvwm2rc-sample-1
--- sample.fvwmrc/system.fvwm2rc-sample-1       5 Aug 2001 12:12:24 -0000       
1.12
+++ sample.fvwmrc/system.fvwm2rc-sample-1       27 May 2004 16:36:05 -0000
@@ -53,7 +53,7 @@
 Style "xman"       Icon xman.xpm,TileCascadePlacement,ClickToFocus
 Style "xvgr"       Icon graphs.xpm,TileCascadePlacement,ClickToFocus
 Style "matlab"     Icon math4.xpm,ClickToFocus
-Style "xmag"       Icon mag_glass.xpm,TileCascadePlacement, ClickToFocus
+Style "xmag"       Icon mag_glass.xpm,CenterPlacement, ClickToFocus
 Style "xgraph"      Icon graphs.xpm,TileCascadePlacement,ClickToFocus
 Style "sppeed6"     Icon math3.xpm,NoTitle,ClickToFocus
 Style "sppeed6_user" Icon math4.xpm,NoTitle

Reply via email to