Summary
I am trying to configure windows with a slim draggable title bar and close button, but without visible side/bottom borders. Based on the group options, I expected noborder and title to be composable, but in practice noborder prevents the title bar from being displayed at all.
Version / context
- Observed while configuring JWM from the Ubuntu package
jwm_2.4.0-2_amd64.deb in an Xvfb/x11vnc remote desktop session.
- I also checked current upstream source at
v2.4.6-26-gba12b4f (ba12b4f) and the same geometry behavior appears to still be present.
Minimal configuration
This is the relevant part of the configuration:
<JWM>
<Group>
<Option>noborder</Option>
<Option>title</Option>
</Group>
<WindowStyle decorations="motif">
<Font>Sans-10</Font>
<Height>20</Height>
</WindowStyle>
<Mouse context="title" button="1">move</Mouse>
<Mouse context="title" button="11">maximize</Mouse>
<Mouse context="close" button="-1">close</Mouse>
</JWM>
Expected behavior
Windows should still have a title bar, so that the title area can be dragged, double-clicked, and can show a close button, while side/bottom borders are not shown.
Actual behavior
No title bar is visible and there is no title hit target to drag. Removing noborder makes the title bar appear, but also restores the visible border frame.
Source reading
From reading the source, border/noborder and title/notitle appear to be modeled as separate group options:
case OPTION_NOBORDER:
np->state.border &= ~BORDER_OUTLINE;
break;
case OPTION_TITLE:
np->state.border |= BORDER_TITLE;
break;
But GetBorderSize appears to allocate title geometry only inside the BORDER_OUTLINE branch. When BORDER_OUTLINE is not set, all frame extents are set to zero:
if(state->border & BORDER_OUTLINE) {
...
} else {
*north = 0;
*south = 0;
*east = 0;
*west = 0;
}
That means title + noborder cannot produce title geometry, even though the flags can both be set.
Why this matters
There is a useful middle ground between fully decorated windows and totally undecorated windows: a minimal title bar for move/close/maximize interactions without a visible resize/border frame. This is especially useful in remote desktop / embedded desktop contexts where thick decorations take up space but some title hit target is still needed.
Possible fix / clarification
If this is intended to work, perhaps GetBorderSize could allocate north = GetTitleHeight() when BORDER_TITLE is set even if BORDER_OUTLINE is not set, while leaving south/east/west = 0.
If this is not intended to work, documenting that BORDER_TITLE requires BORDER_OUTLINE for geometry would make the behavior clearer.
Disclosure
This issue was drafted with assistance from GPT-5.5, with human oversight and review before filing.
Summary
I am trying to configure windows with a slim draggable title bar and close button, but without visible side/bottom borders. Based on the group options, I expected
noborderandtitleto be composable, but in practicenoborderprevents the title bar from being displayed at all.Version / context
jwm_2.4.0-2_amd64.debin an Xvfb/x11vnc remote desktop session.v2.4.6-26-gba12b4f(ba12b4f) and the same geometry behavior appears to still be present.Minimal configuration
This is the relevant part of the configuration:
Expected behavior
Windows should still have a title bar, so that the title area can be dragged, double-clicked, and can show a close button, while side/bottom borders are not shown.
Actual behavior
No title bar is visible and there is no title hit target to drag. Removing
nobordermakes the title bar appear, but also restores the visible border frame.Source reading
From reading the source,
border/noborderandtitle/notitleappear to be modeled as separate group options:But
GetBorderSizeappears to allocate title geometry only inside theBORDER_OUTLINEbranch. WhenBORDER_OUTLINEis not set, all frame extents are set to zero:That means
title + nobordercannot produce title geometry, even though the flags can both be set.Why this matters
There is a useful middle ground between fully decorated windows and totally undecorated windows: a minimal title bar for move/close/maximize interactions without a visible resize/border frame. This is especially useful in remote desktop / embedded desktop contexts where thick decorations take up space but some title hit target is still needed.
Possible fix / clarification
If this is intended to work, perhaps
GetBorderSizecould allocatenorth = GetTitleHeight()whenBORDER_TITLEis set even ifBORDER_OUTLINEis not set, while leavingsouth/east/west = 0.If this is not intended to work, documenting that
BORDER_TITLErequiresBORDER_OUTLINEfor geometry would make the behavior clearer.Disclosure
This issue was drafted with assistance from GPT-5.5, with human oversight and review before filing.