Skip to content

noborder prevents title bars from being displayed #678

@KTibow

Description

@KTibow

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions