1.3.12:

 - Fix wrapping backwards from desk 0.

 - Swap default Button1/Button3 aemenu bindings.

 - Restore the old look of draw_outline (from scratch), undoing 1.3.11's
   changes. Improve and standardize font spacing.

 - Fatten up transient frames a little, in case padding is 0.

1.3.11:

 - Fix issues with atom handling on 64-bit systems.

 - Correct gravity interpretation when we have a large border width.

 - Remove weird resizing algorithm; it was only supposed to be a placeholder
   for something even weirder but I never had time to get the math right. Do
   something more like twm instead (warping the pointer is still evil).

 - When doing any sort of sweep, draw the geometry in the middle of the frame
   and don't draw a line for the title.

 - Save original window border width and restore on exit.

1.3.10:

 - Respect incremental-resize hints when zooming clients, and don't make GTK+
   clients (if they persist their own geom) sometimes forget their zoom state.

 - Removed the shift-click bindings; buttons 4 and 5 now shade/unshade
   and zoom/unzoom in the frame and corner box respectively.

 - Added the ability to map buttons 4 and 5 on the root window. By
   default, they run aedesk to cycle through the available desktops.

 - Added -fa (if applicable) to the usage message.

 - Simplify the initial-position stuff some more, and skip (if enabled)
   interactive mapping in several more cases.

 - Make sure the borders of fullscreen windows are offscreen.

 - Reorganized the source a whole lot.

1.3.9:

 - Redid the initial-position algorithm again.

 - Added support for fullscreen hints.

 - Renamed the mapping options.

 - Fixed drawing of frame outlines when sweeping to the top of the
   screen.

1.3.8:

 - Change the CARD32s to unsigned longs; it seems that Xlib is going to
   handle things correctly. While doing this, rewrote all of the other
   code that deals with atoms and allocating memory for them.

 - Draw the border correctly when moving or resizing a shaded window,
   and don't unshade it as a side effect of other operations.

 - Fix response to EWMH close messages.

 - Reorganized the shared code (and some other stuff), which should
   simplify/speed up the build a bit.

 - Fixed some occasional X errors encountered when switching desktops,
   and a bug where an existing client's desktop could be set incorrectly
   if it was exposed in a certain order.

1.3.7:

 - Added some additional hints for window lists/pagers, and taking
   activation requests.

 - When mapping interactively, clicking with button 3 will map the
   window lowered.

 - Removed support for MWM hints entirely.

 - Fixed aepanel's initial window mapping.

1.3.6:

 - Eliminated the secondary frame box, and UI for setting the desktop
   hint to "all desks" or not. Got rid of the graphical indicators as
   well, since shaded or zoomed state can easily be ascertained by just
   looking at the window. Instead, added a shift-click handler.

 - Changed the operation of resize so that it scales from the center and
   never warps the pointer (which we are not supposed to do anyway).

 - Refactored move and resize so that they don't repeat code. This
   allows us to have interactive mapping essentially for free, so add an
   option for that. And having interactive mapping provides an
   opportunity to rewrite the initial-map geometry code yet again; it
   should be much saner now, although less forgiving of clients which
   try to kludge around the hints instead of doing the right thing.

 - Don't make aedesk -n bail out if there is no number of desktops atom
   set.

 - Mostly rewrote window gravity and resize hint handlers. These should
   do a better job of dealing with most cases.

1.3.5:

 - Allow transient windows to map over struts.

 - Remove the ndesks option and read _NET_NUMBER_OF_DESKTOPS instead.
   Added a -n option to switch-desk to set it, and removed the old -n
   (and -p) in favor of +1 and -1 (or any other integer).

 - Renamed switch-desk to aedesk (since we broke the options anyway).

 - Rewrote README.

1.3.4:

 - Brown paper bag: add missing Xmd.h and limits.h includes.

