Skip to content

Window decorations missing completely on certain WMs #82

Open

Description

@rmottola

On WindowMaker all is fine.
On special X11 MS-Windows native windowmanager exported GNUstep windows lack any control, windows are impossible to close, move,ecc.

Windows from GTK, Athena, ecc all work fine.

Image

PS: this is not win32 backend, but X11.

Activity

  1. DTW-Thalion commented on Jul 15, 2026

    @DTW-Thalion
    Contributor

    @rmottola, which X server and mode is this (Cygwin/X XWin -multiwindow, VcXsrv -multiwindow, X410, …), and its version? That decides whether the server reads _MOTIF_WM_HINTS at all.

    On non-WindowMaker WMs the X11 backend stops using _GNUSTEP_WM_ATTR and asks the WM to decorate via _MOTIF_WM_HINTS (XGServerWindow.m:908). A couple of things would pin down where that breaks:

    1. Run an affected app with --GNU-Debug=WM and paste the WM Protocols: WindowMaker=(..) GNOME=(..) EWMH=(..) line, so we know how _checkWindowManager classifies this WM.
    2. xprop _MOTIF_WM_HINTS on an undecorated GNUstep window and on a working GTK window, for comparison.
    3. Is GSBackHandlesWindowDecorations (or GSX11HandlesWindowDecorations) set in your defaults? As a test, defaults write NSGlobalDomain GSBackHandlesWindowDecorations NO and relaunch — if GNUstep then draws its own title bar and controls, that isolates it to the WM-side decoration path.

    Unfortunately I don't have this configuration available so I can't help much debug this.

  2. rmottola commented on Jul 15, 2026

    @rmottola
    MemberAuthor

    @DTW-Thalion I am using (a slightly old version of) MobaXTerm . it should be based on Cygwin. I will see if I can get the details.
    This bug could be a little related to #84 which is also an issues on rootless. There however styles come from window levels.
    I also use X11.app on Mac which is rootless but more up-to-date. Will re-check.

  3. DTW-Thalion commented on Aug 5, 2026

    @DTW-Thalion
    Contributor

    @rmottola any luck here?

  4. DTW-Thalion commented on Aug 6, 2026

    @DTW-Thalion
    Contributor

    Measured this against a window manager written to map windows and decorate
    nothing, which is how a rootless X server driving a native window manager can
    behave.

    The hints GNUstep sets are correct. On a titled, closable, miniaturizable and
    resizable window _MOTIF_WM_HINTS holds 0x3, 0x3e, 0x6e: flags for functions
    and decorations, functions for resize, move, minimize, maximize and close, and
    decorations for border, resize handle, title, minimize and maximize.
    _GNUSTEP_WM_ATTR is set as well. So the request is not what is missing.

    What is missing is that nothing checks the result. Whether the backend or the
    gui library draws the title bar and the buttons is decided by the method
    named -handlesWindowDecorations, which answered YES whatever the window
    manager did, changing only for the GSBackHandlesWindowDecorations default. PR #228
    answers it from the offsets probe instead: a window manager that puts a border
    on no style at all draws no title bar either. Under that window manager a
    titled window was 200x120, the content rect asked for, and becomes 202x144,
    with a title bar and buttons drawn by the gui library.

    One more thing came out of it. With no decoration on any style the offsets
    probe fails for every style, so the offsets are never stored on the root
    window and every application start repeats the probe, about a second per
    style.

    The xprop and --GNU-Debug=WM output asked for above would still confirm this is
    the same case, rather than a window manager that decorates in some other way.

  5. rmottola commented on Aug 7, 2026

    @rmottola
    MemberAuthor

    Debug output. Apparently plain window manager with no protocols

    SystemPreferences --GNU-Debug=WM
    2026-08-07 09:34:31.932 SystemPreferences[823886:823886] Failed to get _NET_WORKAREA
    2026-08-07 09:34:31.953 SystemPreferences[823886:823886] WM Protocols: WindowMaker=(NO) GNOME=(NO) EWMH=(NO)
    2026-08-07 09:34:31.987 SystemPreferences[823886:823886] Failed to get _NET_WORKAREA
    
    
    % xprop
    WM_STATE(WM_STATE):
                    window state: Normal
                    icon window: 0x0
    _WINDOWSWM_NATIVE_HWND(INTEGER) = 132190
    WM_HINTS(WM_HINTS):
                    Client accepts input or input focus: False
                    window id # of group leader: 0x200001
    WM_NORMAL_HINTS(WM_SIZE_HINTS):
                    user specified location: 189, 296
                    program specified location: 189, 296
                    user specified size: 592 by 414
                    program specified size: 592 by 414
                    program specified minimum size: 592 by 414
                    program specified maximum size: 592 by 414
    _NET_WM_ICON_NAME(UTF8_STRING) = "System Preferences"
    _NET_WM_NAME(UTF8_STRING) = "System Preferences"
    WM_ICON_NAME(UTF8_STRING) = "System Preferences"
    WM_NAME(UTF8_STRING) = "System Preferences"
    WM_PROTOCOLS(ATOM): protocols  WM_TAKE_FOCUS, WM_DELETE_WINDOW
    _NET_WM_SYNC_REQUEST_COUNTER(CARDINAL) = 2097189
    _MOTIF_WM_HINTS(_MOTIF_WM_HINTS) = 0x3, 0x2c, 0x2a, 0x0, 0x0
    _GNUSTEP_WM_ATTR(_GNUSTEP_WM_ATTR) = 0x83, 0x7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0, 0xffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
    WM_CLASS(STRING) = "SystemPreferences", "SystemPreferences"
    

    Here emacs.
    Left in the encoded icon because it is cool and we should do it too 😄

    Maybe the significant difference is: _NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_NORMAL

    % xprop
    _NET_WM_USER_TIME(CARDINAL) = 32365574
    _MOTIF_DRAG_RECEIVER_INFO(_MOTIF_DRAG_RECEIVER_INFO) = 0x6c, 0x0, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
    _NET_WM_OPAQUE_REGION(CARDINAL) = 0, 0, 672, 605
    _WINDOWSWM_NATIVE_HWND(INTEGER) = 263268
    WM_HINTS(WM_HINTS):
                    Client accepts input or input focus: True
                    Initial state is Normal State.
                    bitmap id # to use for icon: 0x2801ca
                    bitmap id # of mask for icon: 0x2801d0
                    window id # of group leader: 0x280001
    _GTK_THEME_VARIANT(UTF8_STRING) =
    WM_STATE(WM_STATE):
                    window state: Normal
                    icon window: 0x0
    _NET_WM_ICON(CARDINAL) =        Icon (48 x 48):
    
                                                ''__//]]vvnnnnvv[[II~~..
                                          ``\\ttQQooQQZZYYUUYYYYZZQQaa00jjll''
                                      ::ccQQQQUUffuuccccccccvvvvvvvvxxLLXXaa00{{``
                                  ''[[QQOOffvvccccccccccccvvvvvvvvvvuuuuuunnJJooQQ\\..
                                __XX00ffvvccccccccccccccvvvvvvvvvvuuuuuuuuuunnnnUUaaCC::
                              \\QQYYuuccccccccccccccvvvvvvvvvvuuuuuuuuuuuunnnnnnnnjj00QQ>>
                            {{ooLLccccccccccccccccvvvvvvvvvvuuuuuuvv}}}}uunnnnnnnnxxxxXXaall
                          11ooffccccccccccccccvvvvvvvvvvvvcc))!!;;..    ..<<vvnnxxxxxxxxYYhh!!
                        //ooffccccccccccccccvvvvvvvvcc||<<^^,,''''          ::nnxxxxxxxxxxXXaa++
                      ~~QQLLccccccccccccccvvvvvvvvvvuuuuuuuuuuuunnuu??        \\xxxxxxxxzzzzOO00,,
                    ..YYYYvvccccccccccvvvvvvvvvvvvuuuuuuuuuunnnnrr))--        >>xxxxxxzzzzzzjjoozz
                    11QQuuccccccccccvvvvvvvvrr{{((\\??!!++;;,,                llxxzzzzzzzzzzjjCCkk>>
                  ,,QQttccccccccccvvvvvvll^^                                ""uuzzzzzzzzzzjjjjjjOOXX..
                  }}00vvccccccvvvvvvvvII                      '',,""--++ii((nnzzzzzzzzzzjjjjjjjjttkk!!
                ..00LLccccccvvvvvvvvvv<<              __II11vvxxxxxxxxxxxxzzzzzzzzzzjjjjjjjjjjjjff00JJ
                !!oouuccccvvvvvvvvvvuu[[..        ,,rrnnnnxxxxxxxxxxxxxxzzzzzzzzzzjjjjjjjjjjjjffffJJkk::
                xxYYccvvvvvvvvvvvvuuuuuu))..      ::nnxxxxxxxxxxxxxxzzzzzzzzzzzzjjjjjjjjjjffffffffffaa11
              ..OOttvvvvvvvvvvuuuuuuuuuuuu{{''      ~~]]xxxxxxxxxxzzzzzzzzzzjjjjjjjjjjjjfffffffffftt00LL
              ""ooxxvvvvvvvvuuuuuuuuuunnnnnncc__        ++]]xxxxzzzzzzzzzzjjjjjjjjjjjjffffffffffttttYYaa..
              !!oovvvvvvuuuuuuuuuuuunnnnnnnnnnxx{{--        --[[zzzzzzzzjjjjjjjjjjffffffffffttttttttJJbb^^
              ))OOvvvvuuuuuuuuuuuunnnnnnnnnnxxxxxxxx{{~~        --}}jjjjjjjjjjjjffffffffffttttttttttLLbb<<
              ]]ZZvvuuuuuuuuuunnnnnnnnnnnnxxxxxxxxcc}}))//;;        ;;{{jjjjjjffffffffffttttttttttttttkkII
              vvXXuuuuuuuuuunnnnnnnnnnxxxxcc??--''                    ``??jjfffffffftttttttttttttttttthh\\
              vvXXuuuuuuuunnnnnnnnnnxx}}--                    ''<<||ccjjffffffffffttttttttttttttttttLLhh||
              rrZZuuuunnnnnnnnnnnnuu>>                  ::II]]jjjjjjjjffffffffffttttttttttttttttttLLLLbb??
              {{00uunnnnnnnnnnxxrr^^                <<]]jjjjjjjjjjffffffffffttttttttttttttttttLLLLLLLLbb>>
              llaannnnnnnnnnxxnn^^              ::]]jjjjjjjjjjjjffffffffffttttttttttttttttttLLLLLLLLJJdd::
              ;;aazznnnnnnxxxx((              ::nnjjjjjjjjjjjjffffffffffttttttttttttttttttLLLLLLLLLLXXkk..
              ..00CCnnxxxxxxxx??              [[jjjjjjjjjjffffffffffttttttttttttttttttLLLLLLLLLLLLLLQQUU
                ffZZxxxxxxxxxx}}              vvjjjjjjjjffffffffffttttttttttttttttttLLLLLLLLLLLLLLLLhh[[
                ??aazzxxxxxxxxzzii            ^^11jjffffffffffttttttttttttttttttttttLLLLLLLLLLLLLLUUdd;;
                ''ooJJxxxxxxzzzzzzII              ``<<//}}rrnnjjttttttttttttttLLLLLLLLLLLLLLLLLLLLQQZZ..
                  ccQQxxxxzzzzzzzzzzcc++                            ..''''``::__??ccLLLLLLLLLLLLJJbb//
                  ::aaJJzzzzzzzzjjjjjjjjnn//;;                                      {{LLLLLLLLLLQQQQ..
                    rroojjzzzzjjjjjjjjjjjjffffnn11ll__;;^^"";;--<<<<<<~~          ^^xxLLLLLLLLUUdd??
                    ``00ZZzzjjjjjjjjjjjjffffffffffttttttttttttttttvv??,,      ,,||ffLLLLLLLLCChhJJ
                      <<hhJJjjjjjjjjffffffffffttttttttttttnn))>>``      ::II]]ttLLLLLLLLLLLLQQhh::
                        {{hhCCjjjjffffffffffttttttnn))>>^^    ^^++II{{zzLLLLLLLLLLLLLLLLLLOOdd!!
                          uuhhCCffffffffffttzz[[//II??(([[uuffLLLLLLLLLLLLLLLLLLLLLLLLLLZZdd||
                          ..nnhhUUffffttttttttttttttttttLLLLLLLLLLLLLLLLLLLLLLLLLLLLCC00dd))
                            ..]]kkOOttttttttttttttttttLLLLLLLLLLLLLLLLLLLLLLLLLLLLJJaabb//
                                llaaaaJJttttttttttttttLLLLLLLLLLLLLLLLLLLLLLLLLLZZbbQQ--
                                  ^^zzbbQQUUttttLLLLLLLLLLLLLLLLLLLLLLLLLLCCXXhhddrr''
                                      __LLbbaaOOUULLLLLLLLLLLLLLLLLLCCYYQQbbbbxx""
                                          ;;]]00bbkkaaQQ000000QQoohhbbddZZ11^^
                                              ..::??rrffUUXXXXJJjj[[ll,,..
                                                          ....
    
    
    XdndAware(ATOM) = BITMAP
    _NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_NORMAL
    _NET_WM_SYNC_REQUEST_COUNTER(CARDINAL) = 2621763, 2621764
    _NET_WM_USER_TIME_WINDOW(WINDOW): window id # 0x280142
    WM_CLIENT_LEADER(WINDOW): window id # 0x280001
    _NET_WM_PID(CARDINAL) = 824035
    WM_LOCALE_NAME(STRING) = "C"
    WM_CLIENT_MACHINE(STRING) = "moria"
    WM_NORMAL_HINTS(WM_SIZE_HINTS):
                    program specified minimum size: 40 by 150
                    program specified resize increment: 8 by 15
                    program specified base size: 40 by 80
                    window gravity: NorthWest
    WM_PROTOCOLS(ATOM): protocols  WM_DELETE_WINDOW, WM_TAKE_FOCUS, _NET_WM_PING, _NET_WM_SYNC_REQUEST
    WM_CLASS(STRING) = "emacs", "Emacs"
    WM_ICON_NAME(STRING) = "*scratch* - GNU Emacs at moria"
    _NET_WM_ICON_NAME(UTF8_STRING) = "*scratch* - GNU Emacs at moria"
    WM_NAME(STRING) = "*scratch* - GNU Emacs at moria"
    _NET_WM_NAME(UTF8_STRING) = "*scratch* - GNU Emacs at moria"
    
    
    
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions