Version 4.9.6

*  [Bryan Christ] The screen saver now tracks a terminal resize.  While the
   saver (a fullscreen vterm running the configured lock program) is up,
   poll_input_thd previously swallowed KEY_RESIZE, so a dtach reattach onto a
   different-size terminal left the saver -- and the locked program inside it --
   stuck at the old geometry (e.g. vlock not filling a grown screen).  A resize
   is now forwarded to the saver overlay only: vwm_screensaver_resize() resizes
   the fullscreen vterm window (clearing its VK_STATE_NORESIZE for the
   programmatic resize and growing its content child), which drives
   vterm_resize() -> libvterm TIOCSWINSZ + SIGWINCH into the locked program so
   it repaints at the new size.  The hidden desktop underneath is never
   repainted, so a resize can't expose it.

Version 4.9.5

*  [Bryan Christ] Selecting/copying text while scrolled back into vwmterm
   history no longer snaps the view to the live screen.  The selection render
   now draws at the current scroll position (vwmterm_scroll_render) instead of
   always the live buffer, so the view stays put and the anchor lands on the
   row you clicked; and the copy reads the composed scrollback view via
   libvterm's new vterm_copy_scrollback() rather than the live-only
   vterm_copy_buffer, so the copied text is the history you selected.  Requires
   libvterm 10.7+.

Version 4.9.4

*  [Bryan Christ] Fit an over-large window back on screen after a shrink -- a
   dtach/abduco reattach or a teleport onto a smaller terminal, or restoring a
   minimized window when the screen has shrunk.  Two steps: pull the top-left
   back to the home corner, then, if the window is still larger than the usable
   area, resize it down by the minimum needed to fit.  Previously such a window
   kept its old size and stayed clipped.  New shared helper
   vwm_fit_window_onscreen(), used by both the KEY_RESIZE clamp and the
   minimized-restore path.

Version 4.9.3

*  [Bryan Christ] Track libviper 6.0.0's relief-API rename: the box-style
   setters vk_button/dropdown/spinbutton/input_set_relief_style became
   vk_*_set_border_style.  Updated at every call site (manage dialogs, the
   screenshot module).  No behaviour change.
*  [Bryan Christ] The scrollback spinner's arrow box is now flat.  A tee cell
   is shared by two regions and cannot satisfy two relief directions, so the
   raised arrow buttons' lit edges met the sunken value field's dark ones at
   the tees and read as glitches; the sunken field now carries the 3D and the
   arrows sit in a plain box.  Pairs with libviper 6.0.0's centralised relief
   drawing (which also fixes the manage-dialog dropdowns and the file dialog's
   input/frame shading).  Requires libviper 6.0.0+.

Version 4.9.2

*  [Bryan Christ] Desktop backgrounds now render bright and 256-colour choices
   correctly.  The surface background was handed to libviper as a chtype, whose
   pair went through COLOR_PAIR() and truncated past 255 -- so a bright desktop
   colour showed the wrong colour in the cells the terminal's hardware-scroll
   optimisation exposes.  Adopts libviper 5.6.0's widened
   vk_screen_set_surface_bkgd(wch, attrs, pair).  Requires libviper 5.6.0+.

Version 4.9.1

*  [Bryan Christ] Window title-bar controls now render as [v][X] -- the
   minimize control is bracketed to match close -- and the pair is inset two
   columns from the top-right corner rather than flush against it.  Each
   button now has a full three-column click target (minimize was one column).

Version 4.9.0

*  [Bryan Christ] Minimized windows.  A window's title bar gains a minimize
   glyph (a down-arrow, "v" on non-UTF-8) left of [X] that hides it in place;
   the top panel shows a "(N) Minimized" pulldown, next to VWM, that lists the
   hidden windows and restores one on click.  The Alt+W manage-windows tool
   gains Minimize and Restore buttons that act on the checked windows and
   flags already-minimized rows with the same down-arrow.  Restoring a window
   raises it and returns focus.  Requires libviper 5.5.0+.
*  [Bryan Christ] Window focus decoration is now driven by libviper's
   VK_EVENT_ON_FINALIZE deck event.  A single handler repaints the focus
   borders whenever the deck's membership or stacking changes, replacing the
   hand-rolled "demote the old top, promote the new top" logic that was
   duplicated across raise, cycle, close, minimize, restore, cross-desktop
   move, and window spawn.  Border changes are immediate and can no longer
   fall out of sync.

