Index: fvwm/style.c =================================================================== --- fvwm/style.c (revision 9) +++ fvwm/style.c (revision 10) @@ -3868,6 +3868,12 @@ S_SET_TITLE_DIR(SCM(*ps), DIR_MAJOR_MASK); S_SET_TITLE_DIR(SCC(*ps), DIR_MAJOR_MASK); } + else if (StrEquals(token, "TopBorder")) + { + S_SET_HAS_NO_TOP_BORDER(SCF(*ps), !on); + S_SET_HAS_NO_TOP_BORDER(SCM(*ps), 1); + S_SET_HAS_NO_TOP_BORDER(SCC(*ps), 1); + } else if (StrEquals(token, "TopTitleRotated")) { S_SET_IS_TOP_TITLE_ROTATED(SCF(*ps), on); @@ -4502,6 +4508,11 @@ flags->do_redecorate = True; } + if (S_HAS_NO_TOP_BORDER(SCC(*ret_style))) + { + flags->do_redecorate = True; + } + /* has_mwm_border * has_mwm_buttons */ if (S_HAS_MWM_BORDER(SCC(*ret_style)) || Index: fvwm/style.h =================================================================== --- fvwm/style.h (revision 9) +++ fvwm/style.h (revision 10) @@ -349,6 +349,11 @@ ((c).s.has_slightly_rounded_corners) #define S_SET_HAS_SLIGHTLY_ROUNDED_CORNERS(c,x) \ ((c).s.has_slightly_rounded_corners = !!(x)) +#define S_HAS_NO_TOP_BORDER(c) \ + ((c).s.has_no_top_border) +#define S_SET_HAS_NO_TOP_BORDER(c,x) \ + ((c).s.has_no_top_border = !!(x)) + #define S_DO_EWMH_MINI_ICON_OVERRIDE(c) \ ((c).s.do_ewmh_mini_icon_override) #define S_SET_DO_EWMH_MINI_ICON_OVERRIDE(c,x) \ Index: fvwm/geometry.c =================================================================== --- fvwm/geometry.c (revision 9) +++ fvwm/geometry.c (revision 10) @@ -479,6 +479,7 @@ const FvwmWindow *fw, size_borders *borders, Bool is_shaded) { int title_thickness; + int *title_border = NULL; int bw; bw = HAS_FLUXBOX_HANDLES(fw) ? 1 : fw->boundary_width; @@ -496,18 +497,25 @@ switch (GET_TITLE_DIR(fw)) { case DIR_N: - borders->top_left.height += title_thickness; + title_border = &borders->top_left.height; break; case DIR_S: - borders->bottom_right.height += title_thickness; + title_border = &borders->bottom_right.height; break; case DIR_W: - borders->top_left.width += title_thickness; + title_border = &borders->top_left.width; break; case DIR_E: - borders->bottom_right.width += title_thickness; + title_border = &borders->bottom_right.width; break; } + + if (HAS_NO_TOP_BORDER(fw)) + { + *title_border = 1; + } + *title_border += title_thickness; + borders->total_size.width = borders->top_left.width + borders->bottom_right.width; borders->total_size.height = @@ -528,6 +536,26 @@ borders->bottom_right.width = bw; borders->top_left.height = bw; borders->bottom_right.height = fw->boundary_width; + + if (HAS_NO_TOP_BORDER(fw)) + { + switch (GET_TITLE_DIR(fw)) + { + case DIR_N: + borders->top_left.height = 1; + break; + case DIR_S: + borders->bottom_right.height = 1; + break; + case DIR_W: + borders->top_left.width = 1; + break; + case DIR_E: + borders->bottom_right.width = 1; + break; + } + } + borders->total_size.width = borders->top_left.width + borders->bottom_right.width; borders->total_size.height = Index: fvwm/fvwm.h =================================================================== --- fvwm/fvwm.h (revision 9) +++ fvwm/fvwm.h (revision 10) @@ -271,6 +271,7 @@ unsigned has_rounded_corners_top : 1; unsigned has_rounded_corners_bottom : 1; unsigned has_slightly_rounded_corners : 1; + unsigned has_no_top_border : 1; focus_policy_t focus_policy; } s; } common_flags_t; Index: fvwm/window_flags.h =================================================================== --- fvwm/window_flags.h (revision 9) +++ fvwm/window_flags.h (revision 10) @@ -340,6 +340,12 @@ (fw)->flags.common.s.has_slightly_rounded_corners = !!(x) #define SETM_HAS_SLIGHTLY_ROUNDED_CORNERS(fw,x) \ (fw)->flag_mask.common.s.has_slightly_rounded_corners = !!(x) +#define HAS_NO_TOP_BORDER(fw) \ + ((fw)->flags.common.s.has_no_top_border) +#define SET_HAS_NO_TOP_BORDER(fw,x) \ + (fw)->flags.common.s.has_no_top_border = !!(x) +#define SETM_HAS_NO_TOP_BORDER(fw,x) \ + (fw)->flag_mask.common.s.has_no_top_border = !!(x) /* access to the special flags of a window */ #define DO_REUSE_DESTROYED(fw) \