diff --unified --recursive --text fvwm-2.6.9/fvwm/borders.c fvwm-patched/fvwm/borders.c --- fvwm-2.6.9/fvwm/borders.c 2020-08-21 15:30:39.087737712 -0600 +++ fvwm-patched/fvwm/borders.c 2020-08-21 15:58:30.667261464 -0600 @@ -4983,6 +4983,7 @@ rectangle *ret_g, Window *ret_w) { int bw; + Bool title; bw = fw->boundary_width; /* ret_g->x and ret->y is just an offset relatively to the w, @@ -5053,7 +5054,32 @@ ret_g->height = sidebar_g->y; break; default: - return; + break; + } + + if (HAS_BORDER_UNDER_TITLE(fw)) + { + title = False; + switch (GET_TITLE_DIR(fw)) + { + case DIR_N: title = part & PART_TOP; break; + case DIR_E: title = part & PART_RIGHT; break; + case DIR_S: title = part & PART_BOTTOM; break; + case DIR_W: title = part & PART_LEFT; break; + } + if (title) + { + ret_g->width = max(ret_g->width, 2 * bw + fw->title_thickness); + ret_g->height = max(ret_g->height, 2 * bw + fw->title_thickness); + if (part & PART_RIGHT) + { + ret_g->x = 2 * sidebar_g->x + sidebar_g->width - ret_g->width; + } + if (part & PART_BOTTOM) + { + ret_g->y = 2 * sidebar_g->y + sidebar_g->height - ret_g->height; + } + } } return; Only in fvwm-patched/fvwm: borders.c.orig diff --unified --recursive --text fvwm-2.6.9/fvwm/borders.h fvwm-patched/fvwm/borders.h --- fvwm-2.6.9/fvwm/borders.h 2016-10-15 08:51:45.000000000 -0600 +++ fvwm-patched/fvwm/borders.h 2020-08-21 15:58:30.667261464 -0600 @@ -36,7 +36,12 @@ PART_FRAME = 0xff, PART_TITLEBAR = 0x300, PART_HANDLES = 0xc00, - PART_ALL = 0xfff + PART_ALL = 0xfff, + + PART_TOP = 0x31, + PART_BOTTOM = 0xc2, + PART_LEFT = 0x58, + PART_RIGHT = 0xa4 } window_parts; typedef enum diff --unified --recursive --text fvwm-2.6.9/fvwm/fvwm.h fvwm-patched/fvwm/fvwm.h --- fvwm-2.6.9/fvwm/fvwm.h 2020-08-21 15:48:43.507505372 -0600 +++ fvwm-patched/fvwm/fvwm.h 2020-08-21 15:58:30.667261464 -0600 @@ -268,6 +268,7 @@ #define WINDOWSHADE_LAZY_MASK 0x3 unsigned windowshade_laziness : 2; unsigned use_title_decor_rotation : 1; + unsigned has_border_under_title : 1; focus_policy_t focus_policy; } s; } common_flags_t; Only in fvwm-patched/fvwm: fvwm.h.orig diff --unified --recursive --text fvwm-2.6.9/fvwm/geometry.c fvwm-patched/fvwm/geometry.c --- fvwm-2.6.9/fvwm/geometry.c 2018-04-28 05:46:28.000000000 -0600 +++ fvwm-patched/fvwm/geometry.c 2020-08-21 16:02:53.280322490 -0600 @@ -45,6 +45,9 @@ /* ---------------------------- forward declarations ----------------------- */ +static void __get_window_borders( + const FvwmWindow *fw, size_borders *borders, Bool is_shaded); + /* ---------------------------- local variables ---------------------------- */ /* ---------------------------- exported variables (globals) --------------- */ @@ -351,7 +354,7 @@ get_window_borders_no_title(fw, &b); break; default: - get_window_borders(fw, &b); + __get_window_borders(fw, &b, 1); break; } *small_g = *big_g; @@ -479,23 +482,38 @@ void get_window_borders( const FvwmWindow *fw, size_borders *borders) { + __get_window_borders(fw, borders, 0); +} + +static void __get_window_borders( + const FvwmWindow *fw, size_borders *borders, Bool is_shaded) +{ + int title_thickness; + borders->top_left.width = fw->boundary_width; borders->bottom_right.width = fw->boundary_width; borders->top_left.height = fw->boundary_width; borders->bottom_right.height = fw->boundary_width; + + title_thickness = fw->title_thickness; + if (HAS_TITLE(fw) && HAS_BORDER_UNDER_TITLE(fw) && !is_shaded) + { + title_thickness += fw->boundary_width; + } + switch (GET_TITLE_DIR(fw)) { case DIR_N: - borders->top_left.height += fw->title_thickness; + borders->top_left.height += title_thickness; break; case DIR_S: - borders->bottom_right.height += fw->title_thickness; + borders->bottom_right.height += title_thickness; break; case DIR_W: - borders->top_left.width += fw->title_thickness; + borders->top_left.width += title_thickness; break; case DIR_E: - borders->bottom_right.width += fw->title_thickness; + borders->bottom_right.width += title_thickness; break; } borders->total_size.width = Only in fvwm-patched/fvwm: geometry.c.orig diff --unified --recursive --text fvwm-2.6.9/fvwm/geometry.h fvwm-patched/fvwm/geometry.h --- fvwm-2.6.9/fvwm/geometry.h 2016-10-15 08:51:45.000000000 -0600 +++ fvwm-patched/fvwm/geometry.h 2020-08-21 15:58:30.667261464 -0600 @@ -44,6 +44,8 @@ FvwmWindow *fw, rectangle *ret_g); void get_window_borders( const FvwmWindow *fw, size_borders *borders); +void get_window_borders_shaded( + const FvwmWindow *fw, size_borders *borders); void get_window_borders_no_title( const FvwmWindow *fw, size_borders *borders); void set_window_border_size( diff --unified --recursive --text fvwm-2.6.9/fvwm/style.c fvwm-patched/fvwm/style.c --- fvwm-2.6.9/fvwm/style.c 2020-08-21 15:48:43.507505372 -0600 +++ fvwm-patched/fvwm/style.c 2020-08-21 15:58:30.671261536 -0600 @@ -2247,6 +2247,12 @@ { rest = style_parse_button_style(ps, rest, on); } + else if (StrEquals(token, "BORDERUNDERTITLE")) + { + S_SET_HAS_BORDER_UNDER_TITLE(SCF(*ps), on); + S_SET_HAS_BORDER_UNDER_TITLE(SCM(*ps), 1); + S_SET_HAS_BORDER_UNDER_TITLE(SCC(*ps), 1); + } else if (StrEquals(token, "BorderWidth")) { if (GetIntegerArguments(rest, &rest, val, 1)) @@ -5184,6 +5190,11 @@ { flags->do_update_rotated_title = 1; } + + if (S_HAS_BORDER_UNDER_TITLE(SCC(*ret_style))) + { + flags->do_redecorate = True; + } /* has_mwm_border * has_mwm_buttons */ Only in fvwm-patched/fvwm: style.c.orig diff --unified --recursive --text fvwm-2.6.9/fvwm/style.h fvwm-patched/fvwm/style.h --- fvwm-2.6.9/fvwm/style.h 2020-08-21 15:48:43.511505397 -0600 +++ fvwm-patched/fvwm/style.h 2020-08-21 15:58:30.671261536 -0600 @@ -369,6 +369,10 @@ ((c).s.use_title_decor_rotation) #define S_SET_USE_TITLE_DECOR_ROTATION(c,x) \ ((c).s.use_title_decor_rotation = !!(x)) +#define S_HAS_BORDER_UNDER_TITLE(c) \ + ((c).s.has_border_under_title) +#define S_SET_HAS_BORDER_UNDER_TITLE(c,x) \ + ((c).s.has_border_under_title = !!(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) \ Only in fvwm-patched/fvwm: style.h.orig diff --unified --recursive --text fvwm-2.6.9/fvwm/window_flags.h fvwm-patched/fvwm/window_flags.h --- fvwm-2.6.9/fvwm/window_flags.h 2020-08-21 15:48:43.511505397 -0600 +++ fvwm-patched/fvwm/window_flags.h 2020-08-21 15:58:30.671261536 -0600 @@ -328,6 +328,12 @@ (fw)->flags.common.s.use_title_decor_rotation = !!(x) #define SETM_USE_TITLE_DECOR_ROTATION(fw,x) \ (fw)->flag_mask.common.s.use_title_decor_rotation = !!(x) +#define HAS_BORDER_UNDER_TITLE(fw) \ + ((fw)->flags.common.s.has_border_under_title) +#define SET_HAS_BORDER_UNDER_TITLE(fw,x) \ + (fw)->flags.common.s.has_border_under_title = !!(x) +#define SETM_HAS_BORDER_UNDER_TITLE(fw,x) \ + (fw)->flag_mask.common.s.has_border_under_title = !!(x) /* access to the special flags of a window */ #define DO_REUSE_DESTROYED(fw) \