1999-12-20  John Harper  <john@dcs.warwick.ac.uk>

	* images.c (image_sweep): use Imlib_kill_image () instead of
	Imlib_destroy_image () (turns off image caching, but not
	image sharing)

1999-12-19  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.20

1999-12-17  John Harper  <john@dcs.warwick.ac.uk>

	* commands.c (Fcommandp): fixed for current autoload format

1999-12-15  John Harper  <john@dcs.warwick.ac.uk>

	* functions.c (Fgrab_pointer): revert to using
	owner_events=False, it stops annoying focus flickers

	* keys.c (translate_event_to_x_button): fix typo (pointed out
	by Hamish Macdonald <hamishm@lucent.com>)

1999-12-14  John Harper  <john@dcs.warwick.ac.uk>

	* images.c (make_image): when adding to rep_data_after_gc,
	try to include the Imlib allocated data

1999-12-13  John Harper  <john@dcs.warwick.ac.uk>

	* windows.c (add_window): call send_synthetic_configure ()
	after placing the window

	* functions.c (Fdisplay_message): allow color names in
	foreground and background atttributes, not just color objects

	* frames.c (list_frame_generator): when client_unmapped changes
	and the window is focused, refocus it

1999-12-12  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.19

	* events.c (motion_notify): don't compare the event window with
	the button-press window; just use the saved context map from
	the actual button-press event
	(button_press): only use the context map if the part is
	currently clicked; forcible ungrab the pointer after all button
	release events

	* frames.c (frame_part_destroyer): if we unclick a frame part,
	ungrab the pointer as well

	* functions.c (Fgrab_pointer): grab with owner_events=True

	* functions.c (Fdisplay_message): new attribute `spacing',
	space between each line of text

	* events.c (handle_input_mask): preserve current_x_event and
	current_event_window in case of recursive calls

	* events.c (Qenter_frame_part_hook, Qleave_frame_part_hook):
	new hooks, called when the pointer enter a frame part, two args
	(WIN CLASS)

	* frames.c (Fframe_part_get): new function, get frame part
	properties (part is found by window and class)

	* frames.c (frame_part_exposer): only allow expose events to
	override the frame_draw_mutex when the server isn't grabbed

	* functions.c (Fserver_grabbed_p): new function

1999-12-11  John Harper  <john@dcs.warwick.ac.uk>

	* sawmill-ui.jl: i18n for all natural language strings

1999-12-10  John Harper  <john@dcs.warwick.ac.uk>

	* cursors.c (Fget_cursor): can now create cursors from two
	normal X bitmaps (image and mask) and two colours. Call with an
	argument [IMAGE-NAME MASK-NAME FG BG]
	(Frecolor_cursor): new function

	* images.c (make_bitmap): new function (scans image-load-path)

	* functions.c (Fgrab_pointer): if the CURSOR argument is
	non-nil, but not a cursor, call Fget_cursor () on it

1999-12-09  John Harper  <john@dcs.warwick.ac.uk>

	* gradient.c (Fdraw_diagonal_gradient): the gradient now scales
	linearly for all lines parallel to that connecting the top-left
	and bottom-right corners (from Chris Hanson <cph@zurich.ai.mit.edu>)

	* images.c (Fbevel_pixel): new optional parameter BEVEL-PERCENT
	(from Chris Hanson <cph@zurich.ai.mit.edu>)
	(Qdefault_bevel_percent): new variable, default for above
	parameter

	* events.c (map_request): reinstate the code to iconify a
	window if it's initial state is IconicState (why did I ever
	remove it!?)

1999-12-08  John Harper  <john@dcs.warwick.ac.uk>

	* keys.c (Fforget_button_press): new function, forgets about
	any remembered button press (for calculating click2's etc)

1999-12-07  John Harper  <john@dcs.warwick.ac.uk>

	* frames.c (list_frame_generator): fix crash when font is
	defined as nil

	* sawmill-ui.jl (match-window:edit): added a `Grab..' button to
	each matcher

	* sawmill-ui.jl (i18n-filename): fixed typo (from Jesus Bravo
	Alvarez <jba@pobox.com)

1999-12-05  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.18

	* sawmill-ui.jl (build-color): create buttons containing a
	preview of the color, not just its name

1999-12-03  John Harper  <john@dcs.warwick.ac.uk>

	* windows.c (add_window): always set the `placed' property
	before exiting

	* keys.h, keys.c: support Hyper modifier, prefix `H-'

	* frames.c (set_frame_part_bg): fixed a bug when tiling shaped
	frame parts, removed the spurious clipping code
	(refresh_frame_part): handle the dimensions checking here
	instead of in set_frame_part_{bg,fg}

	* windows.c (Fset_input_focus): removed the hack of unfocusing
	before refocusing, it causes too much redrawing when focusing
	on the currently focused window

1999-12-02  John Harper  <john@dcs.warwick.ac.uk>

	* sawmill-ui.jl: new match-window property type `pair', a pair
	of integers

	* sawmill-ui.jl: look for README.LC (LC == language code) files
	in theme ui; mostly from Yukihiro Nakai
	<nakai@internetsolutions.co.jp>

1999-12-01  John Harper  <john@dcs.warwick.ac.uk>

	* sawmill-ui.jl: added `match-window' widget for editing the
	match-window-profile variable

	* events.c (Fquery_button_press_window): new function, tries to
	return the window that the button was pressed in (when in the
	middle of a press-release sequence)
	(motion_notify): only look for frame-part context maps when the
	window that the mouse is currently over is the same window as
	when the button was originally pressed

	* keys.c (lookup_event_binding): call
	Fquery_button_press_window () when evaluating a mouse event to
	find the window whose `keymap' property should be searched

	* sawmill-ui.jl: the `set' type is now called `symbol'