1.3.3:

 - Use CARD32 everywhere for all atom values. I believe this is what I
   should have done to fix the signed/unsigned confusion. Should work on
   systems where long is 64 bits now.

 - If the current desktop is unset on startup, set it to 0.

 - Don't adjust a PPosition hint relative to any top/left struts, unless
   it's overlapping them. Pretty much every client out there will ignore
   struts and save their position relative to the screen.

 - Get rid of SPACING in aepanel-gtk (you know, Fitts' Law). Also remove
   the frame and the quit button (generally useless). The button for the
   launch menu is now labeled "Launch" for consistency.

 - Make switch-desk -p wrap around properly from desk 0.

 - Added the lib stuff to X11OBJS in clients/Makefile (thanks Doug
   Vetter).

1.3.2:

 - Once again, ignore PPosition hints of 0,0. I don't know how this got
   lost. Perhaps we were doing it wrong all along.

 - If a client has a private colormap, attempt to allocate our colors in
   it before mapping. This doesn't mean the client can't later overwrite
   those colors, but it will at least give us the correct bg intially in
   most cases.

 - When iconifying or de-iconifying a client, also iconify or de-iconify
   all of its transients.

 - Also fix Adam's email in aeclients.1x and NEWS.

 - Add --prev and --next options to switch-desk. This necessitated
   splitting stringatom.c out from atom.c.

 - In aeclient, remove a client from the list when it moves itself to
   another desktop.

1.3.1:

 - Rename this file to NEWS and reformat it.

 - UTF-8 support. This is only, what, 3 years late or so. Requires
   X_HAVE_UTF8_STRING (X.Org or XFree86 >= 4.0.2).

 - Call setlocale on startup (this is necessary for using UTF-8 with
   core fonts or Xaw; it is not strictly so for Xft or GTK+, but
   probably a good idea anyway).

 - The Xft font is now specified separately from the core font, using
   fontconfig syntax (e.g. "Sans:size=8"). If Xft is not enabled this
   option will be ignored.

 - Reimplement remove_from_atom since we no longer have any compulsions
   about asking the server to send us up to 4 billion items at a time.
   There was really no other sensible way to do it for UTF-8 strings.

 - When maximizing, always redraw, since the window's size may not
   actually change (which is what ordinarily forces the redraw).

 - Break atom.h out of aeclients.h and include it separately; should fix
   compile problems on FreeBSD (thanks to John E Hein for noticing
   this).

 - Delete atoms (e.g. _NET_WM_STATE) that have had all their values
   removed.

 - Set NET_SUPPORTED appropriately on the root window.

 - Deal properly with clients that set unitialized garbage or off-screen
   values in position hints.

 - If a maximized client moves or resizes itself with a
   ConfigureRequest, unmaximize it.

 - Remove GTK+ 1.2 support. There's no theoretical reason you can't use
   1.2, but I don't have it installed anymore and I just don't feel like
   chasing down the eventual breakage.

 - Handle CirculateRequests. I implemented this for something I ended up
   not using, but if only for the sake of completeness it should be in
   there.

 - Sleep in aesession in case there are no children for some reason
   (reported by Craig Brozefsky).

 - README update: explain key bindings, clean out some cruft, update
   Adam's email.

 - Put all the atom initialization for the clients in couple shared
   funcs instead of duplicating it.

 - Do casting within atom_foreach rather than without. Added to TODO
   about how I don't really want to use long here due to sign issues.
   For now I am only putting casts in where I *mean* to cast and where
   ANSI does not not otherwise imply one, not merely to placate -Wall.
   Let's see if it breaks any archs.

 - Add half the font height to the size of transient frames. If
   you're using Xft, you're probably going to want to crank the padding
   down, which makes them too small otherwise. Or else I am just getting
   old and need a new eyeglass prescription.

 - Set the height strut correctly in aepanel-xaw.

1.3.0:

 - Implemented virtual desktops. Yeah, I lost, feature creep won. It
   really didn't take that much, once I looked at how to do it using the
   EWMH spec. Please read the relevant section in README before using.

 - Added another box to frames, and three new actions to go with it:
   shading, maximzation, and pinning to all desktops. These states use
   _NET_WM_STATE and _NET_WM_DESKTOP as defined in the EWMH.

 - Maintain a _NET_CLIENTS_LIST property on the root window so that we
   can use any EWMH pager/taskbar.

 - Rewrote aemenu and aepanel to use the EWMH properties instead of
   fiddling around with low-level X magic.

 - Added a small command-line client, switch-desk, to switch virtual
   desktops.

 - Remove set-gnome-pda and all support for the GNOME_PANEL_DESKTOP_AREA
   hint. Instead, we now look for _NET_WM_STRUT(_PARTIAL) on all managed
   windows.

 - Renamed, cleaned up, and improved the sanity of a whole bunch of
   little bits of code, and completely revamped everything that deals
   with X atoms.

 - Made aepanel-xaw work like aepanel-gtk. It now has a --bottom option,
   and you don't need to (and shouldn't, in fact) futz with the geometry
   resources.