Version 4.8.0

*  [Bryan Christ] vwmterm scrollback now reveals less than one screenful of
   history.  Scrolling back into a short capture -- fewer lines than the
   window is tall, e.g. a brief `ls -l` -- previously did nothing, because
   the render clamped to whole screens of evicted rows.  It now composes the
   scrolled-back history above the live screen (via libvterm's new
   vterm_wnd_scrollback), so the wheel, Alt+PgUp/PgDn, and the bar all reach
   the very first captured line the way a hardware terminal scrolls back.
   Requires libvterm 10.4+.

Version 4.7.0

*  [Bryan Christ] vwmterm scrollbar.  Bordered terminal windows show a
   vertical scrollbar down the right edge, built on libviper's vk_scroller.
   The thumb is proportional to the real scrollback and reaches the top at
   the oldest captured line; scrolling (wheel, Alt+PgUp/PgDn, and dragging
   or clicking the bar) is clamped to what has actually been captured, so it
   no longer runs past into blank rows.  On the alternate screen (vim, less,
   myman) there is no scrollback, so the bar parks at a full thumb and
   scrolling is disabled.  The bar's color tracks window focus, and thumb
   drags are captured by the input loop so a release is never missed.  The
   terminal keeps its full size -- the bar takes its own column and the
   frame size label reports the real dimensions.  Requires libvterm 10.3+
   and libviper 5.4.0+.

Version 4.6.0

*  [Bryan Christ] Big-font host name.  The bottom-left hostname label can
   now render as large "pixel-art" text from a Terminus PSF console font,
   via the new loadable vwmfont module (modules/vwmfont, built and loaded
   like vwmterm/vwmprint).  Settings add "Hostname Font" (Basic plus the
   nine Terminus grids) and "Hostname Fill" (Full Block / O / X); the
   existing Hostname Colors still apply.  Falls back to the plain one-row
   label when the font is Basic or the vwmfont module is not installed.
   No font package is required -- discovery uses the console-setup
   Terminus PSFs already present (Uni3/Uni2-Terminus*) and also matches
   upstream ter-*.psf.gz.

Version 4.5.0

*  [Bryan Christ] Settings: the Desktop color option now picks both a
   foreground and a background ("Desktop Colors ... [White/Blue]") via a
   dual-swatch Modify picker (Tab between the two swatches), instead of
   background only.  The chosen foreground is the wallpaper glyph color.

*  [Bryan Christ] Add the "Crosses" wallpaper -- a 2x6 staggered '+'
   pattern.

*  [Bryan Christ] Render bright (8-15) desktop foreground/background
   colors correctly.  The wallpaper renderers packed the color pair into
   an 8-bit chtype via COLOR_PAIR(), truncating pair numbers above 255
   (bright backgrounds 12-15) to the wrong color; they now apply the pair
   as a separate short via wattr_set.  Requires libviper 5.3.0, which
   carries the matching fix for the picker's own widgets.

Version 4.4.0

*  [Bryan Christ] Manage Apps: add the "%fd" Params launch token.  An app
   whose Params contain %fd pops a file picker at launch (rooted at the
   home directory), substitutes the chosen file into the app's arguments,
   and starts it; cancelling the picker aborts the launch.  The Add/Edit
   App dialog labels the Params field with the token.

*  [Bryan Christ] Manage Apps: clicking a field in the Add/Edit form now
   focuses the field under the cursor -- the Params field was previously
   unreachable by mouse -- and Close warns about an unsaved category
   change before discarding it, matching the other tools.

*  [Bryan Christ] Consolidate the per-dialog popup primitives -- the
   warning, error, saved, confirm and file-load popups plus the listbox
   scroll callback -- into a shared manage_ui_common translation unit,
   removing several hundred lines of duplication across the Manage
   Settings / Hotkeys / Apps dialogs with no behaviour change.

*  [Bryan Christ] Popup consistency: the modal Manage Desktop / Print /
   Screenshot dialogs now dismiss when clicked outside, like the other
   popups.

Version 4.3.0