1999-11-29  John Harper  <john@dcs.warwick.ac.uk>

	* functions.c (Fwarp_cursor_to_window): deleted, now in lisp

	* windows.c, session.c, main.c, keys.c, images.c, functions.c,
	frames.c, fonts.c, events.c, cursors.c, commands.c, colors.c:
	changed embedded doc strings

	* functions.c (Fdisplay_message): new function, replaces
	Fshow_message, only takes two args a (multi-line) string, and
	an alist of attributes
	(Fshow_message): deleted, now in lisp

	* events.c (map_request): if the window isn't visible, then
	call map-notify-hook manually
	(unmap_notify): recognize synthetic unmap events (for when the
	window isn't currently visible), and delete WM_STATE property
	afterwards

1999-11-28  John Harper  <john@dcs.warwick.ac.uk>

	* windows.c (remove_window): check that the focus hasn't got
	lost somehow; if it has refocus the last-focused window, or the
	invisible input window

	* version 0.17

1999-11-27  John Harper  <john@dcs.warwick.ac.uk>

	* keys.c (translate_event_to_x_button, grab_event,
	ungrab_event): fixed bug when grabbing buttons with AnyModifier
	_and_ a specific button

	* client.c (completion_generator): pass the boundp predicate
	when remotely calling apropos

	* windows.c, images.c, fonts.c, cursors.c, colors.c: remember
	to add to rep_data_after_gc after allocating lisp data

1999-11-26  John Harper  <john@dcs.warwick.ac.uk>

	* windows.c (Fwindow_size_hints): added window-gravity field
	(Fwindow_border_width): new function
	[both mostly from merlin <merlin@merlin.org>]

1999-11-25  John Harper  <john@dcs.warwick.ac.uk>

	* windows.c, session.c, server.c, sawmill-ui.jl,
	sawmill-menu.jl, frames.c, events.c, commands.c: updated for
	single namespace and scheme-like function semantics

1999-11-19  John Harper  <john@dcs.warwick.ac.uk>

	* functions.c (Fgetpid): deleted, use (process-id) instead

	* sawmill-ui.jl (documentation): call _ on any documentation
	(on the wm)

	* main.c (usage): added --disable-nls option

1999-11-17  John Harper  <john@dcs.warwick.ac.uk>

	* Makefile.in: set REP_GTK_DONT_INITIALIZE=1 when compiling
	scripts

	* events.c (map_request): only map the client window if it's
	client_unmapped bit is clear

	* windows.c (Fhide_window, Fshow_window): only map/unmap the
	frame if it exists

	* keys.c (lookup_event_binding): if a mouse event, _never_
	look in the focus window by default

1999-11-15  John Harper  <john@dcs.warwick.ac.uk>

	* windows.c (Fset_window_frame): each window frame must be a
	closure of a list, not just a list
	* frames.c (set_frame_part_bg, set_frame_part_bg,
	list_frame_generator): activate the frame's closure before
	doing anything

1999-11-12  John Harper  <john@dcs.warwick.ac.uk>

	* images.c (Fbevel_image): patch from Scott Sams
	<sbsams@eos.ncsu.edu> to fix some calculation errors

1999-11-11  John Harper  <john@dcs.warwick.ac.uk>

	* sawmill-ui.jl (build-color:clicked): remove left over comma
	from old backquoting

1999-11-10  John Harper  <john@dcs.warwick.ac.uk>

	* main.c (main): Fload () has five arguments now

	* windows.c (Fstacking_order): fix memory leak (memprof rules!)

	* windows.c, sawmill-ui.jl, sawmill-menu.jl, main.c, keys.c,
	images.c, functions.c, frames.c, fonts.c, flippers.c, events.c,
	display.c, commands.c, colors.c: updated for lexically scoped
	rep

1999-11-07  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.16

1999-11-06  John Harper  <john@dcs.warwick.ac.uk>

	* windows.c (Fget_window_by_id): new function

1999-11-05  John Harper  <john@dcs.warwick.ac.uk>

	* windows.c (Fset_input_focus): call focus_on_window (0) before
	focusing the given window, seems to help transfer the focus
	when called after grabbing the keyboard

1999-11-04  John Harper  <john@dcs.warwick.ac.uk>

	* sawmill-ui.jl (build-pages): if a notebook, make it
	scrollable and enable the popup menu

	* events.c (property_notify): use XGetWMNormalHints instead of
	XGetNormalHints when WM_NORMAL_HINTS changes

1999-11-01  John Harper  <john@dcs.warwick.ac.uk>

	* windows.c (Qafter_framing_hook): new hook, called after both
	set-window-frame and rebuild-frame

	* sawmill.h (POINTER_GRAB_EVENTS): use PointerMotionMask
	instead of ButtonMotionMask

1999-10-31  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.15

	* keys.c (translate_event_to_x_button): don't ignore non Click1
	events

	* events.c (key_press, button_press, motion_notify): when a
	grab is in effect, and there may be more events from it, use
	the Sync(Pointer|Keyboard) argument to XAllowEvents ()

	* sawmill.h (POINTER_GRAB_EVENTS): new #define, the events to
	select from pointer grabs
	* keys.c, functions.c: use POINTER_GRAB_EVENTS when grabbing

1999-10-30  John Harper  <john@dcs.warwick.ac.uk>

	* sawmill-ui.jl (build-frame-style:update-readme): themes in
	tar files are now expected to have a top-level directory with
	the same name as the theme

1999-10-29  John Harper  <john@dcs.warwick.ac.uk>

	* frames.c (list_frame_generator): maybe fix a bug when
	Fget_font returns rep_NULL

	* sawmill-ui.jl (build-keymap-shell): improved some gtk packing
	parameters

	* sawmill-menu.jl (create-menu): call
	gtk-widget-lock-accelerators on each menu item if the function
	is available

1999-10-28  John Harper  <john@dcs.warwick.ac.uk>

	* dlmalloc.c: support FreeBSD sbrk ()

	* libclient.c (unix_server_init): add one to the length
	argument to connect ()

	* keys.c (search_keymap): fix matching EV_MOD_ANY events when
	other modifiers are also specified

1999-10-27  John Harper  <john@dcs.warwick.ac.uk>

	* events.c (synthesize_button_release): function to be called
	when ungrabbing the pointer
	* functions.c (Fungrab_pointer): call synthesize_button_release

	* events.c (Fquery_last_pointer): replaced this function by
	Fquery_button_press_pointer, instead of returning the last but
	one mouse position, return the position at the last ButtonPress
	event. This helps us work-around problems when MotionNotify
	events are received without an immediately preceding ButtonPress

	* windows.c (Fwindow_id): return nil if the client window has
	been deleted
	(Fwindow_frame_dimensions): call Fwindow_dimensions if the
	window is currently unframed

	* events.c (property_notify): update cached WM_TRANSIENT_FOR
	property when it changes

1999-10-26  John Harper  <john@dcs.warwick.ac.uk>

	* client.c (main): fix realloc bug

1999-10-25  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.14.2

	* functions.c (Fdelete_window): reinterrogate the window's
	WM_PROTOCOLS property in case it set WM_DELETE_WINDOW after
	being mapped

	* functions.c (Qafter_restacking_hook): new hook, called
	whenever the stacking order is explicitly altered

	* functions.c (Fshow_message): use a local event handler for
	better data hiding

	* events.c (register_event_handler, deregister_event_handler):
	new functions, allow window-local event handlers to be created

	* flippers.c: new plugin, provides the mechanism for viewport
	edge-flipping (hooks enter-flipper-hook and leave-flipper-hook)

	* version 0.14.1

	* functions.c (Fsend_client_message): bug fix from Ricardo R.
	Massaro <massaro@ime.usp.br>

1999-10-24  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.14

	* sawmill-ui.jl (documentation): redefine this standard
	function to get the doc string from the window manager process

	* events.c (shape_notify): call shape-notify-hook

1999-10-23  John Harper  <john@dcs.warwick.ac.uk>

	* windows.c (install_window_frame): call restack_frame_parts
	* frames.c (restack_frame_parts): new function

1999-10-22  John Harper  <john@dcs.warwick.ac.uk>

	* frames.c: expose events override the frame-draw-mutex

	* windows.c (manage_windows): call after-iniitialization-hook
	after adopting all windows

	* client.c (completion_generator): added basic readline symbol
	completion; doesn't differentiate between variables and
	functions

	* server.h, server.c, libclient.c: create sockets in
	`/tmp/.sawmill-USER/DPY' to try and prevent /tmp exploits

	* sawmill-menu.jl (popup-menu): new optional arg POSITION

	* events.c (Fclicked_frame_part, Fclicked_frame_part_offset,
	Fclicked_frame_part_dimensions): new functions

	* events.c, functions.c (configure_request, Fmove_window_to,
	Fresize_window_to): call window-moved-hook and
	window-resized-hook as appropriate

1999-10-20  John Harper  <john@dcs.warwick.ac.uk>

	* sawmill-menu.jl (popup-menu): new optional arg TIMESTAMP

	* events.c (Fx_server_timestamp): new function

	* server.h, server.c, libclient.c: unix-domain socket is now
	`/tmp/.sawmill-DPY' since there have been problems with
	network-mounted home directories

	* events.c (property_notify): update w->hints when
	WM_NORMAL_HINTS changes

1999-10-18  John Harper  <john@dcs.warwick.ac.uk>

	* functions.c, events.c: added debugging output for X
	timestamps and [un]grabbing functions

1999-10-17  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.13

	* sawmill-ui.jl (build-frame-style:update-readme): handle
	themes stored in tar files

1999-10-16  John Harper  <john@dcs.warwick.ac.uk>

	* images.c (Fmake_image): support loading non-local images (by
	copying to a temporary file)

1999-10-14  John Harper  <john@dcs.warwick.ac.uk>

	* events.c (Fx_events_queued): new function

	* windows.c (Fhide_window): go back to old method of not
	unfocusing when hidden window has focus

	* windows.c (add_window): set the `mapped' bit (so that it's
	set when hooks are called)

	* session.c (save_yourself): ignore SmSaveGlobal requests

	* events.c (handle_input_mask): don't set last_event_time to
	CurrentTime before exiting (this may cause server
	race-conditions when using recursive edits)

1999-10-13  John Harper  <john@dcs.warwick.ac.uk>

	* main.c (main): handle --version option; provide usage
	function to rep_init ()

1999-10-12  John Harper  <john@dcs.warwick.ac.uk>

	* events.c (actual_last_event_time): the real last timestamp
	from the server

	* frames.c (set_frame_part_bg): fix image tiling

	* frames.c (Qhighlight_when_unfocused): new option, only
	highlight frame parts in unfocused windows when this is set
	non-nil

	* display.c, libclient.c (canonical_display): handle unix:0
	displays
	(canonical_host): map host name to lowercase

	* keys.c (translate_event_to_x_key): handle shifted keys (i.e
	things like C-C) correctly

	* colors.c (Fget_color_rgb): fix bug when scanning list of
	previously allocated colors (accepting non-matching color)
	(Fget_color): use XParseColor instead of XLookupColor

1999-10-11  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.12.2

	* frames.c (set_frame_part_fg): if fg needs to be updated, but
	bg hasn't recently been redrawn, redraw bg to clear fg

	* version 0.12.1

	* frames.c (list_frame_generator): after freeing the gc
	(unviewable part) zero its pointer

1999-10-10  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.12

1999-10-09  John Harper  <john@dcs.warwick.ac.uk>

	* events.c (focus_in, focus_out): ignore events with detail
	NotifyPointer

1999-10-08  John Harper  <john@dcs.warwick.ac.uk>

	* frames.c (set_frame_shapes): new function, construct the
	frame shape from the union of all individual shapes
	(set_frame_part_bg): draw the background manually, instead of
	setting it as the window background and letting the X server do it
	[these changes fix the infamous ``jerky pointer while changing
	focus'' bug, also the `unshaped' property has been removed]

	* windows.c (set_window_shape): deleted
	* events.c (shape_notify): call set_frame_shapes not
	set_window_shape

	* keys.c (lookup_binding): when event is from no_focus_window,
	search the root-window-keymap

	* windows.c (before_local_map, after_local_map): new method of
	ignoring locally-generated map/unmap/reparent notify events;
	should remove all race conditions (!). The method is to grab
	the server, unselect the StructureNotifyMask on the window, do
	the request, then reselect events and ungrab

	* windows.c, frames.c: use before_local_map and after_local_map

	* events.c (map_notify, unmap_notify, reparent_notify): removed
	all code attempting to ignore locally-generated events

	* sawmill.h (Lisp_Window): removed the `reparenting',
	`local_maps' and `local_unmaps' fields

	* functions.c (Fgrab_server, Fungrab_server): don't bother
	hijacking the message function; Fgrab_server calls XSync
	instead of XFlush to guarantee the server actually is grabbed
	on return

1999-10-07  John Harper  <john@dcs.warwick.ac.uk>

	* display.c, libclient.c (canonical_display): canonicalise any
	given hostname (i.e. tizer:0 => tizer.dcs.warwick.ac.uk:0.0)

	* events.c, display.c (destroy_notify, error_handler): don't
	set focus_window = 0, if the current window is destroyed,
	instead let remove_window () or emit_pending_destroys () call
	focus_on_window (0) when necessary
	* windows.c (remove_window, emit_pending_destroys): call
	focus_on_window (0) when we think the destroyed window is
	currently focused

	* server.c (server_init): when binding, add one to the size of
	the address (for the terminating null character)

1999-10-05  John Harper  <john@dcs.warwick.ac.uk>

	* sawmill.h (struct frame_part): new bit `below_client'
	* frames.c: recognize `(below-client . t)' attribute in frame
	part, when set, the part's window is kept _below_ the client

	* windows.c (remove_window): release passive grabs

	* client.c: include readline support from Christopher P Goller
	<goller@eng.utah.edu>

	* version 0.11

	* events.c (focus_in): if focus is passed to the root window,
	focus on our unviewable window

	* windows.c (focus_on_window): go back to using RevertToParent

1999-10-04  John Harper  <john@dcs.warwick.ac.uk>

	* functions.c (Fdelete_window): return to using XKillClient
	instead of XDestroyWindow when WM_DELETE_WINDOW isn't available

	* keys.c, functions.c: when using the x_win_from_arg function,
	being unable to find a window xid is only an error if we
	weren't passed a window object (gracefully handle windows being
	closed while their handles are in use)

	* sawmill.h (struct frame_part): added a field `drawn'; a
	structure defining the last-drawn contents
	* frames.c: try to optimize frame-part redisplay as much as
	possible, only update fg/bg when they're different to the
	currently displayed data

1999-10-03  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.10

	* windows.c (Fhide_window): if the hidden window has the focus,
	call focus_on_window (0)

	* windows.c (focus_on_window): use RevertToNone instead of
	RevertToParent

	* frames.c (reset_frame_parts): redraw any frame parts whose
	state changes

	* events.c (Fcurrent_event_window): moved here from keys.c,
	this now takes an (undocumented) optional argument, the window
	to return for the duration of evaluating this event

	* events.c (reparent_notify): handle case where we're not doing
	the reparenting--unadopt the window and reissue the reparent
	request

1999-10-02  John Harper  <john@dcs.warwick.ac.uk>

	* server.c (server_init): chmod the socket to rwx------

1999-10-01  John Harper  <john@dcs.warwick.ac.uk>

	* frames.c (list_frame_generator): when hide-client is set,
	ensure that the client window ends up unmapped

	* windows.c (focus_on_window): don't focus unmapped client
	windows, focus the frame instead (so its state changes)

	* sawmill.h (Lisp_Window): new bits: `client_hidden' and
	`client_unmapped'. Used to allow the client to be unmapped
	while its shaded. Added integers `local_maps' and
	`local_unmaps': the number of expected notify events

	* events.c (map_notify, unmap_notify): look at the local_maps
	and local_unmaps fields

	* windows.c (Fhide_window, Fshow_window): set the
	client_unmapped bit, and use local_[un]maps instead of the
	event mask

	* sawmill-ui.jl (build-keymap-shell): added a `Grab key' button

