0.0.5: changelog was part of e-mail i sent to myself at each release from this one on to 0.0.49 when real changelog was introduced, recovered changelog from all those mails at version 0.0.66 done some bugfixes and cleaned code up a little made draw_client() (formerly client_draw()) draw border to window frames 0.0.6: hopefully less foolish and agressive response to unmaprequests changed focus behaviour -> if there are windows there shall be one focussed 0.0.7: reduced flicker considerably - draw_client() after each resize move() and resize() dont act if client already has the requested size and drag only calls them for last motionnotify in que now next() and prev() now have argument to set wether to move pointer towards newly focussed window 0.0.8: added taskbar / iconify thing introduced new bugs removed focus previous window on remove_client because it were crap event loop modified atoms now have xa_ prefix and wm_hints is used for other purpose etc etc 0.0.9: major redesign - moved code around a lot hoping it would make more sence then xerror handler now searches for client to wich resourceid belongs fixed some bugs (including stupid mistake @ minimise thing) maybe introduced new bugs because maties @ almost 40hrs of uptime 0.0.10: handles window state stuff better now unmaps client window for iconifying and re-uses parent window as icon bugfixes 0.0.12: fully configureable now 0.0.13: mail was empty 0.0.14: fixed shift lock bug (keybinds did not work if it on) made config thing little cleaner etc 0.0.15: fixed bug in binding keys (now handles mappingnotify) 0.0.16: removed some plain stupidity - me tired head forgot somewhere in the past that several strings from default config (mouse button actions) compared with strcmp were NULL 0.0.17: xrm_getint() now works so border width etc can be set from configure file gravity now works 0.0.18: focus behaviour fixed: enterwindow events on client window are now also handled handles motif wm hints now, but work is to be done on that shape extension things work now 0.0.19: major bugfix - no more dissapearing windows (cause identified but not understood - unmapnotifies when there is nothing unmapped, x are crazy?) on destroynotify no longer trying to do stuff with window that is gone - still some misterious and less misterious badwindow errors possible but this is supposedly harmless tho i want it fixed (what if a new window with same id appears suddenly) mwm hints fixed up mostly i hope 0.0.20: shape thing fixed, transient windows recognised etc - xmms and xine schould now really work 0.0.21: fixed mwm hints once more hopefully mplayer and xine now behave better 0.0.22: compiles on linusk now (no more strlcat cpy etc but strncat) linusk also needed a header for uint32_t etc but they are no longer used as turns out motif wm hints are returned as long integers not 32 bit pieces as many code and manual for XGetWindowProperty suggest speaking of wich, mwm hints got fixed up a little more - somehow xmms, xine and mplayer did fine before but how it are miracle anyways i verified this by comparing the values matwm reads to xprop output and its behaviour to mwm's this was not yet tested on 32bit platforms tho - but i am quite sure it will work there but ftw @ fvwm's decorations.c using 'int' datatype for all values in mwmhints structure - evilwm and yeahwm use uint32_t i think, schould check that out 0.0.23: signal handling function rewritten to work with xorg 7.4 - maybe other little things too configuration stuff for modifier keys improved a little updated default key bindings to be a little sane fixed bug concerning the maximalisation of windows without title bar 0.0.24: now uses total_width and total_height macros for a little cleaner code window snapping is added (put "snap 0" in .matwmrc to disable) 0.0.25: forget to mention at .24 a licence was included and "snap 0" schould be "snap: 0" added window snapping to the resize windows doesnt re-use parent windows as icons anymore after all, this gives problems when matwm gets brutally murdered or would it segfault or anything concerning the placement of windows 0.0.26: fixed stupid bug with redrawing icons changing resolution/size of root window doesnt fuck up anymore 0.0.27: fixed stupid thing i forgot when adding the new icon stuff prolly forgot stuff i did too as this release seems to be pretty stable next thing to to is rewrite the configuration stuff to break it again i gues 0.0.28 & 0.0.29: one mail was about these two versions, yet included none .28 -> latest version i had with taskbar, prolly includes bugfix but dont know exactly what latest version now officialy has window list instead of taskbar, but maybe i revert this if it turns out to have problems too also cleaned up the code a little, and button actions are now no longer strings note that configuration stuff has changed a little since taskbar removal - the mouse buttons stuff 0.0.30: all clients are now pointers windows are now sorted, and icons are separated in the window list windows with no name are given a title etc 0.0.31: new configuration thing (and erm can launch programs now) maybe several bugfixes prolly several bugs 0.0.32: cleaned up some code fixed some bugs added ignore_modifier option 0.0.33: new makefile - including clean target fixed bugs introduced with pointer stuff @ maprequest and configurerequest handling - they sometimes acted faulty misterious badwindow errors gone somehow if current client is iconified, focus first client if there are only iconic clients dont set offset for them split off a deparent_client function from remove_client funtion, to make stuff less dirty (confusing fc argument, unnecesary if()'s) understands -display and -defaults arguments now (first one is obvious, other one prints default configuration to stdout and exits) perhaps bugfixes i forgot 0.0.34: abandon stupid objects stuff in makefile and add header, install and deinstall targets fix pointer stupidity (@ config.c) made read_file() work fox linusk too and add fix for in case no eof is read add font boundary stuff for window list and set fixed as default font ("*" is no good at all) 0.0.35: fixed read_file() - add final zero if no EOF read or something like that, was long ago fixed DestroyNotify handling - mapping a window and immediatly destroying it schould no longer bring trouble erm duno what else its been long confusing time 0.0.36: doesnt let window list become wider then the screen now added expand() function, and key action for it renamed cmpmod to cmpmodmask iconic, maximised, expanded and shaped members of client structure are now replaced by the bit mask in member called "state" 0.0.37: fixed calculation of other windows their height in expand() 0.0.38: window buttons implemented expand function now makes sure the window isn't maximised 0.0.39: button parent window now acts like root window client structure members "state", "title", "border" and "resize" are now replace by the bit mask "flags" added "title" button action, wich toggles the title bar of a window on and off buttons schould now be unmapped if the window has no title fixed bit mask stupidity that made broke shaped windows totally & add_client now calls set_shape instead of doing the same as set_shape 0.0.40: minimise button can now change no more inactive foregroundground on active background, but squares around buttons 0.0.41: buttons are now only activated when the mouse has not left them before releasing after its clicked if -display used exec now puts DISPLAY evironment variable accordingly in spawn() function 0.0.42: rc file doesnt use ':' as separator anymore (just whitespace now) "exec " line in matwmrc file schould run on startup select() loop now makes more sence, and won't get cought in XEvent() blocking it because it assume data == event any x errors occuring schould be history (new stupid ones introduced by buttons fixed, and also the old badwindow errors that happened because of mouse entering the parent window when a client window dissapeared triggered useless call to focus()) 0.0.43: previous claim on x errors were a bit utopic, but remove_client() now does an XQueryTree to see if the window in it still exists and hopefully matwm doesnt try to mess around with destroyed windows that much anymore now window buttons schould now act a bit nicer visually, as in when the mouse is clicked and dragged off the button and back on it the square indicating it is selected not (re)apearing whilst releasing the button would do nothing at all 0.0.44: fixed major bug in remove_client, that could induce segmentation faults (the loop to pull a client out of the array went one client too far) fixed input focus not always updated when restoring iconified clients bug check if client still has a window on most events exept destroynotify made redrawing of buttons, and title more efficient buttons dissapear if they dont fit on the titlebar anymore makeheader is a shell script now (wich depends on sed) dont need to unmap buttons when no titlebar on a window, so we don't do this anymore cleaned up code a bit (better naming of functions etc) 0.0.45: client_focus() makes more sence - introduced client_set_bg() so it doesn't have the same stuff twice fixed input focus stupidity with wlist_end() (introduced in .44 i think) extra debugging stuff and other details mwm hints fixed up once again, i broke it some time ago 0.0.46: move() foolish configurenotify sending of old coordinates fixed default configuration has bindings for people with a windoze key now adding a key to matwmrc leaves default key bindings intact now, they can be reset with the "resetkeys" command also if a new key binding is added the last one set will be used instead of the first one now moved a lot of functions from client to the new actions.c, including all content of icons.c to make stuff a little more organised, and isunmap() predicate placed in x11.c 0.0.47: faulty printf() call in xerrorhandler that caused segfaulting fixed more checking if windows still exist and has_client() has been replaced by has_child() in x11.c (wich allows to do checking on any set of parent & child as opposed to a client structure) don't warp to new windows when dragging or if window list open 0.0.48: last entry that came from an email added "iconify_all" key action (defaults to mod4-a and control-mod1-a) dont stop looking for arguments after -display argument - have i been drunk? graphics contexts initialization now smaller - half of it didn't really make sence (setting values to the default value, set a value and then set it again before use), maybe copied those lines from yeahwm 0.0.49: introduced changelog new windows map under window list or window currently being dragged button_current now uses a value of "None" instead of the root window to define there is no current button client_focus checks if window is really viewable before setting input focus window list puts off screen windows on screen if they are chosen - with new client_save() function renamed handle_button_event() to button_handle_event() fixed bug in get_mwm_hints() that made it possible in weird conditions a call to XFree would be apropriate but not done, and it now passes mwmhints variable directly to XGetWindowProperty() on exit clients are deparented in reverse order, as this has some advantages over the old method removed useless get_wm_transient_for() fixed wlist_end() segfaulting if current == NULL 0.0.50: fixed bug that would sometimes draw a little square in the topleft corner of the root window added support for motif move hint and motif resize hint schould be fixed too attempted to make enum statements in matwm.h more readable stacking now keeps the stacking order of clients, clients keeps them from oldest to newest - and client_number() lets you specify one of those to dig trough introduced "layer" member in client structure, wich defines the layer of the window (always on top, always on bottom etc) partial EWMH implementation if the CAN_MOVE or CAN_RESIZE bits are not set for a client, accordingly the buttons for that will no longer be grabbed 0.0.51: updated changelog @ 0.0.49 to state changelog was introduced then, and @ 0.0.50 the forgotten button grab stuff was added renamed CHANGELOG to ChangeLog to comply with what is appearantly tradition now maximise function takes ewmh_strut into account xo and yo members now save the offset of the window when it's mapped, so it can be (hopefully) restored propperly later on maximise and expand now check for CAN_MOVE and CAN_RESIZE bit implemented a bit more EWMH things maximise raises client given to it, not current all macros are replaced by functions to give the window's size and position wich are now rather dynamically calculated then stored changes in client size or position are now applied by calling client_update(), client_update_pos(), client_update_size() and client_update_title() functions added fullscreen state moved code around a bit creating a little more order removed comment that didn't make sence anymore no more warp to spawned windows, this fucks up some apps (xine) further EWMH implementation changed drag function to work with EWMH stuffs, also made it restore the client if it iconic fixed iconify_all function that broke when stacking and clients variables were separated 0.0.52: button_current initialized as None (how could i forget that) focus new windows on creation - expirimental, maybe schould be done only if none is focussed yet or click to focus is implemented focussing of topmost window after client dissapear fixed - look in stacking, not clients title is drawn to a pixmap that is the background for the title window, as this seems to redrawed way faster let X draw the border now, as this also redraws faster beause of changes makeing motif hints property notify response be broken, it was removed - i doubt any application uses it anyway so it is not worth the effort for now 0.0.53: fixed the very annoying bug in mouse warping introduced with previous version removed now obsolete references to client_draw_border() introduced functions for calculating the internal size of clients, wich makes stuff a little easyer with the border being around the window insit of in it now fixed window snapping - it did not yet use client_x() and client_y() to get window positions, wich obviously fucked up with expanded/maximised/fullscreened windows etc maximise, expand and fullscreen only work if CAN_MOVE and CAN_RESIZE are set for the client, like they schould (used to work as long as one of them was set) CAN_RESIZE will be removed from flags if maximum size and minimum size are equal 0.0.54: handling configurerequests no longer uses client_move() and client_resize(), but sets the coördinates and calls client_update() - so it does not reset state etc, the first 2 functions named are to be called if the user initiated the movement removed iconify on _NET_WM_SET_ACTIVE for current window - it is stupid and taskbar knows better apearantly removed focus on map, turns out to be annoying client_deparents puts windows where the new client_x() and client_y() functions say it is free title pixmap on client_remove() - how could i forget that 0.0.55: fixed bug that made clients with the title "" have fucked up titlebars fixed bug in updating the size of titles (buttons_update() was done after call to title_width(), had to be before it) only update ewmh state when nececarry @ move/resize same for client list taskbar and desktop no longer show up in task list, thanks to the new DONT_LIST flag fullscreen bit now set for desktop fullscreen windows resized on resolution change repairered ewmh strutting thing (confused top and right) _NET_DESKTOP_GEOMETRY now updated on root window resize 0.0.56: set wlist_with to initial value from wlist_update() instead of wlist_start (this makes way more sence i think) weird window list behaviour introduced with 0.0.55 fixed 0.0.57: virtual desktops _NET_REQUEST_FRAME_EXTENTS and _NET_FRAME_EXTENTS, hopefully handled and set in the right way 0.0.58: topleft, topright, bottomleft and bottomright key bindings now also contrain to the ewmh workspace removed things from todo list that were already done in previous releases introduced key action to make windows sticky _NET_WM_DESKTOP messages to root window understood, so pager can move windows to other desktops etc removed more dumb things from TODO XFreePixmap() in client_remove() now right under freeing name, for clarity clients_alloc() no longer fails on linusk if there are no clients left on exit clients are now reparented in better order (current desktop and sticky windows on top, under it all desktops from left to right order, then iconic windows) set input focus to root window on exit - this prevents some problems with clients that steal focus i hope 0.0.59: added key actions for always on top and stay below, also made them listen the apropiate ewmh hints get_ewmh_hints() now looks on wich desktop windows schould be several changes/additions here and there to make the above two possible ewmh_update_desktop() uses long for storing the data, as i think this is more correct 0.0.60: drag modes defined in enum statement set input focus to PointerRoot on exit, not root GrabModeAsync for keyboard, on mouse grabbing cleaned up the mess in events.c a bit prevent losing focus better, client_focus(NULL) now possible on hiding/removing client, focus is restored to topmost window instead of lowest one fixed redrawing of sticky windows when focussed/defocussed 0.0.61: renamed end() to quit(), schould now compile and run on dragonflybsd too set value of _NET_WM_ACTIVE_WINDOW to None if current == NULL, as specified by EWMH also check if window still exists in button_handle_event and drag_handle_event do not try to unfocus removed clients always show window id in debugging messages 0.0.62: update window list when clients iconified/restored/restacked 0.0.63: obey global configuration file /etc/matwmrc separate bits for horizontal and vertical maximalisation replaced client_maximise() and client_fullscreen() by client_toggle_state() ewmh maximise message can now do separate horizontal and vertical maximalisation added default key bindings for hoizontal and vertical maximise (using new h/v argument to maximise key action) intendation now done with tabs instead of spaces all horizontal/vertical stuff now also works for expand, and for both now l, r, t and b argument can be used to apply these actions in one of these directions 0.0.64: ewmh state only set to maximized if maximised to both directions replaced t and b arguments for maximise and expand with u and d (up and down) added my e-mail adress in the LICENCE file wrote a man page topleft, topright, bottomleft and bottomright key actions were replaced by new to_corner 0.0.65: updated TODO and BUGS concerning the introduction of the man page etc fixed deinstall target of Makefile a bit (man page schould be propperly deleted now) client_to_corner() also warps the mouse added a bit of info about virtual desktops in the manual page added raise and lower key action, added info about button and key actions for raising and lowering in man added information about the window list shown when next or prev key action is invoked in man resize drag tries to keep window corner under mouse cursor added checking for CAN_MOVE bit in client_to_border ~ in man page replaced by $HOME more detailed description of window list behaviour in man page replaced break statements in hande_event() with return DONT_LIST flag will also be respected for EWMH client list listen to NET_WM_STRUT if no NET_WM_STRUT_PARTIAL is there 0.0.66: prevent focus stealing - EWMH can still set other winows active then the one under the pointer, if this happens a click will fix that support for click-to-focus and click-raise minor changes and additions to the man page concerning the behaviour of the window list when leaving window list, first focus warp the mouse to the new window, then umap the window list - avoiding eventual enter event etc for the window under the window list fixed checking for modifiers keys left after key release in window list event handler introduced README file from now on MIT licence will be used support for EWMH NET_SHOWING_DESKTOP mode, and modified iconify_all to do the same thing moved sentence about iconifying windows to iconify part, it was wrongly placed with iconify_all description if there is a current desktop defined by an EWMH hint, go there (greater then the number of desktops will be threated as the last desktop) also clients that were on a desktop further then the last desktop will be put on the last one found and fixed serious bug that would cause matwm to forget about restoring windows from the first desktop if quitting while on another added info about how to exit matwm, and how it will restore windows at exit in the manual page restored old (0.0.5 - 0.0.48) changelog from e-mails 0.0.67: a few updates to the man page and readme file don't include anything from evn.c if DEBUG_EVENTS not defined made use of shape extention optional ICONIC windows no longer have their own desktop, but their own bit flag - to fix sticky added cast for current desktop value at XFree() in ewmh_initialize() fixed sticky windows (ICONIC is a bit flag again, no desktop), they will stay sticky after iconifying and restoring, dragging over the desktop edge and restarting the window manager don't go to sticky desktop if EWMH hint activates a sticky window update ewmh desktop of icons restored to another desktop if no windows are hidden for it still exit showing desktop mode get_ewmh_hints() renamed to ewmh_get_hints() added error checking for desktop count and border width in config files dc now is an unsigned integer, so up to 0xFFFFFFFF desktops are now supported 0.0.68: client_to_border() also raises the window don't try to map window list items at iconify, when not necessary don't focus desktops or taskbars previous claim was bs, only 0xFFFFFFFE desktops can be done as 0xFFFFFFFF would be the sticky desktop, do error checking for it leave previous value intact if errorous value set for border_width of desktops added modifier mask to disable snapping updated manual page about snapping also being for screen edges 0.0.69: ignore whitespace at end of config file lines avoid a few assertions in eat() that aren't necesarry at all str_key return NoSymbol if no key could be found instead of 0 if a key action doesn't make sence, don't grab the key don't grab mouse buttons if there is no mousemodmask grab buttons also for mousemodmask|nosnapmodmask if nosnapmodmask is there 0.0.70: fuck support for 0xFFFFFFFE desktops, it messed up support for 32bit platform NET_WM_WINDOW_TYPE things override other ewmh hints small correction to manual page 0.0.71: fixed overriding stuff by "none" key action and made keybinder use memory a little more efficient - do not allocate memory for keys that are later overridden 0.0.72: introduced client_focus_first() to focus the topmost visible window (called on enterevent for root window or window with DONT_FOCUS flag if no current window is there (in case the current window dissapeared), and on desktop change) client_clear_state() now used instead of twice the same code client_move() and client_resize() no longer return integer, was used nowhere as far as i know title_width renamed to client_title_width() introduced client_visible() function to replace a load of assertions removed seemingly obsolete or non-necessary initialisation of modifier masks in input.c (default configuration schould always be sane anyway - not makeing this foolproof as users can fuck it up badly anyway) added warning about default initialisation of things in default config being important for matwm to work in README 0.0.73: introduces CLICK_FOCUS and DESKTOP_LOCKED flags for better handling of special EWMH window types client_focus_first() stuff on EnterNotify, schould also work when click_focus is set 0.0.74: set _NET_WM_ALLOWED_ACTIONS more correctly focus newly created windows option (a click can refocus the window under the mouse) updated BUGS about click to focus desktop thing in last releaste added more details on the focus model into the man page if the current window dissapears focus the window that was focussed before that if there is one else the topmost one keep taskbar always on top optionally and lots of work to make this not interfere with fullscreen mode layer member of client structure is no longer acessed directly by most functions, new client_layer() function is used instead 0.0.75: allocate the right amount of memory in read_file() (was 1 byte too short) check if not trying to free a NULL pointer in key_bind() 0.0.76: configurenotify() uses functions from info.c to send data now - it used the client structure directly wich made it send faulty values client_move() and client_resize() also use the right functions to check if something has really changed client_clear_state() now sets x, y, width and height members of client structure as it schould and no more using current client instead of the one passed 0.0.77: only spaces in default config, no tabs (they fuck up if tabstop is different then mine) same for Makefile (where apropriate), 1 tab instead of 2 for intendation moveresize client window in client_update(), this fixes maximising/expanding/fullscreening openoffice.org and perhaps some other applications fixed client_focus_first() on desktop change