Commits

v0.2.0
All users
All time
January 2026
Su Mo Tu We Th Fr Sa
28 29 30 31 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
1 2 3 4 5 6 7

Commits on January 18, 2026

  1. Add mod+drag window swapping for tiled windows
    Hold Mod and drag a tiled window to swap positions with others.
    Features live preview: dragged window follows cursor and swaps
    happen in real-time as you hover over targets.
    
    - Add raise_window and move_window to Connection
    - Add Clone derive to Node for tree backup/revert
    - Store fixed grab offset at drag start for smooth tracking
    - Live swap on hover with geometry cache updates
    - Immediate flush after moves for responsive feedback
    - Green highlight on swap target (configurable via border_color_swap_target)
    mfwolffe committed
  2. mfwolffe committed

Commits on January 17, 2026

  1. espadonne committed
  2. Add directional focus memory for window navigation
    When navigating between windows with arrow keys, gar now remembers which
    window was last focused in each direction. This fixes the issue where
    navigating back and forth between a tall window and stacked windows would
    always default to the topmost window instead of returning to the previously
    focused one.
    
    The memory is stored only when windows share the same row (for Left/Right)
    or column (for Up/Down), preventing interference with natural navigation.
    mfwolffe committed
  3. Fix session exit cleanup: unmap windows and kill picom
    - Remove glx-no-rebind-pixmap from picom config (prevents wallpaper change detection)
    - Unmap all managed windows before exit so they don't persist on X server
    - Kill picom on exit to prevent compositor effects bleeding into greeter
    - Add sync to ensure X server processes unmap requests before exit
    mfwolffe committed
  4. Update session script and desktop entry for installer
    - gar-session.sh: Dynamic binary path lookup instead of hardcoded
    - gar.desktop: Update default path to /usr/local/share/gar
    mfwolffe committed

Commits on January 14, 2026

  1. mfwolffe committed

Commits on January 13, 2026

  1. mfwolffe committed
  2. mfwolffe committed
  3. Fix i3 IPC FD leak with timeout-based stale client cleanup
    Clients that connect but never send messages or subscribe to events
    would accumulate indefinitely, eventually exhausting file descriptors.
    
    Add tracking for client creation time and last activity timestamp.
    Clients are now cleaned up if they have been idle for 60+ seconds
    without subscribing to any events or sending any messages.
    
    This approach is safer than treating UnexpectedEof as disconnect,
    which caused issues with polybar's connection handling.
    mfwolffe committed
  4. mfwolffe committed
  5. Add visual effects config infrastructure (disabled)
    - Add gradient border, animation, and shader config options
    - Add frame gradient rendering code (currently disabled)
    - Fix frame destruction to unmap before destroy
    - Gradient borders disabled due to lifecycle issues
    mfwolffe committed

Commits on January 12, 2026

  1. Add systemd session setup to gar-session.sh
    Enable proper systemd user service integration:
    - Import DISPLAY and XAUTHORITY to systemd user session
    - Update D-Bus activation environment
    - Start gar-session.target (binds to graphical-session.target)
    
    This allows user services like garbg.service to start reliably
    at login with access to the X11 display. The gar-session.target
    is needed because graphical-session.target has RefuseManualStart=yes.
    
    Pattern follows sway-systemd, i3-session, and ArchWiki systemd/User.
    mfwolffe committed
  2. mfwolffe committed
  3. Fix picom v12+ startup and improve cursor handling
    - Add --backend glx to picom commands (required for v12+, no default)
    - Add cursor_move (fleur) for floating window drag operations
    - Add clear_window_cursor() to prevent grab/window cursor conflicts
    - Pass appropriate cursor to grab_pointer() during drag/resize
    - Restore edge cursor after drag release
    - Add cursor_for_edge() helper for resize cursor selection
    mfwolffe committed
  4. Add floating window move/resize with mod+drag and edge hover
    - Support both Alt and Super mod keys for drag operations
    - Add resize cursors for all edges and corners
    - Change cursor on hover near floating window edges
    - Click and drag edges to resize without mod key
    - Keep button grabs on floating windows for edge detection
    mfwolffe committed
  5. Fix i3 IPC workspace list to only include active workspaces
    Only report workspaces that are visible or have windows to polybar,
    matching i3 behavior. Empty invisible workspaces are now filtered out.
    mfwolffe committed
  6. Add workspace_next and workspace_prev actions for cycling workspaces
    - Add WorkspaceNext/WorkspacePrev to Action enum
    - Cycle only through workspaces with windows (skip empty ones)
    - Add gar.workspace_next() and gar.workspace_prev() Lua bindings
    mfwolffe committed
  7. Filter duplicate UnmapNotify events from StructureNotify
    Only process UnmapNotify when event.event == root (SubstructureNotify).
    Ignore events sent directly to window (StructureNotify) to prevent
    double-processing which caused windows to be unmanaged incorrectly.
    mfwolffe committed
  8. Fix window unmap handling during workspace switches and moves
    Track intentional unmaps with ignore_unmap_count to prevent
    UnmapNotify handler from unmanaging windows we're just hiding.
    mfwolffe committed
  9. Fix focus tracking and cross-monitor moves for window operations
    - Set target workspace focus before switch_workspace in move_to_workspace
    - Add set_focus after swap and cross-monitor fallback in swap_direction
    - Call set_focus after move_to_monitor to update X11 focus
    mfwolffe committed
  10. Force cursor refresh on startup to clear DM artifacts
    Warp pointer in-place after setting root cursor to ensure X11
    redraws the cursor with our definition, clearing any stale cursor
    images from the display manager.
    mfwolffe committed
  11. Fix mouse click behavior: pass-through and no spurious warp
    - Move button grab/ungrab into set_focus() to ensure clicks reach apps
    - Don't warp pointer on _NET_ACTIVE_WINDOW (user is already interacting)
    mfwolffe committed
  12. Add bar_height config option to manually override struts
    Useful when dock/panel struts are incorrect (e.g., notch offset on Asahi).
    Set gar.set("bar_height", N) in config to reserve N pixels at top.
    mfwolffe committed
  13. mfwolffe committed
  14. mfwolffe committed