1999-09-30  John Harper  <john@dcs.warwick.ac.uk>

	* main.c (exit_code): variable replacing the old jmp_buf exit
	method; set the variable to an exit code then call Fquit ()
	* session.c (die): use the new exit method

	* frames.c (set_frame_part_fg): remember to tell the event loop
	that there may be X events read but not handled (Imlib..)

	* libclient.c, libclient.h: abstracted the guts of client.c,
	providing a better interface
	* client.c: call the client_ functions in libclient.o

1999-09-29  John Harper  <john@dcs.warwick.ac.uk>

	* client.c: added back the old unix domain code, if this can't
	make a connection, then try the X property based server
	* server.c, server.h: reprieved, enabled by default now, but
	write sockets as ~/.sawmill/.unix-CANONICAL-DISPLAY

	* display.c (Qcanonical_display_name): new variable, display
	name with fq hostname and screen number

	* functions.c (Fget_x_text_property, Fset_x_text_property): new
	functions

	* events.c (property_notify): for WM_NAME and WM_ICON_NAME
	properties, only refresh the frame or call the hook if the
	value of the property _actually changed_

	* sawmill.h (Lisp_Color): removed the `name' field

	* colors.c (Fget_color_rgb): new function; get a color
	specified by its RGB values

	* images.c (Fget_image_shape_color, Fset_image_shape_color):
	new functions, gets/sets the color of the transparent pixels

1999-09-28  John Harper  <john@dcs.warwick.ac.uk>

	* keys.c (search_keymap): allow things like `Any-C-x' to work;
	this looks for a `C-x' event plus any other modifiers

	* session.c: if HAVE_X11_SM_SMLIB_H isn't defined, don't do any
	session management

	* windows.c (Fwindow_wants_input_p): new function, returns the
	input field of a window's WM_HINTS property

	* frames.c (set_frame_part_bg): when checking if the part
	overlaps the client, do it correctly

1999-09-27  John Harper  <john@dcs.warwick.ac.uk>

	* windows.c (remove_window_frame): only remove windows from
	the save-set if the client window was unmapped by its owner

	* display.c (error_handler): ignore errors where resourceid is
	zero, and don't print unrecognized errors, they're just
	annoying..

	* sawmill.h (WINDOWP): now the same as XWINDOWP; i.e. we don't
	care whether or not the client has disappeared (which was
	causing more problems than it solved)

	* windows.c (Fhide_window, Fshow_window): unmap the client
	window when it's hidden (by law of the ICCCM)

	* frames.c (list_frame_generator): raise each frame part
	window as it's created/reconfigured

1999-09-26  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.9

	* display.c (sys_init): set the display-name variable to the
	display we opened (or a null string if in batch-mode)

	* events.c (map_notify): check if the window set its
	override_redirect attribute to True while it was unmapped, if
	so un-adopt the window

1999-09-25  John Harper  <john@dcs.warwick.ac.uk>

	* events.c (handle_input_mask): ignore NoExpose and
	GraphicsExpose events

	* sawmill-ui.jl (build-file): new widget `file-name' for
	selecting files

	* frames.c, windows.c (list_frame_generator,
	install_window_frame): client window is always left beneath any
	overlapping frame parts

	* frames.c (set_frame_part_fg, list_frame_generator): the
	`foreground' frame part property may now be an image (or list
	of images), it's drawn into the part, respecting any defined
	justification, but with no scaling or tiling

1999-09-24  John Harper  <john@dcs.warwick.ac.uk>

	* frames.c (set_frame_part_bg): when a shaped image is placed
	(at all) inside the client window, apply the shape mask to the
	frame part's window, not to the frame's window [this may
	conflict with shaped client windows?]

	* images.c (Ftile-image): fix bug when src image is vertically
	smaller than dest image

	* events.c (configure_request): when a client asks to be moved,
	factor in the frame offset if it's reparented

1999-09-23  John Harper  <john@dcs.warwick.ac.uk>

	* keys.c (translate_event): fix bug where X server reports that
	it has a keysym at index 1 as well at index 0, even when
	xmodmap disagrees, and the keysyms are the same (XKB extension
	on XFree86)

	* sawmill-ui.jl (build-keymap): fix cancel/revert problem

	* sawmill-ui.jl (build-keymap): new button: copy

	* sawmill-ui.jl: improved the bindings widget, try to remove
	the annoying jitter when selected list items

	* session.c (Fsm_connect, Fsm_disconnect): new functions.
	Connection with the session manager is now removed from the
	actual initialisation process. The lisp code will call
	sm-connect at the right time

1999-09-21  John Harper  <john@dcs.warwick.ac.uk>

	* colors.c (Fget_color): allocate all colors using
	Imlib_best_color_match (); this makes no difference using
	TrueColor or DirectColor visuals but should help on PseudoColor
	(i.e. 8 bit) visuals
	* sawmill.h (Lisp_Color): removed the XColor struct, just
	inline the three rgb values and the pixel color

	* main.c (main): call images_init () before colors_init (),
	since colors.c using Imlib

	* images.c, gradient.c, functions.c, frames.c: changes for new
	color type

	* frames.c (list_frame_generator): fix seg fault where either
	Fget_font () or Fget_color () returns an error

1999-09-20  John Harper  <john@dcs.warwick.ac.uk>

	* keys.c (event_proxy_fun): deleted
	(lookup_event_binding): new function, used by eval_input_event
	and Flookup_event_binding, it finds the window to search in,
	then calls lookup_binding

1999-09-19  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.7

1999-09-18  John Harper  <john@dcs.warwick.ac.uk>

	* keys.c (find_meta): if alt_mod is unset, set it to meta_mod
	(i.e. similarly to for meta_mod)
	(Qalt_keysyms, Qmeta_keysyms): variables showing which keysyms
	generate the two virtual modifiers

1999-09-17  John Harper  <john@dcs.warwick.ac.uk>

	* frames.c (list_frame_generator): try to prevent weird shaped
	frames being created for very small client windows. The rule is
	that if a frame part's position is specified by a single edge,
	and it overlaps the opposite edge of the client window, then
	truncate the part to that edge. This still isn't perfect, but
	at least the border is always correct

1999-09-16  John Harper  <john@dcs.warwick.ac.uk>

	* keys.c: added Mod5 to list of accepted modifiers

	* events.c (key_press): evaluate KeyRelease events again

	* functions.c (Fgrab_keyboard, Fungrab_keyboard): new functions

	* keys.h: EV_MOD_RELEASE extra modifier bit to mark KeyRelease
	events from KeyPress events
	* keys.c: removed the long methods of specifying modifiers
	(Veval_modifier_events, Veval_key_release_events): new 
	options, control whether we evaluate these abnormal events

	* functions.c (Fwarp_cursor_to_window): unless coordinates are
	given, warp relative to top-left corner of the frame. If coords
	are given, they are relative to the client window

	* functions.c (Fgrab_pointer): accept a nil window, and
	fallback to grabbing on the root if the specified window is
	unviewable

1999-09-15  John Harper  <john@dcs.warwick.ac.uk>

	* frames.c (Qoverride_frame_part_classes): new variable,
	similar to Qframe_part_classes but with higher precedence than
	the frame definition itself

	* session.c, main.c, functions.c, frames.c, commands.c,
	alloca.c: try to support C_ALLOCA and other variants

	* windows.c (emit_pending_destroys): abort if a lisp interrupt
	occurs

	* frames.c (set_frame_part_bg): rearrange how shaped images are
	handled -- it's imperative that the frame must _always_ retain
	the union of the old and new shapes, unfortunately this means
	that we need to make a copy of the original frame shape..

1999-09-14  John Harper  <john@dcs.warwick.ac.uk>

	* commands.c (Fcall_command): changed `f', `w' and `W'
	interactive codes to `%f', `%w' and `%W'. `%' is now reserved
	for app-local codes

	* functions.c (Fshow_message): new optional arg POS; defines
	the position of the message window on the screen

	* windows.c (window_sweep): preserve the order of window_list