1.2.7:

 - Backport the following from 1.3.3:

 - Added the lib stuff to X11OBJS in clients/Makefile (thanks Doug
   Vetter).

1.2.6:

 - Backport the following from 1.3.1:

 - Rename this file to NEWS and reformat it.

 - Deal properly with clients that set unitialized garbage or off-screen
   values in position hints.

 - Handle CirculateRequests. I implemented this for something I ended up
   not using, but if only for the sake of completeness it should be in
   there.

 - Sleep in aesession in case there are no children for some reason
   (reported by Craig Brozefsky).

 - README update: explain key bindings, clean out some cruft, update
   Adam's email.

 - Add half the font height to the size of transient frames. If
   you're using Xft, you're probably going to want to crank the padding
   down, which makes them too small otherwise. Or else I am just getting
   old and need a new eyeglass prescription.

 - Backport the following from 1.3.2:

 - Once again, ignore PPosition hints of 0,0. I don't know how this got
   lost. Perhaps we were doing it wrong all along.

 - Also fix Adam's email in aeclients.1x and NEWS.

1.2.5:

 - Don't exit if a specified rc file can't be found. Also fixed some
   tiny mem leaks in the rc code.

 - Draw window outlines properly when moving a client without a
   frame.

 - Various minor cleanups all around, as 1.2.x enters bugfix-only-land.

1.2.4:

 - Get rid of type-punned pointers everywhere to appease gcc 3.3.

 - Use enums where appropriate, and clarify associated code.

 - Cleaned up the parser immensely. Now backslashes will work anywhere,
   not just for \". Thanks to Bill Allombert for the idea.

 - Handle root window clicks on ButtonRelease, not ButtonPress. This
   should fix all the awful zombie aemenu problems.

 - Updated README and LICENSE to reflect the unfortunate death of David
   Hogan.

1.2.3:

 - Optionally use GTK+ 2.0 for GTK+ clients. While the changes required
   were minor, I'd like to get rid of USE_OLD_GTK soon. Please let me
   know if you really, really need to use GTK+ 1.2.

 - Don't use ## to paste strings in ARG(). This was always horribly
   wrong, but prior to version 3.2 GCC's preprocessor let me do it.

 - Use pkg-config to get the proper CFLAGS and includes for libxft. The
   old, hardcoded values no longer work with newer versions of the
   library.

 - aepanel-gtk can now run at the bottom of the display, instead of just
   the top. Additionally, it now pops its menu up in the right place
   (above or below the "Menu" button, depending on what edge of the
   screen it's on), instead of wherever the pointer happens to be.

 - Use \- for literal dashes in manpages, so that they render as U+002D
   and not U+2010 (hyphen) on UTF-8 systems. Also updated aeclients man
   page to reflect the removal of --show and -vv from set-gnome-pda.

 - Moved aewm itself into a subdirectory, src. Used this opportunity to
   clean up Makefiles and #includes a bit.

1.2.2:

 - In a fit of stupidity I lost get_gnome_pda's error recovery (return
   all zeros, not uninitialized garbage, if the hint doesn't exist)
   while moving/editing other parts of it. This caused major problems on
   a server where the hint doesn't exist yet (e.g. windows mapping
   offscreen).