*  [Bryan Christ] Bump the minor version to mark dtach-based remote-session
   support as a complete, validated feature.  Detach with Ctrl-\ (or just
   drop the SSH connection) and vwm-resume reconnects, re-arming the mouse,
   cursor, keypad and a full repaint -- now including a same-size reattach
   and reattaching onto a running screensaver/lock, the two cases that
   previously came back needing a manual resize.  (Launchers and groundwork
   landed in 4.2.1; the reattach re-arm fixes in 4.2.2.)

*  [Bryan Christ] Docs: README tip for an /etc/update-motd.d/ login reminder
   that announces a resumable vwm session.

Version 4.2.2

*  [Bryan Christ] Fix dtach reattach not re-arming the terminal on a
   same-size reattach.  dtach -r winch sends SIGWINCH on every attach,
   but ncurses only turns it into KEY_RESIZE when the dimensions
   changed, so reattaching at the same window size never ran the re-arm
   cascade -- the mouse stayed dead, the cursor visible and the arrow
   keys emitting escapes until a manual resize.  vwm now catches
   SIGWINCH itself (chaining ncurses' handler) and the clock poller
   forces a KEY_RESIZE when a SIGWINCH arrived with no size change.

*  [Bryan Christ] Fix dtach reattach not re-arming when a screensaver or
   lock (e.g. vlock) was running at reattach time.  The saver runs in a
   fullscreen vterm and poll_input swallows KEY_RESIZE while it is up,
   so the reattach re-arm was discarded and the terminal stayed
   half-dead after unlock until a manual resize.  The saver's close
   path now queues a KEY_RESIZE once it is gone so the cascade runs.

Version 4.2.1

*  [Bryan Christ] Add detach/reattach support for running vwm on remote
   servers.  Two launchers, installed alongside the vwm binary, wrap vwm
   in dtach so a session survives an SSH disconnect: vwm-start begins a
   new session (refusing to clobber a live one -- it points you at
   vwm-resume -- while offering to clean up a stale socket), and
   vwm-resume reattaches.  A reattach reaches vwm as KEY_RESIZE (dtach
   -r winch sends SIGWINCH), so the resize cascade re-arms the mouse
   (re-emitting the enable escapes the new -- or freshly `reset`'d --
   tty has lost) and, via libviper >= 5.1.1, forces a full repaint and
   re-hides the cursor.  Detach disables mouse reporting on the outer
   terminal from the launcher's exit trap, since dtach gives the inner
   process no detach hook.  Requires dtach at runtime and libvdk
   (libviper) >= 5.1.1.

*  [Bryan Christ] Refactor: fold the startup / teleport / resize input
   re-arm (vk_kmio_init + nodelay) into a single vwm_input_rearm helper.

*  [Bryan Christ] Fix a saved non-default wallpaper not appearing until
   the first terminal resize.  The startup sequence built the active
   desktop's wallpaper cache during the first refresh -- before
   settings_load supplied the saved pattern/color -- and the second
   refresh reused that default-themed cache.  Invalidate the wallpaper
   cache after settings load so the startup refresh rebuilds it from the
   saved settings.

Version 4.2.0

*  [Bryan Christ] Fix vwmterm window titles going blank after the user
   triggers an apps reload (Manage Apps > Save, or VWM > Reload Apps).
   vwm_programs_purge freed every USER-zone vwm_module_t out from under
   any running vwmterm window that pointed at one, leaving a dangling
   vwmterm_data->mod.  The next SELECT-mode exit would read mod->title
   from the freed slab -- typically zeroed by a later calloc -- and
   write the resulting empty string back as " %s " ("  "), visually a
   blank gap in the centered title bar.  Snapshot the formatted title
   into vwmterm_data->title at launch and restore from there, so the
   window owns its title for its entire lifetime.

*  [Bryan Christ] Reorder the menubar so "Apps" appears before "VWM".
   The Apps menu is reached more often than the VWM (file) menu, so
   it now sits at the left edge where the menu bar starts.

Version 4.1.1

*  [Bryan Christ] Fix wheel scrolling in the Manage Apps dialog.  The
   main dialog's mouse gate dropped everything but BUTTON1, so wheel
   events never reached the apps listbox -- only BUTTON1 clicks could
   move the selection.  Widen the gate to include BUTTON4/5 and route
   wheel hits inside the listbox frame to vk_listbox_set_prev / _next,
   matching the click path (commit pending dropdown edits, repopulate
   the category / terminal / visibility dropdowns for the new entry,
   set FOCUS_APP_LIST).  Wheel hits outside the listbox frame are still
   dropped.

Version 4.1.0

*  [Bryan Christ] Fix mouse going unresponsive over SSH, and dying after
   a mouse-aware app (mc, vim) was opened in a vwmterm.  vwm marks its
   vterms VTERM_FLAG_EXTMOUSE so libvterm no longer seizes ncurses'
   mousemask out from under vk_kmio's SGR mouse parser.  Pairs with the
   in-libvdk SGR decode rewrite.  Requires libvterm >= 10.1 and
   libvdk (libviper) >= 5.1.0.

Version 4.0.0

*  [Bryan Christ] Per-desktop wallpaper patterns in Settings (None,
   Stiple, Small Bricks, Large Bricks, Dots 1, Dots 2).  Each desktop
   gets its own "Desktop N Wallpaper" row alongside the color row.
   Render dispatcher in bkgd.c; brick patterns fall back to Stiple at
   render time on non-UTF-8 terminals.
*  [Bryan Christ] Persist per-desktop colors and wallpapers to the
   JSON config (settings.desktop_colors, settings.desktop_wallpapers)
   so picks survive across restarts.  Sized to VWM_MAX_DESKTOPS so
   shrinking then growing surface_count preserves earlier picks.
*  [Bryan Christ] Port Edit App and Load Config popups to vk_popup_t.
*  [Bryan Christ] Add Manage Apps Menu dialog with app list, dropdown
   controls, edit/load popups, and mouse support.
*  [Bryan Christ] Add Teleport menu entry: prompts for a PTY path and
   migrates the active ncurses SCREEN to it via vk_screen_teleport.
   Recovers from teleport by re-arming colors, mouse mask (incl. hover
   tracking), and non-blocking input on the new SCREEN; queues a
   synthetic KEY_RESIZE so the panel + dialogs reflow to the
   destination's geometry.
*  [Bryan Christ] SIGTERM handler sets shutdown so the main loop
   unwinds through vk_screen_destroy -- the terminal is now restored
   instead of left in raw mode.
*  [Bryan Christ] Clock driver polls TIOCGWINSZ on the active SCREEN's
   fd every tick.  After teleport, SIGWINCH no longer reaches vwm
   (controlling TTY is still the launch terminal); the poll catches
   destination-PTY resizes and ungetches KEY_RESIZE.
*  [Bryan Christ] Per-desktop Settings: "Desktop N Color" rows
   dynamically populate from surface_count.  Each opens a vk_color
   picker (2x8, single-line dividers, 1x1 cells); on Save, each row's
   choice writes to vwm->desktop_color[N] and the wallpaper refreshes.

Version 3.3.2

*  [Bryan Christ] Use header only version of protothreads.
*  [Bryan Christ] Sync up with version 9 of libvterm API.

Version 3.3.1

*  [Bryan Christ] Sync up with version 7 of libvterm API.

Version 3.3.0

*  [Bryan Christ] Add support for the xterm mode int libvterm.

Version 3.2.0

*  [Bryan Christ] Require ncursesw (wide).  First step toward
   UTF-8 encoded Unicode support.


Version 3.1.3

*  [Bryan Christ] Update API call to sync with libvterm 3.1

Version 3.1.1

*  [Bryan Christ] Moved MEVENT into protothread context to make sure it
   doesn't get discared when stack is unwound.

Version 3.1.0

*  [Bryan Christ] Add module zone classification for dynamic menu
   management.  VWM now creates a base configuration at start-up
   if none exists.

Version 3.0.2

*  [Bryan Christ] Quit using obsolete libviper kmio hooks and placed
   hotkey logic inside the panel... where it ought to be.

Version 3.0.1

*  [Bryan Christ] Build system now uses cmake.  Modules load can be
   loaded as apps/programs as configured in vwmrc file.  The vwmrc
   file is created on start-up if it doesn't exist.  Removed all
   dependencies on MENU and FORMS libraries.  Integrate fullscreen
   and vt100 versions of VTerm.  Use libconfig for vwmrc file. 

Version 3.0.0

*  [Bryan Christ] Removed dependency on GLIB.

Version 2.8.0

*  [Bryan Christ] Major performance improvement to terminal
   applications.  Consolidated pty reads into a single window
   write.

Version 2.7.3

*  [Bryan Christ] Prevent crash with GPM is enabled and term is not
   xterm style.

Version 2.7.2

*  [Bryan Christ] Minor change to version window.

Version 2.7.1

*  [Bryan Christ] Minor change to Makefile.

Version 2.7.0

*  [Bryan Christ] Added beta version of resizing windows with hotkeys.

Version 2.6.1

*  [Bryan Christ] Make SIGIO acceleration actually work.

Version 2.6.0

*  [Bryan Christ] Remove GTimer and replace with posix timer to drive
   system clock.

Version 2.5.3

*  [Bryan Christ] make sure the terminal thread cannot
   monopolize the PT_NORMAL thread queue.

Version 2.5.2

*  [Bryan Christ] improved responsiveness with 2 thread queues.

Version 2.5.1

*  [Bryan Christ] partial memory leak fix for vwmterm
*  [Bryan Christ] use UTF-8 locale
*  [Bryan Christ] make wallpaper more interesting

Version 2.5.0

*  [Bryan Christ] refactored the code to use protothreads.

Version 2.2.1

*  [Bryan Christ] remove threaded locking primitives to improve
   improve performance.

Version 2.2.0

*  [Bryan Christ] A major rewrite of the module loading system.  This
   rewrite simplifies the code, makes the module system more extensible,
   and removes another set of glib dependencies.

*  [Bryan Christ] Temporarily removed screensaver modules and the system
   monitor module until they can be ported to the new module system.

*  [Bryan Christ] Ported VTerm to the new module system.

Version 2.1.3

*  [Bryan Christ] Patch from Yan Seiner to fix build problem on
   uclibc systems.

*  [Bryan Christ] Minor type changes to accomodate libpseudo 1.2.0

Version 2.1.2

*  [Bryan Christ] Fixed a default color issue which was causing
   problems with certain tools (like "man").

Version 2.1.1

*  [Bryan Christ] Build against libviper 1.4.5+ which includes
   a graceful cleanup facility on program exit

Version 2.1.0

*  Integration of new libvterm based terminal emulator.

*  Link to new libviper.

*  Removal of old hotkey mechanisms which have been replaced
   by the newer viper_kmio_dispatch() hook facilities.

*  Temporary removal of screen-saver tools.

*  Temporary removal of hotkey remapping.

Version 2.0.3

*  Makefile patch from Ben Sittler to build parallel
   versions of the vwm (vwm/vwm_wide.so)

Version 2.0.2

*  Added version labele to desktop wallpaper

*  Header fix for vwm_private.h

*  Header fix for vwmterm/signals.h

*  Makefile fix

Version 2.0.1

*  Header fix for vwm_signals.c

*  Makefile fixes

Version 2.0

*  SIGIO event accelerator.

*  New terminal shell.

*  Link to improved libspeudo with leapfrog
   task scheduler.

Version 1.4.0

*  Required code changes to sync with libviper
   1.4.x code base.

*  Various Makefile enhancements.

Version 1.3.5
*  added debug facility using libc backtrace().

*  implemented sigaction() instead of signal() for
   improved portability.

*  removed useles debug: rule from Makefile.

*  the default Makefile rule builds a version with
   debug facilities.  view the NOTES for additional
   details.

Version 1.3.4

*  serious overhaul of the built-in terminal.

*  fixed the 'ps aux' glitch introduced in 1.3.3.

*  'top' now behaves correclty most of the time.

*  removed the dual-buffer mechanism along with
   some other optimzations which reduced each
   terminal footprint by ~9K (from 27K to 18K).

*  code cleanups.

Version 1.3.3 (unreleased)

*  removed smir and rmir definitions from terminfo
   file.  they were confusing to bash and unnecessary.

*  removed the dependency on the non-portable
   ncurses win_st flag _WRAPPED.

*  fixed the issue with writting to bottom right corner
   which caused top to misbehave.  the fix causes
   a small problem with 'ps aux' but that should be
   relatively simple to fix.

Version 1.3.2

*  minor bugfix to Makefile which prevented first-time
   compilation of ptyterm from working.

Version 1.3.1

*  minor bugfix to ptyterm which keeps unhandled escape
   codes from being written to the display.  (fixes
   corruption caused by gcc errors and the odd glyphs
   seen in man pages).

Version 1.3.0

*  major over-haul of help system.  old "help-bar" has
   been replaced by an "information ticker" on the main
   panel.

*  added a new set of functions to control the srolling
   marquee panel (not 100% implemented)

*  sync with libviper to utilize SCREEN_WINDOW global.

*  added delete key functionality to ptyterm and the
   terminfo entry for vwmterm so that bash
   command/history editing will work correctly.

*  fixed an environment issue with ptyterm which caused
   some environment variables to be trampled (tested
   the change with Motor IDE which used to abort at
   startup).

*  added gcc -O2 optimizations to Makefile and moved
   to C99 standard (mostly for long long int).

Version 1.2.3

*  screensaver bug fix.  the built-in screensaver was
   not being resized with the terminal was resized.

Version 1.2.2

*  minor changes to accommodate API changes in libviper.

*  update built-in modules for default NORESIZE state
   set by libviper at window creation time.

*  windows which cannot be resized will not display the
   "resize grip" in the window frame.

Version 1.2.1

*  updated a few lines to accomodate msgbox changes in
   libviper.

Version 1.2.0

*  new user profile API.

*  preliminary support for private module/plugin loading
   from ~/.vwm/modules directory.

*  preliminary support for user specific configuration
   with the ~/.vwm/vwmrc file.

*  new screensaver subsystem and API.

*  set default screensaver timeout with vwmrc file

*  set default menu hotkey with vwmrc file

*  new "keycodes" tool provides VWM compatible keystroke

   codes for definining a custom menu hotkey.
*  updated Makefile to build ptyterm automatically.

*  minor code cleanups.

Version 1.1.6

*  correcty a bug introduced in version 1.1.5 which
   caused tab-stops to be unhandled by the ptyterm
   parser.

*  fixed a TODO item to promote *BSD porting.

*  fixed the problem with ptyterm and the paging utility
   "less" (may fix others also).

*  better prevention and handling of broken escape
   sequences in ptyterm.

Version 1.1.5

*  added termcap "rs1" (terminal reset) entry to
   vwmterm tic file and corresponding escape code
   parser to ptyterm.

*  ptyterm adapts to tty settings +ONLCR and -ONLCR.  many
   programs change these modes without asking :) which
   was causing many incompatibilites.