1999-09-13  John Harper  <john@dcs.warwick.ac.uk>

	* windows.c (Fwindow_framed_p): new predicate

	* keys.c (translate_event_to_x_button): if no button is
	specified, but mod_any is set, then return AnyModifier and
	Button1 (which should be ignored)
	(grab_event, ungrab_event): support AnyModifier correctly

	* functions.c (Fdelete_window, Fdestroy_window): never use
	XKillClient, just XDestroyWindow

1999-09-12  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.6

	* windows.c (pending_destroys): new variable, the number of
	destroyed windows whose hooks haven't been called
	* windows.c, functions.c, events.c, display.c: call
	emit_pending_destroys () after round-trip X requests, try to
	minimize the time between a window dieing and its
	destroy-notify-hook being called

1999-09-11  John Harper  <john@dcs.warwick.ac.uk>

	* cursors.c (Fcursorp): new function

	* windows.c (set_window_shape): if updating a shaped window
	with no frame, just use a single ShapeSet operation, not a
	ShapeSet followed by a ShapeUnion (fixes the flashing gmc icons
	bug)

1999-09-10  John Harper  <john@dcs.warwick.ac.uk>

	* images.c (Fimagep): new function
	(bevel_pixel): increase the bevel multiplier from 0.5 to 0.75

	* windows.c (window_mark_type): ensure that closed windows
	which haven't had destroy-window-hook called aren't collected

	* frames.c: new frame part properties: `class' and `removable',
	new window property `removed-parts'
	(get_keymap_for_frame_part): new function

	* events.c (key_press): don't look for a frame part keymap
	(button_press, motion_notify): call get_keymap_for_frame_part

1999-09-09  John Harper  <john@dcs.warwick.ac.uk>

	* keys.c, keys.h: added `click3' event

	* frames.c (frame_part_destroyer): if any of the frame parts
	are clicked, make sure that clicked_frame_part gets cleared

	* frames.c, windows.c: added a new window property
	`hide-client', when non-nil the client window won't be visible
	(call rebuild-frame after setting for it to take effect)

	* keys.c: removed hashed keymaps (vectors), just lists of
	bindings now
	(Fbind_key, Funbind_key): bindings no longer nest

	* sawmill-ui.jl (build-number-entry): use spin-buttons for
	entering numbers

	* events.c (property_notify): fixed this function

1999-09-08  John Harper  <john@dcs.warwick.ac.uk>

	* sawmill.h (Lisp_Window): store window and icon names as lisp
	strings
	* events.c, windows.c: handle lisp string names, fix some
	memory leaks

	* sawmill-ui.jl: added --socket-id option to allow the ui to be
	embedded in the gnome control center. This also disables the
	ok/cancel/etc buttons and enables a hacky protocol on
	stdin/stdout

1999-09-07  John Harper  <john@dcs.warwick.ac.uk>

	* frames.c (destroy_window_frame): new arg, whether or not to
	delete the top-level frame window or not
	(list_frame_generator): handle building a new frame into an old
	top-level window

	* windows.c (Fset_window_frame): don't delete the parent frame
	window, this prevents having to reparent the client back to the
	root, and in turn prevents all flickering

	* sawmill-ui.jl (ui-quit): tell the wm to save the custom file
	before exiting

	* images.c (Ftile_image): new function

	* sawmill-ui.jl: changed the architecture, instead of the wm
	connecting with the configurator, make the configurator connect
	with the wm (using sawmill-client); re-enabled the "revert"
	button

	* sawmill.h (Lisp_Window): added `destroyed' bit
	* windows.c (emit_pending_destroys): call destroy-notify-hook
	where it's required
	* events.c (destroy_notify): only call hook if it's not already
	been called
	(handle_input_mask): call emit_pending_destroys after each event
	* display.c (error_handler): mark that may be input pending on
	the X connection (so that the event loop will call
	emit_pending_destroys)

	* windows.c (install_window_frame, remove_window_frame): handle
	adding and deleting from the save-set here (so that unmapped
	but not destroyed windows are removed from it)