1.2.1:

 - Call setsid(2) in fork_exec() to prevent child processes from dying
   when aewm is killed or crashes. (thanks, Ciaran Anscomb)

 - Don't crap out with a divide-by-zero error if a client sets a
   PResizeInc hint of 0. (ditto)

 - Improved the appearance of debugging info a bit. It does however
   assume an 80-character terminal, so you'll have to adjust and
   recompile if you want more.

 - Call XFlush() in set_gnome_pda to avoid set-gnome-pda exiting before
   the change takes effect. Made some more cleanups to the
   set/get_gnome_pda interface, mostly using a struct instead of 4 ints.

 - Fixed aepanel-gtk to not clobber parts of the
   GNOME_PAGER_DESKTOP_AREA hint when starting and exiting.
   Unfortunately it does so by saving the old hint and restoring it on
   exit, which is wrong in several cases. However, it's less wrong than
   before.

 - Removed multiple levels of verboseness in set-gnome-pda. The extra
   complexity wasn't worth it.

 - Added a missing #include <string.h> in client.c and manage.c.

 - Used spaces for indentation again, and made some other minor annoying
   cleanups. Sorry.

 - Made theight bail out if sent a NULL client_t. I was able to get a
   stack trace for a few crashes and they (rather inexplicably) pointed
   here. Obviously, something else is the real problem, since no other
   function *should* call theight on a NULL or invalidated client, and
   several other functions assume that they're getting a good pointer.

 - Made some minor edits to DESIGN, but I am way too lazy to do more
   real work on it.

 - Added items to TODO.

1.2.0:

 - Here we go, another stable release. I haven't updated DESIGN, but I
   have no idea when woody will freeze and I'd like to get this out the
   door.

 - Changed all occurences of "minimalistic" (which is not a word) to
   "minimalist" (thanks Matt Zimmerman).

 - Made frame padding (formerly SPACE in aewm.h) configurable at run
   time. Ideally, the default for this should be calculated from the
   font.

 - Added "include" directive to config file parser (thanks azz).

 - Fixed set-gnome-pda -v and -vv, and made all clients bail out on bad
   options.

1.1.5:

 - Fixed default config and config file parsing order.

 - Added long and short versions of all command line options.

 - Turned GNOME_PAGER_DESKTOP_AREA on by default.

1.1.4:

 - Added aewm config file (~/.aewm/aewmrc).

 - Fixed clients/Makefile so that specifying CFLAGS works, set-gnome-pda
   gets installed, and ln always uses -sf.

 - Updated the rest of README to document the new clients.