*  added termcap "cuf" (cursor forward) entry to
   vwmterm tic file and corresponding escape code
   parser to ptyterm.  this fixed rkhunter (and
   probably others) that were sending cuf even though
   it is was undefined.

Version 1.1.4

*  fixed a significant memory leak in the VWM main menu.

*  added internal function vwm_menu_marshal() which makes
   the main menu behave in a more "refined" manner.

*  changed the sysmon mechanism for fetching load average to
   getloadavg() instead of using libgtop2 for simplification.

*  fixed a crash bug in screensaver configuration ui.

*  colorized form in screensaver ui.

*  mandatory change for API libviper window_fill() routine.

*  fixed the 4k memory leak in ptyterm.

*  fixed some theoretical leaks.

*  added some additional saftey checks.

*  general code cleanup.

Version 1.1.3

*  fixed a compile bug

*  added this CHANGELOG file

Version 1.1.2

*  fixed a bug which caused keystrokes that had already been handled by
   a hotkey handler to be propogated to the toplevel window.

Version 1.1.1

*  fixed a small, but critical bug which caused screensaver wake-up to be
   handled incorrectly.

Version 1.1

*  added support for screensavers.  screensavers are normal windows which
   belong to the category VWM_SCREENSAVER.

*  added a broadcast event "vwm-clock-tick" which fires every 1/10 second
   (#define VWM_CLOCK_TICK).  this replaced the individual clocks which
   drove the default plugin 'sysmon' and the screensaver subsystem.

*  added a default screensaver called 'syssaver'.

*  changed the CPU enumeration mechanism for default plugin 'sysmon'.

*  moved the hotkey support out of libviper and into vwm where it made
   more sense.

Version 1.0

*  initial release.