1999-09-06  John Harper  <john@dcs.warwick.ac.uk>

	* sawmill-ui.jl (build-frame-style:update-readme): strip
	trailing whitespace from the README file

	* functions.c (Fshow_message): don't set save_under and
	backing_store in the message window--they slow down opaque
	window movement on XFree86..

	* windows.c, images.c, fonts.c, cursors.c, colors.c: define rep
	comparison functions for these types, I'd forgotten that they
	couldn't just be null pointers

	* display.c (error_handler): don't call destroy-notify-hook
	since it might generate X protocol requests (not allowed)

	* frames.c (Fframe_state_mutex): when this variable is non-nil,
	entering or leaving a frame-part's window won't affect its
	state. As a hack, if you set this to `clicked' the frame part's
	state will be set clicked (this is needed because LeaveNotify
	events seem to be able arrive before the MotionNotify events
	causing them)

	* events.c (enter_notify, leave_notify): don't change
	frame-part state if frame_state_mutex is set

	* keys.c (Fallow_events): new function, wrapper for
	XAllowEvents
	(grab_event): all active grabs now use GrabModeSync

	* events.c (button_press, key_press): call XAllowEvents
	with AsyncPointer or AsyncKeyboard after handling the event,
	since active grabs are now synchronous

	* events.c (focus_in): only handle the event if the window is visible

	* windows.c (find_window_by_id): print less debugging info

1999-09-05  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.5

1999-09-04  John Harper  <john@dcs.warwick.ac.uk>

	* sawmill-ui.jl (frame-style): new widget type

	* functions.c (Fshow_message): new function, displays a
	specified string in the middle of the screen
	* events.c (expose): recognize when the message_win is exposed
	* main.c (main): call functions_kill

	* frames.c (frame_part_focuser): deleted since it's exactly the
	same as refresh_frame_parts ()

	* session.c (session_init): only try to connect if
	SESSION_MANAGER is set in the environment

1999-09-03  John Harper  <john@dcs.warwick.ac.uk>

	* windows.c (add_window): only call place-window-hook if (as
	well as not being in initialisation) the `placed' property of
	the window isn't set
	(Fwindow_group_id): check that w->wmhints isn't a null pointer

	* session.c: the C portion of session management -- very minimal
	* sawmill.h (enum exit_codes): new member `ec_session_died'

	* main.c (Qsaved_command_line_args): new variable, contains the
	pristine command line arguments. Provides the arguments to
	exec() when restarting

	* functions.c (Fgetpid): new function, should be in librep,
	needed for session management

	* main.c (Qsaved_command_line_args): new variable, a list
	containing the unmodified args

1999-09-02  John Harper  <john@dcs.warwick.ac.uk>

	* functions.c (Fx_raise_window): wrapper for XRaiseWindow ()

	* version 0.4

	* events.c (client_message): even if we can't find a client
	window object for the event, still pass it through the hook

	* gtk-style.c: helper program for `gtk' theme. Outputs the
	default GTK style as an s-expression

	* frames.c (refresh_frame_parts): new function

	* windows.c (Frebuild_frame): new function

	* images.c (Fclear_image): new function

