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 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 . 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 . - 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 . - 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 . 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.