1.1.3:

 - Switched to the XFree86 license.

 - Fixed a segfault that could happen with Xft if a client's window
   disappeared. I think there is still a possible segv lurking
   somewhere, but I can't trigger it anymore. If you use Xft, especially
   with gdkxft, please try to bang on it.

 - Major reorganization/rewrite of all included clients (formerly
   referred to as "goodies"). All now support hierarchical menus, and
   use a new config file. You will need to convert your old .paletterc.

 - Got rid of sleep in aesession, now it just sleeps in wait().

 - Added optional support for Gnome's GNOME_PAGER_DESKTOP_AREA hint.
   Noticed a badly named dummy variable in my XGetWindowProperty calls
   while doing this and fixed it.

 - Wrote set-gnome-pda to allow manipulation of this hint.

 - Reformatted ChangeLog slightly.

 - Fix USPosition of 0 for real this time. Also accounted for border
   width, made other init_position tweaks to accomodate the possibility
   of GNOME_PAGER_DESKTOP_AREA, and ignore USSizes of 0 (this works
   around xpdf's brain-damage, and possibly other broken programs).

 - Included draft of DESIGN document.

1.1.2:

 - Rewrote init_position again. This fixes the problem with specifying a
   USPosition containing 0.

 - Added gtk-menu client contributed by Adam Sampson <ats@offog.org>. I
   want to fold this stuff into the rest of the goodies eventually.

 - Added a "-version" option for printing version information from the
   command line.

 - Added some proper headers to all the files in goodies/lib/.

 - Replaced strcpy/strcat in panel-misc.c with snprintf to prevent a
   possible buffer overflow.

 - Made some improvements to the .paletterc parser: squish a possible
   segfault, handle comments/blank lines, ignore menu directives.

 - Reformatted man pages.

1.1.1:

 - Fix typo in man page install location.

 - Use -lXt when compiling Xaw goodies (required to build on SunOS).

 - Added some more documentation (mostly about things that are likely to
   break.)

1.1.0:

 - Xft (freetype extension) support, thanks once again to help from Adam
   Sampson <ats@offog.org>.

 - A few Makefile improvements: only link against required libraries,
   easier enabling/disabling of options, don't attempt to compile
   against headers in the binary destination tree.

 - Yet more init_position tweaks -- use x position hint even if y is out
   of range and vice versa, and take window gravity into account when
   positioning.

 - Some additions and improvements to the debug code (mainly printing
   names of constants instead of cryptic numbers).

1.0.0:

 - All right, I think we're stable now. New stuff will go into 1.1.x.

 - Changed init_position so that it doesn't cut off very large windows.
   This was merely annoying for regular windows, but it was downright
   buggy for incsized ones.

 - Fixed compilation bug when shape support was disabled.

0.9.19:

 - OK, I broke command line parsing again. Yes, I'm an idiot.

 - Fixed problem with exec()-ing a non-existent program.

0.9.18:

 - Fixed bug in init_position; we can safely use PPosition now. If
   windows start popping up in bad places, check their size hints before
   yelling at me.

 - Use fork/exec instead of system(3) to run programs. Fixed signal
   handlers to reflect this (we need POSIX sigaction(2)).

 - Cleaned up MWM hints/WM_SIZE hints code (they sort of match now), and
   only request the MWM atom at startup instead of for each call.

 - Started yet another goodies reorganization, and ended up reverting a
   lot of it. However what's changed should go a little ways towards
   cleaning things up.

 - Fix a build error where some goodies files that needed to be compiled
   against X were compiled without -I/use/X11R6/lib, failing on systems
   without a symlink from /usr/include/X11.

 - Tossed out historical 'iheight' junk in border calculation.

0.9.17:

 - Use ln -f to ignore overwriting previously installed manpage links.

 - If MWM hints are enabled, no-border windows will no longer get a
   border upon exiting.

 - The order of buttons in *-palette is no longer changed by name
   updates or unhiding windows.

 - xaw-palette was fixed to work with proper versions of Xaw (shame on
   me for testing with Xaw3d!), including the one in XF4. The new
   internals have ported over to gtk-palette.

0.9.16:

 - Fixed a shaping bug (which actually existed before changes made in
   0.9.15) where a window that used to be shaped, but then became
   unshaped, wasn't updated properly.

 - MWM hints support can now be compiled in with -DMWM_HINTS, thanks to
   help from Adam Sampson <ats@offog.org>.

 - Set the input focus upon entering a window frame, instead of on
   entering the child window.

0.9.15:

 - Display a frame for shaped windows. This also makes the bug where
   shaped windows were getting gravitated as if they had a frame
   irrelevant.

 - Tiny cleanups for the Debian package, including:

 - Man page for the goodies.

 - Typo in makefile fixed (tried to strip manpage, ah-reer-reer-reer).

 - Polished the main man page a bit.

0.9.14:

 - Free cursors and GCs in quit_nicely.

 - Switch order of objects and libraries in Makefile to placate Solaris
   cc.

 - Rename raise to raise_win -- raise is in signal.h of course (duh!)

 - Added copyright notice to all goodies and Makefiles due to someone
   ignoring my license (this has been worked out).

 - Bail out on lack of default font. You *should* be reading aewm.h
   first of course ;-)