1999-09-01  John Harper  <john@dcs.warwick.ac.uk>

	* images.c (Fmake_sized_image): replaced the three pixel colors
	by one color object

	* frames.c: added a `render-scale' attribute, allows the buffer
	size of parts rendered on the fly to be reduced
	* sawmill.h (struct frame_part): added render_scale field

	* images.c (Fbevel_image): new function

1999-08-31  John Harper  <john@dcs.warwick.ac.uk>

	* frames.c: new attribute in frame part alists: `renderer', a
	function called with args (IMAGE STATE). It should draw the
	background of the frame part into IMAGE for STATE (nil,
	focused, highlighted, clicked)

	* sawmill.h (struct frame_part): new fields `renderer',
	`rendered_image' and `rendered_state'

	* images.c (make_image): search the list of images before
	making a new lisp object
	(Fmake_sized_image): new function, create a blank image of a
	certain size and colour

	* gradient.c (Fdraw_vertical_gradient,
	Fdraw_horizontal_gradient, Fdraw_diagonal_gradient): new
	plugin, new functions

	* windows.c, main.c, keys.c, images.c, functions.c, frames.c,
	fonts.c, events.c, cursors.c, colors.c: added doc strings for
	built-in functions

	* display.c (sys_init): don't connect to display if batch-mode
	is non-nil
	* keys.c, images.c, frames.c, fonts.c, cursors.c, colors.c: if
	batch-mode is non-nil, don't do anything that would access the
	display when initialising or shutting down

	* windows.c (Fset_client_state): deleted

	* functions.c (Fget_x_property, Fset_x_property): use CARD16
	and CARD32 types to access 16- and 32-bit data respectively

	* keys.c (num_lock_mod): initialised to the Num_Lock modifier,
	ignored in events
	(grab_event, ungrab_event): grab all combinations including
	LockMask and num_lock_mod

1999-08-30  John Harper  <john@dcs.warwick.ac.uk>

	* keys.c (translate_event): ignore the Lock modifier

	* functions.c (Fgrab_pointer): pass last_event_time to
	XGrabPointer (), not CurrentTime (since Fungrab_pointer also
	passes last_event_time)

	* events.c (handle_input_mask): set last_event_time to
	CurrentTime on leaving the function

	* sawmill.h: defining DEBUG to zero sends debugging output to
	db_printf ()
	* display.c (db_printf): replacement printf to store debugging
	output in one of rep's debug buffers

	* sawmill-ui.jl (keymap-shell): doesn't choke on non-symbol
	commands anymore, but it's still not possible to edit arbitrary
	forms..

	* events.c (button_press): click the frame before looking for
	the context map (since we only look for these maps in clicked
	frame parts)
	(unmap_notify): call reset_frame_parts

	* windows.c (Fhide_window): call reset_frame_parts

	* frames.c (reset_frame_parts): new function, resets clicked or
	highlighted state associated with a window frame

1999-08-29  John Harper  <john@dcs.warwick.ac.uk>

	* sawmill-ui.jl: fix option-menu problems, abbreviate displayed
	font names to just the font's family

	* sawmill.h: define _GNU_SOURCE
	* functions.c, client.c: some minor `-ansi -pedantic' fixes

1999-08-27  John Harper  <john@dcs.warwick.ac.uk>

	* events.c (colormap_notify): fix bug where changing a colormap
	when no window is focused causes a segfault

	* sawmill.h (XlibSpecificationRelease): if undefined, define to
	4; this really means X11R4 or _less_

	* display.c (XGetAtomNames): implement using XGetAtomName ()
	for X11R5 or less

	* events.c (configure_request): if we know about the window,
	call raise-window or lower-window instead of XRaiseWindow () or
	XLowerWindow ()

	* sawmill-ui.jl (build-set): only call
	gtk-option-menu-set-history if history is non-nil

1999-08-26  John Harper  <john@dcs.warwick.ac.uk>

	* sawmill.h (struct frame_part): added `highlighted' and
	`pending_refresh' bits

	* events.c: handle highlighting frame parts, and temporarily
	unclicking parts when the mouse leaves them. If the
	ButtonRelease occurs when the mouse isn't in the part, the
	context-map is ignored

	* frames.c: the background/foreground attributes are now
	(NORMAL FOCUSED HIGHLIGHTED CLICKED) (note addition of
	highlighted class, displayed when the mouse is in the part)
	(Vframe_draw_mutex): when t no frame parts are redrawn

	* events.c (Qproperty_notify_hook, Qreparent_notify_hook): new
	hooks
	(get_event_mask): new function, returns an event mask that
	would select a specified type of event

	* keys.c (Fproxy_current_event): allow event_mask and propagate
	args to XSendEvent to be specified

	* frames.c (refresh_frame_part): new function, draws both
	background and foreground

	* sawmill-ui.jl (build-set): sets can now be displayed as
	option menus, clists, as well as the old radio buttons,
	controlled by the ui-set-style var, or the :widget key

1999-08-25  John Harper  <john@dcs.warwick.ac.uk>

	* display.c (beep): new function, hooked into rep_beep_fun

	* functions.c (Fdelete_window): only send WM_DELETE_WINDOW
	message if window has said it can handle it, otherwise
	XKillClient

	* windows.c (Fstacking_order): new function

	* functions.c (Fraise_window, Flower_window,
	Fraise_lower_window, Fcirculate_up, Fcirculate_down): deleted
	(Frestack_windows): new function

	* events.c: replace calls to XMapRaised by XMapWindow

	* display.c (error_handler): don't report BadWindow errors that
	we've already handled

1999-08-24  John Harper  <john@dcs.warwick.ac.uk>

	* sawmill-ui.jl (build-keymap-shell:update-doc): translate
	newlines to spaces in doc strings
	(build-keymap): flatten and wrap the keymap doc string

	* colors.c (Fcolor_rgb): new function

	* fonts.c (Ftext_width, Ffont_height): new functions

	* sawmill-ui.jl (build-keymap-shell:set-binding): align the
	clist flush left when scrolling to the selected command

	* events.c (key_press): ignore KeyRelease events

1999-08-23  John Harper  <john@dcs.warwick.ac.uk>

	* frames.c (list_frame_generator): was making the rectangle of
	the client window too big when setting the shape mask

	* commands.c (Fcall_command): the `W' specifier ignores the
	current event's window if it's the root

	* client.c: new option `-c COMMAND' to invoke an interactive
	function

	* sawmill-ui.jl (build-pages): use a HPaned widget to contain
	the box and group frame, this stops the boundary changing to
	match their relative sizes

	* version 0.3a

	* functions.c (Fgrab_pointer): remove the hack choosing which
	window to grab in
	(Fungrab_pointer): if we're waiting for a ButtonRelease on a
	frame-part, unclick it

	* events.c: changes to how frame-part "clicking" is handled
	(Fquery_pointer): optional arg GET, to force a round-trip to
	the server
	(Faccept_x_input): new function, process any available X events

	* sawmill-ui.jl (keymap-shell): this now has a new key
	`:doc-path' giving the list of documentation databases. This is
	used to display the doc-string of the selected command

	* client.c: after sending the event, _always_ wait for a
	PropertyNotify event, not just for synchronous requests

