Skip to content

SwineWM 0.4.0

Choose a tag to compare

@github-actions github-actions released this 24 Oct 02:09
· 83 commits to main since this release
c15e150

Added

  • IPC trees, workspaces, outputs and window/workspace events now carry all
    of sway's and i3's node fields (urgent, floating, scratchpad_state,
    orientation, deco_rect, window_rect, geometry, shell,
    representation, window_properties.instance, …) in sway's order, so
    i3 and sway IPC scripts find what they expect. percent is now worked
    out as in sway.

  • A native config-error nag window with the complete error list and reload
    and dismiss actions.

  • IPC SUBSCRIBE support for workspace, window, mode, output, binding,
    bar-config, shutdown and tick events; SEND_TICK now broadcasts its tick
    payload.

  • IPC GET_INPUTS and GET_SEATS now describe SwineWM's aggregate keyboard
    and pointer hooks and its single seat.

  • IPC subscriptions now report window move/fullscreen changes and workspace
    rename/urgency changes.

  • A companion watchdog restores hidden windows after an unexpected exit or
    after the manager's message loop stops responding; as the login shell it
    also starts Explorer after recovery.

  • smart_gaps on|off|toggle|inverse_outer, as in sway (until now accepted
    and ignored).

  • show_marks: marks appear on the tabs of tabbed and stacked containers
    as [mark], right-aligned; marks starting with _ stay hidden.

  • hide_edge_borders both hides the border of a window that fills its
    workspace (a Windows border cannot hide single edges).

  • bindcode and unbindcode accept numeric Windows virtual-key values
    (decimal, 1–255), so key bindings can be specified by code.

  • New-output workspace discovery recognizes move container to workspace
    bindings as well as workspace bindings.

Fixed

  • Switching workspace sent the window focus event before the workspace
    focus event, and reported the newly focused window as "visible":false.
    The order is now sway's (workspace first), and visible is worked out
    from the tree as in sway.

  • swinemsg -t subscribe -m '["window","workspace"]' failed with
    {"success":false} in Windows PowerShell, which drops the inner quotes
    before 7.3. swinemsg now turns [window,workspace] into JSON, and also
    takes plain event names: swinemsg -t subscribe -m window workspace.

  • IPC events reached a subscribed client only when it sent another
    message: the pipe was opened for synchronous I/O, so a waiting read
    blocked every event written to it. It now uses overlapped I/O, so
    listening clients (i3ipc scripts, Waybar's sway modules) get events as
    they happen. Events still queued when swinewm exits are written first.

  • IPC events now match sway: the mode event's change is the mode's
    name (with pango_markup from mode --pango_markup); SEND_TICK takes
    any text and broadcasts it with "first": false, and a new tick
    subscriber first gets {"first": true, "payload": ""}; subscriptions add
    up; the empty workspace event reports the workspace as current; a new
    window's new event comes before its focus event; and nothing is sent
    after shutdown (no close events for windows swinewm lets go of).

  • swinemsg -t subscribe prints the first event, and every event with
    -m/--monitor, as swaymsg does.

  • Newly mapped floating windows are raised above their parent without
    activating them, so owned dialogs do not remain obscured.

  • Focus-follows-mouse keeps a visible owned dialog focused rather than
    activating its owner and dropping the dialog behind it.

  • Gap values are range-checked and cannot overflow layout geometry.

  • Display and DPI changes are coalesced before outputs, window layout, bars
    and wallpaper are refreshed, including DPI notifications received by bars.