0.9.13:

 - Fix really stupid thing I did while refactoring make_new_client,
   where a window that started as Withdrawn would stay that way instead
   of getting mapped.

 - Deal with withdrawing clients properly in *-palette, by watching for
   the WM_STATE property to be changed instead of looking at UnmapNotify
   events.

0.9.12:

 - Clean up clients on receipt of a DestroyNotify. This is needed when a
   client is already unmapped (i.e, the user iconified it) and it exits.

 - Preserve window stacking order on exit and restart.

 - Mucked about with the make_new_client logic; tell me if this breaks
   something.

 - Added gtk-*-menu clients contributed by Adam Sampson <ats@offog.org>.

0.9.11:

 - Got rid of unneeded PropertyChangeMask on root window. Silly me.

 - Removed the ugly array/linked-list hack from xaw-palette, so that the
   internal workings of both palette clients are now basically
   identical.

 - static'd everything that should have been static.

 - Updated email, documentation, etc.

 - Got rid of handle_reparent_event, as a client call to XReparentWindow
   is taken care of by handle_unmap_event.

 - Backed out the 0.9.9 change to option-parsing macros, which were
   causing all options to fail miserably (argh).

0.9.10:

 - Handle withdrawing windows properly in xaw-palette. Both palette
   clients are a little saner now.

 - Updated goodies docs.

 - ungravitate when printing geometry for move/resize.

 - Moved more code from individual goodies to common-run.c.

 - Got rid of unhide() as we never use it.

 - Replaced GenericWidget typedef silliness with global variables.
   sometimes you just have to pick the lesser of two evils...

0.9.9:

 - Finally de-insanified handle_xerror. Instead of going through
   contortions in remove_client to avoid raising errors, we turn the
   error handler off during the server grab.

 - Both palette goodies now track iconification of clients and WM_NAME
   changes.

 - gtk-palette is now oriented horizontally, and includes a menu,
   providing lots more space for client buttons.

 - Made the parse_option macros reusable (thanks to the comp.lang.c
   folks for the reminder).

 - make sure get_wm_name in the goodies doesn't crash for windows that
   have no name.

 - Minor typo corrections and stuff.

0.9.8:

 - Brown paper bag: take debugging stupidity out of gtk-palette.

 - Overhaul the goodies' build system yet again.

 - Gtk-palette now gets the screen size correctly.

 - All switch/palette goodies now cut off long names, use WM_NAME
   instead of WM_ICON_NAME, and place iconified clients' names in
   brackets.

 - No changes to aewm itself in this release.

0.9.7:

 - Added lots of comments.

 - General code cleanups, tweaks, reformats all over.

 - Fixed iconic state problem.

 - Plugged a memory leak in send_wm_delete.

 - Added -new3.

 - Fixed -new[123] allocation bug.

 - Made debug code considerably saner.

 - Print "80x25" and such when resizing xterms.

 - Replaced sprintf with snprintf.

 - Got rid of -display. set DISPLAY in your environment instead, so that
   it propagates to child processes.

 - Messed around with the goodies' build system.

 - Fixed gtk-palette; events are now filtered properly at the GDK level.

 - Replaced variable length arrays with malloc/free.

 - Added xsession, since I've been using it forever.

0.9.6:

 - Fix for handling inital window geometry.

 - A few memory leaks plugged.

 - Wrote a man page

 - More consistent borders for transient windows.

0.9.5:

 - Print window geometry while moving/resizing.

 - Added some WM_NORMAL_HINTS sanity checks

 - Set the keyboard focus on window enter (for rxvt, etc).

0.9.4:

 - Root menu replaced by another client.

 - Added -bw option.

 - Border-drawing fixes (only visible if you have very wide borders).

 - Got rid of mouse button exit.

0.9.3:

 - Put the root menu code back in.

 - Added more goodies and reorganized them.

0.9.2:

 - Minor ICCCM compliance fix regarding WM_STATE.

0.9.1:

 - A small fix to make the palette complain if no rc file exists.

0.9.0:

 - Initial public release. Before this, aewm was called 'swim' and was
   used by me as a school project. It was also rather unstable.