1999-08-22  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.3

	* client.c: new client-server protocol, using X properties to
	allow inter-host communications
	* server.h, server.c: deleted, the server is now Lisp code

	* windows.c (x_find_window_by_id): try harder to find a window
	object for an id, possibly returning an invalidated object
	(remove_window): even if the window has been invalidated, try
	to remove the frame when appropriate

	* sawmill.h (Lisp_Window): new field `saved_id', this is
	another copy of the window id, but isn't zeroed when the error
	handler finds that the window has been deleted

	* events.c (property_notify): between XGet.. calls, check if
	the error handler invalidated the window

	* events.c (destroy_notify): use the x_find_window_by_id
	function to search for a window object for the destroyed window
	(since the error handler may have invalidated it)

	* keys.c: handle `Alt' similarly to `Meta' (i.e. find the
	actual modifier bit then subsitute it)
	* keys.h: added EV_MOD_ALT

	* events.c (Fquery_pointer): only use the stored mouse position
	if we're currently handling an event, and this event stored the
	position

	* functions.c (Fgrab_server, Fungrab_server): set
	`rep_message_fun' to null whilst the server is grabbed (in case
	stdout is to an xterm)

	* functions.c (Fgrab_pointer): if the specified window object
	doesn't have a mapped frame, then grab in the root window

	* functions.c (Fget_x_property): return nil if property doesn't
	exist

1999-08-21  John Harper  <john@dcs.warwick.ac.uk>

	* functions.c (Fraise_window, Flower_window,
	Fraise_lower_window, Fdelete_window, Fdestroy_window): these
	now use the `W' interactive decl

	* keys.c (Fcurrent_event_window): check if the window is a
	frame part
	(lookup_binding): new arg, CURRENT-WINDOW, the window whose
	`keymap' property is to be scanned
	(eval_input_event): if the event is a pointer event, look for a
	binding in the window that received the event, not the window
	with the input focus

	* commands.c (Fcall_command): new interactive specs, `w', the
	window that received the current event, and `W', either the
	same as `w' or the focused window

	* main.c (Qbefore_exit_hook): new hook; called before exiting

	* keys.c (Fcurrent_event_window): as well as returning a window
	object, this might instead return the symbol `root' or the
	integer id of an unmanaged window
	(Fproxy_current_event): send the current event on to a
	specified window

	* gnome.c: deleted, this is now done in lisp

	* functions.c (Fdelete_window): accept integer window ids
	(Fdestroy_window): if an integer window id, use XDestroyWindow,
	not XKillClient
	(Fsend_client_message): new function
	(Fcreate_window): new function (so I can do gnome-wm in lisp)
	(x-atom, x-atom-name): translate between symbols<->atoms

	* events.c (client_message): now pass _all_ the data in the
	event to the hook, format is (WINDOW TYPE-ATOM DATA-ARRAY).
	DATA-ARRAY is a string (8-bit format) or vector of integers

	* display.c (x_atom_symbol, x_win_from_arg): new functions

1999-08-20  John Harper  <john@dcs.warwick.ac.uk>

	* functions.c (Flist_x_properties, Fdelete_x_property,
	Fset_x_property, Fget_x_property): new functions

	* client.c (eval_lisp_form): don't use puts () to output the
	result string since it could contain zero bytes

	* windows.c (remove_window): a new argument FROM-ERROR. If
	non-nil then we're being called from the error handler, and
	thus won't generate any X protocol requests, let gc destroy the
	frame later

	* frames.c (frame_part_destroyer): don't try to delete parts
	without windows

1999-08-19  John Harper  <john@dcs.warwick.ac.uk>

	* frames.c, events.c: it's possible for Imlib_render to trigger
	the X error handler, and possibly invalidate the window that's
	currently being manipulated. So test that `w->id != 0' in
	suitable places

1999-08-16  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.2

	* display.c (sys_init): create a new window `no_focus_window'
	that gets given the focus when no other window has it (so we
	receive KeyPress events from it)
	* windows.c (focus_on_window): when told to focus on nothing,
	focus on the `no_focus_window'
	* events.c (unmap_notify): if the window being unmapped has the
	focus (after calling the unmap-notify-hook), unfocus it

1999-08-15  John Harper  <john@dcs.warwick.ac.uk>

	* sawmill-ui.jl: two new elements `keymap' and `keymap-shell',
	for keymap customization

	* events.c (circulate_notify): empty event handler

	* keys.c (Fgrab_keymap, Fungrab_keymap): new functions

	* keys.c (lookup_event_name): fix the bug where only the bottom
	16 modifier bits were being checked

