diff -ru fvwm-2.5.10/fvwm/fvwm.h fvwm-2.5.10.new/fvwm/fvwm.h --- fvwm-2.5.10/fvwm/fvwm.h 2004-02-16 13:45:59.000000000 +0000 +++ fvwm-2.5.10.new/fvwm/fvwm.h 2004-06-20 14:39:58.216434336 +0100 @@ -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 diff -ru fvwm-2.5.10/fvwm/placement.c fvwm-2.5.10.new/fvwm/placement.c --- fvwm-2.5.10/fvwm/placement.c 2004-03-17 16:57:50.000000000 +0000 +++ fvwm-2.5.10.new/fvwm/placement.c 2004-06-20 14:50:54.759624600 +0100 @@ -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, @@ -1785,6 +1799,9 @@ switch (reason->pos.algo) { + case PLACE_CENTER: + a = "Center"; + break; case PLACE_TILEMANUAL: a = "TileManual"; break; diff -ru fvwm-2.5.10/fvwm/style.c fvwm-2.5.10.new/fvwm/style.c --- fvwm-2.5.10/fvwm/style.c 2004-02-16 13:45:59.000000000 +0000 +++ fvwm-2.5.10.new/fvwm/style.c 2004-06-20 14:41:07.428912440 +0100 @@ -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;