1999-08-14  John Harper  <john@dcs.warwick.ac.uk>

	* sawmill-ui.jl (build-color:clicked): hide the `Help' button
	in the color selection dialog (since it does nothing)

	* sawmill-ui.jl: always format color specifiers correctly

1999-08-13  John Harper  <john@dcs.warwick.ac.uk>

	* sawmill-ui.jl (build-color): implements a separate `color'
	element (pretty similar to the `font' element)
	(build-pages): pages are now implemented as a clist and a frame
	(instead of a notebook). This can be changed via the
	ui-pages-style variable

	* frames.c (list_frame_generator): the `foreground',
	`background' and `font' keys may now be functions

	* frames.c (set_frame_part_bg): for shaped images, apply the
	mask at the correct frame coordinates

1999-08-12  John Harper  <john@dcs.warwick.ac.uk>

	* sawmill.h (Lisp_Window): cache the TRANSIENT_FOR hint
	* windows.c (Fwindow_transient_p): use the cached value

	* windows.c (focus_on_window): update `focus_window'
	immediately, instead of waiting for the FocusIn event
	* events.c, display.c: be more careful when changing the
	`focus_window' variable

	* events.c: record the time of the _two_ most recent pointer
	positions, the new function Fquery_last_pointer allows access
	to the earlier position

1999-08-11  John Harper  <john@dcs.warwick.ac.uk>

	* sawmill-ui.jl: use a ButtonBox for the control buttons, don't
	display the Revert and Refresh buttons (but they're still
	there, just not enabled)

1999-08-10  John Harper  <john@dcs.warwick.ac.uk>

	* sawmill-ui.jl, sawmill-menu.jl: copied from top-level
	directory, these are now compiled before being installed

	* events.c (handle_input_mask): new function, handle all
	outstanding events matching a specified event mask

	* windows.c (Fset_window_frame): between removing the old frame
	and installing the new frame handle all SubstructureNotify
	events to prevent the dread infinite frame-add-remove bug

1999-08-09  John Harper  <john@dcs.warwick.ac.uk>

	* sawmill.h (Lisp_Window): make `reparenting' an int so it can
	be incremented and decremented
	* windows.c, events.c: some magic to make the w->reparenting
	work when called from Fset_window_frame

	* frames.c (frame_part_destroyer): destroy frame part windows
	and delete their contexts
	(list_frame_generator): don't look at the frame's unshaped
	property if the client window is shaped

	* colors.c (Fcolor_name, Fcolorp): new functions
	* fonts.c (Ffont_name, Ffontp): new functions

1999-08-07  John Harper  <john@dcs.warwick.ac.uk>

	* main.c (sawmill_symbols): set interrupt-mode and error-mode
	to top-level; try to stop the wm getting hung in a
	recursive-edit

1999-08-04  John Harper  <john@dcs.warwick.ac.uk>

	* gnome.c (rep_dl_init): delete some properties from the root
	window that other wm's may have set but not removed

1999-08-03  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.1

	* main.c (Qsawmill_version): new variable

1999-08-02  John Harper  <john@dcs.warwick.ac.uk>

	* windows.c (Fset_client_state): set the WM_STATE property of a
	window

	* main.c (add_hook): new function

	* gnome.c: support the _WIN_STATE hint (but only the sticky
	attribute)

	* events.c (configure_request): raising a window uniconify's
	it, so that the GNOME pager can uniconify windows (!?)

	* cursors.c (Fget_cursor): if a symbol, dereference it's
	cursor-shape property _before_ scanning the list for an
	existing cursor

	* windows.c (Fcall_window_hook): new function, similar to
	call-hook, but first hook argument is always a window. Before
	evaluating the symbol value, look for a property of the same
	name in the window
	* events.c, display.c, windows.c: where appropriate use
	Fcall_window_hook instead of Fcall_hook

	* gnome.c (rep_dl_init): if ignored-window-names or
	sticky-window-names are void, set them to nil before consing on
	the gnome window names

1999-08-01  John Harper  <john@dcs.warwick.ac.uk>

	* gnome.c (Fgnome_set_workspace): if no workspace is active,
	pretend that workspace zero is

	* display.c (error_handler): call destroy-notify-hook _after_
	setting window->id to zero
	(sys_init): select for SubstructureNotify on root window

	* events.c (client_message): call `client-message-hook' if
	message isn't handled. This is an `or' style hook

1999-07-31  John Harper  <john@dcs.warwick.ac.uk>

	* frames.c (list_frame_generator): detect when regenerating a
	frame by looking at w->frame instead of w->frame_parts (which
	can be null even when the window is framed)

	* gnome.c: new loadable module, minimal GNOME compliance
	(client list, button proxying, workspace details)

	* windows.c (Fwindow_size_hints): pass along the PPosition,
	PSize, USPosition and USSize flags

	* keys.c (event_proxy_fun): hook called when an unbound event
	occurs. Should return TRUE if it handles the event

1999-07-30  John Harper  <john@dcs.warwick.ac.uk>

	* frames.c: fix stupid stack-smashing bug

	* images.c (Fimage_modifier, Fset_image_modifier): new
	functions for playing with Imlib's image modifiers

	* frames.c (list_frame_generator): handle propagating the shape
	of the client to the frame here since it's a lot less ugly
	* windows.c: don't call set_window_shape in so many places

1999-07-29  John Harper  <john@dcs.warwick.ac.uk>

	* windows.c (add_window): set WM_STATE of client windows
	(Fwindow_put): when the `keymap' property changes, ungrab the
	old keymap, then grab the new one

	* keys.c (Fbind_keys, Funbind_keys): grab/ungrab events in
	client windows if binding to the `global-keymap' or a window's
	`keymap' property

	* frames.c (list_frame_generator): indirect through multiple
	symbols in frame_style

	* windows.c, server.c, functions.c, events.c, display.c:
	replaced some calls to XSync by XFlush. (XSync also buffers any
	pending events, preventing select from returning)

	* display.c: add a call to XSync in the rep_redisplay_fun hook

1999-07-28  John Harper  <john@dcs.warwick.ac.uk>

	* windows.c (fix_window_size): call set_window_shape

	* windows.c (add_window): set frame_style to nil not
	default-frame initially

	* frames.c: remove the frame data type, now frames are just
	lists, a null list is a null frame. Also, a window's frame may
	be specified as a symbol, in this case the plist of the symbol
	is used for the frame properties

	* windows.c: select VisibiltyChangeMask on the client window
	not the frame, the frame was always PartiallyObscured (by the
	client?)
	* events.c (visibility_notify): don't check that the event
	window is the frame anymore

	* sawmill.h (Lisp_Window): new field `shaped' set if the client
	window is shaped
	* events.c: handle shaped client windows (ShapeNotify events)
	* windows.c (set_window_shape): new function, copies the client
	windows shape to the frame
	(install_window_frame): call set_window_shape

	* display.c (shape_event_base, shape_error_base): new variables

	* frames.c (list_frame_generator): when regenerating a frame
	recenter the client window in the resized frame window

	* events.c (button_press): fake an unwind-protect around the
	event evaluation, so a ButtonRelease can unclick buttons
	without aborting

	* windows.c (install_window_frame): also select
	SubstructureRedirectMask for frame, so that we get
	ConfigureRequest events for the client window

1999-07-25  John Harper  <john@dcs.warwick.ac.uk>

	* frames.c (list_frame_generator): add LeaveWindowMask to frame
	parts

	* windows.c (Qplace_window_hook): new hook, called when windows
	are mapped for the first time
	(Fwindow_transient_p): now returns the id of the other window
	if the window is a transient
	(Fwindow_id, Fwindow_group_id): new functions
	(Fwindow_size_hints): new function, returns the size hints as
	an alist

	* sawmill.h: added exit types for the clean_exit_jmp_buf

	* main.c (Fquit, Frestart): new functions

	* keys.c (Qroot_window_keymap): window to use when mouse is
	over the root

	* functions.c (Fsync_server): new function, calls XSync ()

	* events.c (button_press): handle ButtonPress before evaluating
	the binding, and ButtonRelease after the binding
	(leave_notify): if leaving a frame part, ensure that the
	clicked count is zero

