2003-03-25 John Harper * version 1.3 2003-02-21 John Harper * events.c (button_press): don't cache the clicked frame part while evaluating the event - it may get garbage collected. Fixes valgrind errors while repeatedly shading/unshading windows (which should fix #69817) 2003-02-19 John Harper * events.c (gravity_notify): empty function to avoid warnings about unhandled events 2003-01-09 John Harper Merged from HEAD: * windows.c (install_window_frame, remove_window_frame): integrated patch from Michal Maru¹ka to set client's window gravity to StaticGravity while it's reparented 2002-12-24 John Harper * gtk-style.c (print_rc_style): removed code to print font names, was protected by #if condition that fails for gtk 2.2 2002-11-13 John Harper Merged from HEAD: * windows.c (remove_window): only call focus_off_window () when not being called from the X error handler. Fixes #98405 2002-11-09 John Harper * version 1.2 2002-11-03 John Harper * merged color changes from HEAD: * sawmill.h (Lisp_Color): now contains alpha value * colors.c (Fget_color_rgb, Fget_color): both now take an extra ALPHA parameter (Fcolor_rgb, Fcolor_rgb_8): both now return an extra element in the list, the alpha value * fonts.c (xft_draw): use alpha field in color, instead of defaulting to fully opaque * images.c, functions.c, frames.c, cursors.c: updated callers 2002-11-02 John Harper * merged font changes from HEAD: 2002-11-02 John Harper * fonts.c, sawmill.h: different font rendering methods are now better abstracted, using the Lisp_Font_Class structure (get-font-typed, font-type-exists-p, font-type): new functions, allows a font to be loaded from a type+name combination, instead of just a name, which may be ambiguous when multiple renderers are being used Current types are "xlfd" for traditional X fonts, and "Xft" for Xft client-side rendered fonts. The old get-font function always tries to load xlfd fonts, for backwards compatibility For now, Xft fonts can be used like this: (when (and (boundp 'font-type-exists-p) (font-type-exists-p "Xft")) (setq default-font (get-font-typed "Xft" "Trebuchet MS-11"))) 2002-11-02 John Harper * fonts.c (x_draw_string): now takes an explicit foreground color parameter, instead of using the one in the gc * x.c, sawmill_subrs.h, functions.c, frames.c: updated callers 2002-10-20 John Harper * more merging: 2002-10-20 John Harper * windows.c, sawmill_subrs.h, sawmill.h, events.c: removed code to read WM_TRANSIENT_FOR property, handled by Lisp code now 2002-10-19 John Harper * keys.c (find_meta): use our own nconc function 2002-10-03 John Harper * functions.c (Fget_x_text_property, Fset_x_text_property): deleted, these are now written in lisp 2002-09-30 John Harper * merging from HEAD: 2002-10-01 John Harper * property-cache.c (property_cache_ref): fixed silly bug (returning nil not null before cache is initialized) 2002-09-29 John Harper * sawmill.h, fonts.c: refactored some of the font loading code 2002-09-28 John Harper * events.c (configure_request): for `position' configuration, pass nil x or y if unset (instead of just ignoring it). Part of fixing #83431 2002-09-28 John Harper Some performance optimizations, especially avoiding server round trips: * property-cache.c: new file, cache results of [gs]et-x-property (doesn't do [gs]et-x-text-property yet) * functions.c, frames.c, events.c: use/maintain the property cache * frames.c (apply_mask, configure_frame_part): turn off graphics exposure events in GCs * functions.c (refresh_message_window): same * images.c (paste_image_to_drawable): same * frames.c (set_frame_part_bg): don't reshape frames every time we redraw the background, too expensive 2002-09-21 John Harper * stacking-list.c: replaced assert () instances by non-terminal macros, i.e. they'll print a message but not abort the program. Lame-ass way of "fixing" #81027 * sawmill.h (return_if_fail, return_val_if_fail, nonterminal_assert): new macros * windows.c (Fwindow_size_hints): accept min size == 0 and set it to one, should fix #77639 2002-09-01 John Harper * server.c (server_accept_connection): don't pass null pointers to accept (), it's been reported to cause crashes (patch suggested by Sergey Bratus ) 2002-06-28 John Harper * version 1.1 2002-05-06 John Harper * More merging from HEAD: 2002-04-22 John Harper * functions.c (Fset_x_text_property): added optional fourth arg ENCODING-ATOM. To allow #67397 to be fixed * events.c: more focus change fallout 2002-04-21 John Harper * Merged changes from HEAD: 2002-04-21 John Harper * events.c (events_init): pointer-motion-threshold isn't set 2002-04-17 John Harper Work to fix fallout from fix for #67958 (focus getting lost sometimes): * windows.c (pending_focus_window): deleted this variable (focus_off_window): if the window is the one that's currently focused, call XSetInputFocus to immediately transfer focus to our window that gets the focus if nothing else has it. This avoids us getting left with nothing focused (e.g. if we send WM_TAKE_FOCUS to a window that doesn't accept the focus) * windows.c (commit_queued_focus_change): disabled call to check_for_lost_focus () * windows.c (find_window_by_id, x_find_window_by_id): don't do debugging printing here * events.c (handle_input_mask): print names of windows when debugging is enabled 2002-04-12 John Harper * windows.c (remove_window, install_window_frame, remove_window_frame): update pending_focus_window and queued_focus_id as necessary (fixes a "lost focus" bug) 2002-04-09 John Harper * windows.c (commit_queued_focus_change, focus_on_window, focus_off_window): removed broken "timestamp - 1" kludge. Instead defer both sending WM_TAKE_FOCUS and focusing windows until idle time. Fixes #67958 * events.c (button_press, motion_notify): only accept pointer events we're expecting (either directly on one of our windows, or while the pointer is grabbed) (mark_pointer_grabbed, ungrab_pointer): new functions * main.c, keys.c, functions.c, frames.c: call ungrab_pointer () instead of XUngrabPointer (). Fixes #44239 * images.c (bevel_pixel): use integer arithmetic * sawmill.h: define CLAMP macro * main.c (main): if DEBUG == 1, put stdout into line buffering mode 2002-04-08 John Harper * libclient.c (unix_server_init): print an error message if connect () fails 2002-04-03 John Harper * display.c (error_handler): only interpret BadWindow and BadDrawable errors as meaning that a window died. May fix #74799 2002-04-02 John Harper * events.c (Fx_server_timestamp): added another arg STORE. When true, save the timestamp for later use.. needed for #77041 2002-03-19 John Harper * functions.c (message_event_handler): only redraw on the final expose event 2002-03-19 John Harper * Merged changes from HEAD: 2002-03-01 John Harper * windows.c (manage_windows): unmap the window before faking the call to the map-request event handler. Fixes #67601 (causes the expected map-notify event to be sent when we later map it) 2002-02-17 John Harper * windows.c (remove_window): check for w->id == 0 immediately before calling remove_from_stacking_list (). Avoids triggering an assertion on logout (since remove_window () may be called recursively from the error handler!) 2002-01-24 John Harper * frames.c: fixed definitions of Qtop and Qbottom. This bug must have existed forever! 2002-01-10 Sander Vesik * image.c: gdk_pixbuf_new_from_file now takes two parameters * main.c: conditionaly include glib-object.h and call g_type_init() if we are using gdk_pixbuf * gtk-style.c: GtkRcStyle no longer has font and font_set members * sawmill.h: gdk-pixbuf-xlib.h now lives in gdk-pixbuf-xlib 2001-12-05 John Harper * windows.c (Fwindow_visibility): check argument is windowp (patch from Michal Maru¹ka ) 2001-11-12 John Harper Fixed bug of not rereading WM_WINDOW_PROTOCOLS when it changes: * events.c (property_notify): call get_window_protocols on WM_WINDOW_PROTOCOLS events * windows.c (get_window_protocols): clear the window's does_wm_X flags before reading the property 2001-11-03 John Harper Fixed bug where Nautilus windows often don't get focused in focus follows mouse mode: * windows.c (focus_on_window): don't call XSetInputFocus () directly store the parameters for later (commit_queued_focus_change): new function, calls XSetInputFocus () if there's a queued focus change waiting * events.c (handle_input_mask): call commit_queued_focus_change () before exiting 2001-10-21 John Harper Fixed bug where warp-cursor doesn't invalidate the pointer location cache: * functions.c (Fwarp_cursor): call invalidate_cached_mouse_position after warping the cursor * events.c (invalidate_cached_mouse_position): new function 2001-10-14 John Harper * version 1.0.1 2001-08-31 John Harper * windows.c (focus_on_window): subtract one from the last seen server timestamp when sending the WM_TAKE_FOCUS message. The explanatory comment in the source reads: The -1 is an Ugly Hack. The problem is with the case where the window focuses itself after receiving the WM_TAKE_FOCUS message. If during the time between us sending the client message and the window focusing itself we focused another window using the same timestamp, the original window (that received the client message) will still get focused. I'm assuming that it's unlikely that two events will arrive generating focus changes with timestamps that only differ by one.. 2001-08-24 John Harper * events.c (unmap_notify): call remove_window () on unmapped (withdrawn) windows. This fixes some standards-compliance bugs due to us handling windows differently the second time they're mapped than the first 2001-07-02 John Harper * version 0.99 2001-06-20 John Harper * sawmill_subrs.h, multihead.c, main.c, Makefile.in: support a `--multiehead' command-line option. When given and the X server has more than one screen, fork extra copies of sawfish for each extra screen. This has some fundamental problems (e.g. the copies share files in ~/.sawfish without any synchronization), but seems to be useful for some people.. The other people who contributed to this feature are Michael Vogt and Mahmood Ali 2001-06-12 John Harper * display.c (sys_init): if XQueryShapeExtension fails, print a message and terminate the wm 2001-06-04 John Harper * windows.c (focus_on_window): don't update focus_window after calling XSetInputFocus (), instead wait for the focus-in event to do this (pending_focus_window): new variable to make this work correctly (focus_off_window): new function, called when a window becomes unfocusable * events.c (unmap_notify): call focus_off_window (focus_in): nullify pending_focus_window if it actually gets focused 2001-05-22 John Harper Fixed bug 8220 (Having Ctrl as default "modifier key used for default WM shortcuts" breaks everything...): * keys.c (wm_mod): default window manager modifier is once more `M-' instead of `C-' 2001-05-04 John Harper * keys.h, keys.c: added support for Off2 and Off3 event types (button release events). Also changed it so that Click1 events now print as `Click' 2001-04-22 John Harper * colors.c (colors_init): use `#000000' instead of `black'. This will still work even if rgb.txt doesn't exist. Also check for Fget_color () throwing an exception 2001-04-11 John Harper Fixed bug 6970 (X plugin doesn't update width and height of drawable structure): * x.c (x_window_note_changes): new function, called by Fx_configure_window () after making changes 2001-03-29 John Harper Fixed an ICCCM compliance problem: * functions.c, events.c (configure_request, Fresize_window_to, Fmove_resize_window_to): don't send a synthetic configure notify event if the window was resized (in which case a real configure notify was generated) 2001-03-21 John Harper * fonts.c (x_create_font_set): reverted the last change to merge calls to setlocale (). (I had failed to realize that the result of calling setlocale describes the current locale not the original one). Also added some code to copy the returned locale name since it's in a static buffer 2001-03-19 John Harper * windows.c, sawmill.h: moved XUrgencyHint definition to sawmill.h 2001-03-14 John Harper * version 0.38 2001-03-09 John Harper * cursors.c (cursors_init): set default_cursor to Qnil when in batch mode (to prevent Fdefault_cursor () returning a null value) 2001-03-07 John Harper * functions.c (Fx_raise_window, Fx_lower_window): when these functions are given a sibling, check if it has been destroyed. If so, do nothing to the stacking order (This should fix a failed assertion that Ramiro and Duane were seeing) 2001-02-26 John Harper * keys.c (wm_mod): changed default value from EV_MOD_META to ControlMask. Part of my fix to bug 7073 2001-02-19 John Harper * version 0.37.3 * windows.c (install_window_frame, remove_window_frame): only do the reparenting if the window hasn't been destroyed * stacking-list.c (restack_window): just return immediately if the window has already been destroyed * stacking-list.c (window_in_stacking_list_p): new predicate, used to replace the assert_window_[not_]in_stacking_list functions (which have been deleted) 2001-02-18 John Harper * functions.c (Frestack_windows, Fx_raise_window, Fx_lower_window): be sure to never alter the stacking of destroyed windows [ I think this should fix the random crashes that some people have been experiencing - it was possible for a deleted window to be reinserted in the stacking list. Then, when the deleted window got garbage collected bogus pointers were left in the list.. ] * stacking-list.c: added yet more assertions, this time to check that destroyed windows aren't being manipulated where they shouldn't be * sawmill.h (WINDOW_IS_GONE_P): new macro, evaluates to true when the window object no longer has an associated client window * windows.c, frames.c, display.c, keys.c: use the above macro instead of `w->id == 0' 2001-02-16 John Harper * stacking-list.c (assert_window_in_stacking_list, assert_window_not_in_stacking_list): new functions * windows.c: use the stacking-list assertions in sensible places 2001-02-15 John Harper * stacking-list.c: added debugging assertions 2001-02-13 John Harper * version 0.37 * windows.c (remove_window): only call remove_from_stacking_list () once per window 2001-02-11 John Harper * session.c (save_yourself_2): set outstanding_save_done to false after calling SmcSaveYourselfDone () 2001-02-09 John Harper Work to cache the stacking order of windows locally - this fixes the bug where reparenting windows screws the stacking order and therefore makes the constraint-based stacking code go haywire. It's also an efficiency win since we don't need to keep asking the server for the order * stacking-list.c: new file, code to maintain and manipulate a doubly linked list of all managed windows, representing the current stacking order. Also has a function to restack a window such that it's consistent with its position in the list * sawmill.h (Lisp_Window): new fields `above' and `below' - linkage for the stacking list * functions.c (Frestack_windows, Fx_raise_window, Fx_lower_window): these are now implemented in terms of the stacking list primitives. The method is simple: get the list into the new order, then call restack_window () on any windows that changed position in the list * windows.c (Fstacking_order): just call make_stacking_list () (add_window, remove_window): add and remove the window from the stacking list (install_window_frame, remove_window_frame): after calling XReparentWindow (), call restack_window () to fix the stacking order of the window - this fixes the original bug 2001-02-07 John Harper * colors.c (Fget_color): don't try to call XParseColor if we have no display connection, just return nil. Patch from merlin * functions.c (functions_init): call XineramaQueryExtension before XineramaQueryScreens (in case the extension isn't present) 2001-01-28 John Harper * session.c (shutdown_cancelled): if we've not already, send a SaveYourselfDone message (required by the XSM protocol) * main.c (Fexit_type): new function, returns the type of exit currently in progress, one of the symbols: `user-quit', `user-restart', `session-quit' (or nil if no exit in progress) * events.c (save_timestamp): (try to) be more intelligent when detecting out of order timestamps. Instead of just discarding them, fetch the real time from the X server, then set `last_event_time' to the timestamp closest to the current server time. This avoids sometimes dropping valid timestamps (e.g. after an APM resume, focus changes could be lost for a short time) 2001-01-20 John Harper * version 0.36 2001-01-18 John Harper * windows.c: work around XUrgencyHint only being defined on X11R6 and later 2001-01-17 John Harper * frames.c (set_frame_shapes): apply the mask of the image associated with the current state of the frame part, not always the inactive state * frames.c (set_frame_part_bg): if applying a pixmap with no mask, set the shape to be the rectangle defined by the edges of the frame part. This fixes the bug where parts in which only some of the constituent images have alpha channels, get corrupted when resized * frames.c (configure_frame_part): if the window already exists, call XClearArea () to generate an Expose event. This fixes the bug where window decorations can update inconsistently when resizing windows 2001-01-15 John Harper * keys.c (Fbind_keys): signal an error when <1 arg, don't just return rep_NULL (which may cause a crash later) 2001-01-09 John Harper * windows.c (Fwindow_icon_image): added support for icons stored on the KWM_WIN_ICON property (aka `mini icons'). Only used when there's no icon in WM_HINTS * images.c (Fcrop_image): fix typo when checking validity of HEIGHT parameter (patch from martin@whoever.com) 2001-01-05 John Harper * version 0.35 2001-01-04 John Harper * events.c (map_request): be sure to map the frame (if appropriate) _before_ calling the map-notify-hook. Otherwise X errors can result from code thinking the frame is visible when it isn't yet. Fixes bug 5243 (shaded windows die on restart) 2001-01-02 John Harper * images.c (Fcomposite_images): fixed bugs in both gdk-pixbuf and Imlib versions 2000-12-30 John Harper * gtk-style.c (states): reordered this array so that it matches the actual GtkStateType enum. Patch from 2000-12-22 John Harper * images.c (Fmake_image_from_x_drawable): special cased (= depth 1) case for gdk-pixbuf substrate 2000-12-18 John Harper * keys.c (direct_modifiers): only substitute physical for virtual modifiers if the physical modifiers actually exist. Otherwise just preserve the virtual bits (translate_event_to_x_button, translate_event_to_x_key): if after translating modifiers, any virtual modifiers still exist, don't accept the event * keys.h (EV_VIRT_MOD_MASK): new definition, the bits representing virtual (non X-native) modifiers 2000-12-05 John Harper * keys.c (lookup_event): reject events if they're button events but don't have at least one button modifier (or the `Any' modifier) set. Fixes #4983 2000-12-04 John Harper * keys.c: support Button6 and Button7 * keys.h: define Button6 and Button7 values to their logical values (known to work on XFree86 version 4) [ adapted from a patch by Steve Haslam ] * images.c (Fimage_modifier, Fset_image_modifier): fixed bug of not accepting () to stand for all three color components * version 0.34 2000-11-28 John Harper * keys.c (wm_mods, Fwm_modifier, Fset_wm_modifier): a new modifier, `W-', that's user-settable (Fevent_match): new function for comparing events * keys.h (EV_MOD_WM): new bit 2000-11-27 John Harper * x.c (x_window_event_handler): ignore any expose events which don't have a zero `count' field 2000-11-26 John Harper * events.c, functions.c (client_message, Fget_x_property): when converting from 32-bit data use rep_make_long_uint () instead of rep_MAKE_INT () (which will fail on large values) 2000-11-20 John Harper * events.c (focus_out): if unable to find a window, check for a deleted window, and nullify focus_window variable if one is found * windows.c (remove_window): don't nullify focus_window if removing the focused window (window_mark_type): mark focus_window variable * events.c, functions.c, windows.c (Fquery_pointer, Fquery_pointer_window, Flist_x_properties, Fget_x_property, Fstacking_order): don't call emit_pending_destroys () after round trip requests, let them be delivered synchronously * events.c: removed all the ignore-fp-keymap stuff 2000-11-18 John Harper * x.c (x_window_event_handler): pass the window as the second argument to event handlers (event type is the first). Patch from Unai Uribarri Rodríguez 2000-11-16 John Harper * main.c (sawfish_symbols): defvar `sawfish-locale-directory' to the value of the SAWFISH_LOCALEDIR macro 2000-11-14 John Harper * windows.c (register_property_monitor, Fwindow_put): a general interface for getting notification when the value of a window property is changed * keys.c (keymap_prop_change): property change handler for Qkeymap (used to be embedded into Fwindow_put) * events.c (ignore_fp_prop_change): called when the ignore-fp-keymap property is changed, if a context map is cached, recompute it (really fixes #4708) * events.c (current_context_map): cache the context map across calls (flush_current_context_map): new function (button_press, motion_notify): new semantics for context maps in motion events, the map is the map that was active when the button-press event was received. This fixes the fast-window-drag bug #4708 2000-11-13 John Harper * version 0.33.1 2000-11-10 John Harper * events.c (current_context_map): new function, replaces the variable of the same name (the context map may now change depending on the environment, so it's not cachable). If the window's ignore-fp-keymap property is set, give a null context keymap 2000-11-08 John Harper * version 0.33 2000-11-07 John Harper * frames.c (set_frame_shapes): fix stupid bug of getting dimensions of scaled images wrong (introduced by the last change) 2000-11-06 John Harper * frames.c (apply_mask): local function to clip a mask (if required) before union'ing it onto the destination window (set_frame_shapes): use apply_mask () to form the image mask, otherwise only images whose dimensions are an integer multiple of the tiled image can be created without corrupting the surrounding state. Fixes #4519 * pixmap-cache.c: added code to disable the pixmap cache if DISABLE_CACHE preprocessor macro is defined 2000-11-02 John Harper * events.c (focus_in, focus_out): pass MODE parameter to focus-{in,out}-hook as for leave/enter hooks 2000-10-28 John Harper * windows.c (window_input_hint_p): new function (focus_on_window, Fwindow_wants_input_p): use window_input_hint_p. Fixes the bug where window-wants-input-p wasn't checking if the InputHint flag was set before reading the value 2000-10-24 John Harper * events.c: reverted last change (it breaks some focus stuff), instead the leave/enter hooks pass an extra argument: MODE, one of the symbols `normal', `grab' or `ungrab', the xcrossing.mode field of the event * events.c: only call leave-notify-hook or enter-notify-hook for NotifyNormal events (i.e. ignore Grab/Ungrab events since they don't really represent the pointer crossing window boundaries) 2000-10-22 John Harper * functions.c (Fdisplay_message): new attribute `head . ID' specifying the head to centre the message on. Adapted from a patch from Geoff Reedy 2000-10-19 John Harper * version 0.32 2000-10-18 John Harper * events.c (property_notify): track changes to the flags.XUrgencyHint field, invoke window-state-change-hook when it flips (passing `urgency' state). Also fixed some obscure gc protection stuff * windows.c (Fwindow_urgent_p): new function 2000-10-09 John Harper * keys.c (eval_input_event): only set current_event to null when leaving the top-level event loop. This helps when working with multiple commands and/or event loops 2000-10-05 John Harper * windows.c (Fwindow_wants_input_p): if no WM_HINTS, default to false. Also if the window supports WM_TAKE_FOCUS, always return true (focus_on_window): if sending a WM_TAKE_FOCUS message, only explicitly focus on the window if it's accepts-input hint is set 2000-09-28 John Harper * fake-libexec: patch from John H. Palmieri to link to libfoo.so as well as foo.la (for Tru64?) 2000-09-22 John Harper * images.c (images_init): check return value of imlib_init () and bail out if failure 2000-09-20 John Harper * version 0.31 2000-09-17 John Harper * sawmill.h (Lisp_Window): added bitfield `pending_reshape' * frames.c (queue_reshape_frame, commit_queued_reshapes): new functions to allow calls to set_frame_shapes () to be buffered (set_frame_part_bg): if the background changes, queue a reshape of the frame. This removes the long-standing misfeature that the different states of each frame part must have the same shape [ it also means that a lot of needless shaping is happening; this could perhaps be reduced by writing a function that just calculates the shape of a given sub-region of the frame ] * events.c (shape_notify): use queue_reshape_frame () instead of set_frame_shapes () * display.c (redisplay): call commit_queued_reshapes () * play-sample.c: exit fn is called rep_dl_kill not rep_dl_exit 2000-09-07 John Harper * x.c: make r_fns and x_fns global, and initialize them once (non-constant array initializers are a GCC extension) 2000-09-05 John Harper * keys.c (lookup_event): when canonifying shifted keysyms, don't lose the S- modifier if the shifted and non-shifted keysyms are the same (adapted from E. Jay Berkenbilt) 2000-09-04 John Harper * images.c (Fcomposite_images): implemented for Imlib 2000-09-03 John Harper * keys.c (lookup_event): canonify `S-x' -> `X' * x.c, windows.c, session.c, selection.c, main.c, keys.c, images.c, functions.c, frames.c, fonts.c, events.c, cursors.c, colors.c: magic doc-string comments now include module names * images.c (Fmake_sized_image): include an alpha channel when using gdk-pixbuf (set_pixel): if the image doesn't have an alpha channel, and the new value requires it, add it to the image 2000-09-02 John Harper * images.c (Fscale_image, Fcomposite_images, Fcrop_image): new functions. (composite-image isn't implemented for Imlib yet) 2000-09-01 John Harper * sawmill-menu.jl, sawfish-client.jl: moved to ../scripts * events.c (record_mouse_position): handle pointer motion threshold (motion_notify): only evaluate the event if pointer_in_motion is true * sawmill.h (POS, ABS): new macros 2000-08-31 John Harper * keys.c (eval_input_event): removed `yow!' message and associated call to Fbeep () 2000-08-31 John Harper * keys.c (window_getting_button_event): new function (Fsynthesize_event): for pointer events use window_getting_button_event () to locate a suitable window to send the event to (one that selects for pointer events) (adapted from E. Jay Berkenbilt , adapted from gwm) * functions.c, frames.c, events.c: doc/comment fixes 2000-08-30 John Harper * windows.c (Fset_input_focus): treat Qroot arg as Qnil (since root-window-keymap is searched when no_focus_window is active) 2000-08-29 John Harper * windows.c (add_window): call place-window-hook if `initialising' is true; this is the only time that place-window-hook is called on a window with the 'placed property (windows_kill): call remove-window-hook before calling remove_window () on each managed window * windows.c (emit_pending_destroys): don't decrement pending_destroys each iteration, just zero it before exiting * windows.c (remove_window): if !destroyed and !from_error, reinstall the original border-width of the client window (adapted from E. Jay Berkenbilt ) * functions.c: if TEST_XINERAMA is defined, fakes a two-headed Xinerama config, for testing purposes 2000-08-26 John Harper * functions.c (Ffind_head): this was totally broken 2000-08-24 John Harper * main.c (inner_main): call rep_top_level_recursive_edit () instead of Frecursive_edit () 2000-08-21 John Harper * x.c: Integrated patch from Ryan Pavlik to support a load more GC attributes, plus a new function x-gc-set-dashes. Cleaned the whole file to match my usual coding style 2000-08-16 John Harper * sawmill-menu.jl: use #!optional and #!rest instead of deprecated &optional and &rest 2000-08-13 John Harper * server.h, libclient.h, libclient.c, client.c: server now reliably communicates errors back to the client (as `(signal 'remote-sawfish (list DATA))' where DATA is a string). Also renamed the sockets and X properties. The X protocol now includes a version number 2000-08-10 John Harper * events.c (configure_request): don't adjust for frame offset when marshalling position 2000-08-09 John Harper * x.c (create_x_drawable): initialize event_handler field (patch from Matt Tucker ) 2000-07-30 John Harper * frames.c (create_window_frame): don't try to reframe windows with a non-null list of frame parts, just print an error 2000-07-28 John Harper * main.c: changed the usage printing method 2000-07-27 John Harper * x.c, windows.c, session.c, selection.c, play-sample.c, main.c, keys.c, images.c, gradient.c, functions.c, frames.c, fonts.c, flippers.c, events.c, cursors.c, colors.c: split into separate sawfish.wm. modules * commands.c: deleted, all command handling is written in Lisp * fake-libexec: script copied from librep to make symlinked plugin tree for when compiling * client.c: wrap libclient functions for rep code, installed as sawfish.client module * sawfish-client.jl: rewrote sawfish-client in Lisp, uses a replicated repl to get fully feature front-end in `-' mode 2000-07-25 John Harper * sawmill.h: make all bitfields unsigned 2000-07-24 John Harper * version 0.30.3 2000-07-23 John Harper * sawmill-menu.jl: don't require 'define 2000-07-20 John Harper * Makefile.in: avoid warnings from unbuilt dependency files; add --mode arguments to libtool commands (from David Kaelbling ) 2000-07-17 John Harper * frames.c (build_frame_part): if part has 'hidden property set, skip this part 2000-07-16 John Harper * frames.c (list_frame_generator): when reconfiguring an existing frame, adjust its position so that the position of the client window in relation to the root window stays constant 2000-07-14 John Harper * version 0.30.2 2000-07-13 John Harper * x.c, server.c, keys.c, images.c, functions.c, frames.c, fonts.c: use global_symbol_value () instead of Fsymbol_value () in places where the symbol is constant, and it may be called from gaolled code 2000-07-12 John Harper * events.c (configure_request): ensure that one (and only one) synthetic ConfigureNotify event is sent to the window after the configure request has been handled (even if the window's state doesn't change at all) [ this fixes the bug where menus in java/swing apps appear too high until the window has been moved ] * windows.c (manage_windows): if current focus is PointerRoot, query the window under the pointer, then refocus that. Patch from Brad Thompson 2000-07-11 John Harper * windows.c (Fmap_windows, Ffilter_windows): new functions. Implementing them in C avoids the need to cons up a load of list structure just to throw it away immediately afterwards 2000-07-09 John Harper * versiom 0.30 2000-07-07 John Harper * images.c (get_pixel): don't box the integer twice (set_pixel): if no alpha in pixel, but image has alpha channel, assume full opacity 2000-07-06 John Harper * main.c (main): unless XSupportsLocale (), don't use FontSets (patch from Tomohiro KUBOTA ) 2000-07-05 John Harper * functions.c (Froot_window_id): new function 2000-07-04 John Harper * session.c (ICE_input_ready): if IceProcessMessages () fails, shut down 2000-07-03 John Harper * colors.c (Fcolor_rgb_8): new function, as color-rgb, but returning eight-bit values * images.c (Fimage_ref, Fimage_set, Fimage_map, Fimage_fill): new functions for manipulating image contents 2000-07-02 John Harper * version 0.29 * images.c (Fmake_image_from_x_drawable): combine the grabbed image and its mask by hand when using Imlib 2000-06-29 John Harper * images.c (Fmake_image_from_x_drawable): fixed memory leak in gdk-pixbuf case * libclient.c (unix_server_init): removed call to access (), rely on connect () failing to tell us when sockets don't exist 2000-06-28 John Harper * sawmill-ui.jl, Makefile.in: deleted sawmill-ui.jl * keys.c (default_mods): recapitalized the names * play-sample.c, fonts.c: use sprintf if no snprintf 2000-06-25 John Harper * windows.c (Fwindow_icon_image): check that `w->wmhints != 0' 2000-06-24 John Harper * events.c (property_notify): when WM_HINTS changes, uncache icon, and refresh the frame 2000-06-23 John Harper * windows.c (add_window): if `initialising != 0', then set `placed' property of window before calling any hooks. This stops the window-history module rearranging windows.. * frames.c (build_frame_part): value of `cursor' attribute will be called if it is functionp * frames.c (build_frame_part): don't need to check that values returned by call_protectedly are non-null * frames.c: new frame part attribute `scale-foreground'. When non-nil, the foreground image will be scaled to the size of the frame part * sawmill.h (struct frame_part): added `scale_foreground' flag 2000-06-22 John Harper * events.c (configure_request): when we know nonthing about the window, propagate the stacking-related fields of the event structure to the call to XConfigureWindow 2000-06-21 John Harper * fonts.c (generalize_xlfd): don't assume that snprintf (0, ..) returns the size of the string that would be formatted (breaks on Tru64). Patch from Aron Griffis * pixmap-cache.c (max_cached_pixels): reduced from 256K pixels to 64K pixels 2000-06-20 John Harper * events.c (configure_request): represent the full complexity of the stacking components of the request. The `stack' cell of the alist is (RELATION SIBLING), where RELATION is one of the symbols `above', `below', `top-if', `bottom-if', `opposite' and SIBLING is a window or `nil' [ patch from Brad Thompson ] * sawmill.h (Lisp_Window): added `icon_image' field. Null if uninitialized, otherwise either Qnil or the image containing the window's icon * windows.c (Fwindow_icon_image): moved here from images.c, now caches the image in the window structure * sawmill.h, images.c: added support for gdk-pixbuf image library (xlib version) 2000-06-19 John Harper * play-sample.c (gnome_sound_play): check if gnome_sound_sample_load returns negative, if so print a message instead of trying to play the negative id 2000-06-18 John Harper * sawmill.h, main.c, keys.c, events.c, commands.c: remove any rep-compatibility cruft, we require 0.12 now 2000-06-16 John Harper * version 0.28.1 2000-06-14 John Harper Work to support non-default visuals and color depths: * display.c: support options --visual=TYPE and --depth=DEPTH for specifying the preferred visual type and color depth. Also removed the screen_{cmap,visual,depth} variables. Replaced by preferred_{visual,depth} * frames.c: use XCreateWindow instead of XCreateSimpleWindow; ensure that we never default to CopyFromParent for any parameters (since parent may be different depth/visual) * x.c (Fx_create_window): ensure that border_pixel is always set to something * main.c (usage): updated for new options * frames.c, flippers.c, colors.c, images.c, x.c: no longer use screen_{cmap,visual,depth} 2000-06-12 John Harper * version 0.28 * sawmill-ui.jl (build-frame-style:update-readme): catch errors while testing for directory existance (tarfh may error out) 2000-06-10 John Harper * keys.c, keys.h: support `Super' modifier; don't always map `Alt' to some modifier, only do this for `Meta' now 2000-06-07 John Harper * main.c (sawfish_symbols): moved documentation-file to execdir * windows.c (Fwindow_size_hints): do some sanity checking of the fields in the size hints structure (e.g. ignore negative values) 2000-06-06 John Harper * sawmill.h: moved all Imlib code behind `#ifdef IMLIB' protection; typedef image_t redirects to image buffer type * play-sample.c: only redefine glib macros if glib isn't present * pixmap-cache.c: new file. Caches image->pixmap mappings. Not needed when using Imlib * main.c (main): call pixmap_cache_init () * images.c: ifdef'd all Imlib specific code, some basic support for pixmap-cache * images.c (image_cmap, image_visual, image_depth): characteristics of the visual we'll be using for all drawing * functions.c (Fdisplay_message): use image_cmap instead of screen_cmap * frames.c, gradient.c, colors.c, x.c: removed all Imlib specific code, replaced by calls to portable image_ layer functions * events.c (install_colormaps): install image_cmap if the window has been reparented (for the frame) * Makefile.in: added pixmap-cache.c to $(SRCS); use $(IMAGE_FOO) instead of $(IMLIB_FOO) 2000-06-05 John Harper * main.c, fonts.c: (setq fonts-are-fontsets nil) if setlocale () returns null, "C", or "POSIX". This should avoid the problem when trying to render 8-bit characters in a 7-bit locale (they don't). This is still experimental. Added under guidance from Tomohiro KUBOTA * windows.c (manage_windows): preserve focus while reparenting the windows * events.c (focus_in, focus_out): track the window we last received focus-in/out on, and only handle the new event if it makes a difference (e.g. avoids generating spurious focus-in hook calls when keyboard grab is manipulated) 2000-05-31 John Harper * fonts.c (generalize_xlfd): don't bother pattern matching field contents, just extract by position 2000-05-30 John Harper * sawmill-ui.jl (build-symbol): don't use make-closure * commands.c (Finteractive): removed, unneeded 2000-05-27 John Harper * sawmill-menu.jl: require 'define for old (?) libreps 2000-05-26 John Harper * display.c (redisplay): if XPending () returns non-zero, mark that there is input pending on the display 2000-05-25 John Harper * keys.c, commands.c: use rep_call_with_closure () if it's available 2000-05-22 John Harper * Makefile.in: remove .jlc files in `clean' target, not in `realclean' 2000-05-19 John Harper * fonts.c: integrated patch from Tomohiro KUBOTA to create FontSets using intelligently created font specifications 2000-05-16 John Harper * x.c: the old window type can now contain one of three different types of drawable: window, pixmap, or bitmap (single bitplane pixmap); there's also a function to grab the contents of a drawable to an image * images.c (Fmake_image_from_x_drawable): new function, the guts of Fwindow_icon_image, which now calls this new function * sawmill-ui.jl: set the WM_CLASS property on windows 2000-05-15 John Harper * frames.c (Qdefault_frame, Qnil_frame): deleted, nil-frame is defined in frames.jl, default-frame is never used 2000-05-14 John Harper * client.c: new option `-r FEATURE', evaluates `(require 'FEATURE)' 2000-05-12 John Harper * events.c (enter_notify): ignore NotifyInferior events (entering from inner window), leave_notify has always done this 2000-05-09 John Harper * version 0.27 2000-05-08 John Harper * sawmill-ui.jl (beautify-symbol-name): adapted to handle any type of argument, but only beautifies symbols * sawmill-ui.jl: fixed bug of not beautifying command names after `Copy' or `Insert' operations 2000-05-03 John Harper * sawmill-ui.jl (match-window:edit): use non-destructive operations when splitting property list into bool/non-bool sets 2000-04-30 John Harper * functions.c (do_raise_lower): signal an error if the window and sibling are the same window 2000-04-27 John Harper * functions.c (regrab_server): new function, to be called after the server may have been ungrabbed too soon * images.c (Fwindow_icon_image): new function, return an image representing a windows icon (adapted from Bruce Miller ) * functions.c (Fhead_count, Ffind_head, Fhead_offset, Fhead_dimensions): Xinerama support (untested) 2000-04-25 John Harper * sawmill_subrs.h, sawmill-ui.jl, main.c, images.c, display.c, client.c, Makefile.in: s/sawmill/sawfish/ where appropriate 2000-04-23 John Harper * main.c (main): set the sawmill structure to export all bindings 2000-04-17 John Harper * frames.c (list_frame_generator): lower the client window before configuring each frame part, otherwise the below-client attribute is ignored 2000-04-15 John Harper * images.c (find_image_file): use global_symbol_value () to dereference Qimage_load_path (it's not in the theme's gaol) * main.c (global_symbol_value): new function, calls Fsymbol_value () from the `sawmill' module 2000-04-14 John Harper * sawmill-menu.jl: added support for menu accelerators flagged by underscores (auto-detects if rep-gtk supports this), adapted from patch from Richard Kilgore 2000-04-12 John Harper * sawmill-ui.jl (ui-get-spec): look for errors in the output, if found, print a message or tell the capplet 2000-04-11 John Harper * frames.c (call_protectedly, call_protectedly_1): functions to call other [lisp] functions with error protection in place. Used to catch errors while creating frames * windows.c (Fmap_window_properties): new function 2000-04-09 John Harper * version 0.26 * main.c (main): if rep has modules, create a `sawmill' module that will be the wm's global namespace, it imports `rep' 2000-04-03 John Harper * fonts.c (Fget_font): set f->descent to the correct value, instead of to zero 2000-03-30 John Harper * selection.c: handle selection atoms as with other X11 atoms, i.e. convert literally from symbol name. So do (x-get-selection 'PRIMARY) instead of (x-get-selection 'xa-primary) 2000-03-29 John Harper * server.c, play-sample.c, main.c, keys.c, images.c, frames.c, fonts.c, flippers.c, events.c, display.c, cursors.c, colors.c: remove all direct references to `value' field of symbols * x.c: only use double buffering extensions if HAVE_X11_EXTENSIONS_XDBE_H is defined 2000-03-28 John Harper * play-sample.c: new plugin, use ESD and libaudiofile (when available) to play .WAV files (stolen from gnome-libs) 2000-03-27 John Harper * cursors.c (Fget_cursor): fix typo when calling make_bm_cursor (passing fg twice), patch from Alexander Barinov 2000-03-26 John Harper * frames.c (set_frame_part_bg): remember to mark fg as lost when calling a function to draw bg 2000-03-21 John Harper * x.c (drawable_from_arg): don't automatically look for back buffers in windows, require this to be done explicitly (Fx_create_root_xor_gc): hacky function to create a gc for doing xor drawing on the root window * functions.c (Fdraw_window_outline, Ferase_window_outline): deleted, now in lisp code * selection.c (Fx_selection_active_p, Fx_get_selection): new plugin, functions for retrieving X selections. Adapted from patch by Mark Probst , which was in turn adapted from Jade's selection handling * keys.c (Fsynthesize_event): fixed the relative pointer position calculation 2000-03-20 John Harper * windows.c (focus_on_window): don't focus on windows whose `visible' flag isn't set (crashes the gnome control center!?) 2000-03-12 John Harper * version 0.25.2 * x.c: double-buffering now works on all window types, not just those created by Fx_create_window () 2000-03-11 John Harper * events.c (handle_input_mask): detect if system clocks is rewound (could cause us to ignore timestamps) 2000-03-10 John Harper * main.c: updated usage information * functions.c (Fx_raise_window): added an optional second arg, the window to raise the first arg immediately above (Fx_lower_window): new function, symmetrical to x-raise-window * server.c, libclient.c: removed the incorrect assumption that I/O on sockets is atomic, should fix large requests on FreeBSD * fonts.c (Qfonts_are_fontsets): new variable, when set to nil, never load FontSets, only FontStructs. Currently t by default 2000-03-08 John Harper * functions.c (Fx_raise_window, Frestack_windows): these now accept window ids as well as window objects * x.c (x-window-back-buffer, x-window-swap-buffers): basic support for the X double-buffering extension 2000-03-06 John Harper * keys.c (eval_input_event, print_event_prefix): ported code from Jade to print prefix keys after a period * main.c (on_idle): don't ungrab the keyboard if in the middle of a multi-key sequence * keys.c (eval_input_event): only abort when receiving unhandled events if in the top-level event loop 2000-03-05 John Harper * version 0.25 2000-03-04 John Harper * main.c (on_idle): after being idle for one second in the outermost event loop, ungrab the pointer and keyboard. This may unfreeze the intermittent lockups reported by some people * keys.c (Qmulti_click_delay): new variable, the maximum delay between successive button press events to count as a click2 or click3 (from Martin Blais ) 2000-03-02 John Harper * sawmill-ui.jl: separate the keymap shell using a vpaned widget * sawmill-ui.jl: `beautify' symbol names in the keymap widget (s/[:-]/ / and capitalize first word). Also remove redundant `keymap' suffix from keymap names * frames.c (list_frame_generator): if resizing a window be smarter about when the shape is reinitialized (before the resize if the frame is growing, after otherwise). Also, move and resize the client window in a single request (configure_frame_part): set bit- and win-gravity of frame parts to StaticGravity * windows.c (fix_window_size): only call XResizeWindow () if not calling rebuild_frame () * frames.c (list_frame_generator): reorder some operations, maybe less flicker when resizing opaquely? * keys.c: support multi-key bindings. Create them by binding an event in one keymap to another keymap (or the name of the second keymap). Also, try to detect and avoid situations where the input devices are grabbed but we're not going to use the input (and thus get locked in an inner event loop) 2000-03-01 John Harper * x.c (Fx_fill_polygon): new function 2000-02-29 John Harper * functions.c (Fdisplay_message): clicking the pointer on the message window now removes it * commands.c (Fcall_command): re-enabled the following interactive codes: `a' (function), `C' (command), `D' (directory), `f' (existing file), `F' (file), `k' (event), `n' (number), `N' (prefix or number), `s' (string), `S' (symbol), `v' (variable) * events.c (key_press, button_press, motion_notify): always call XAllowEvents () with Sync{Keyboard,Pointer}, not Async * functions.c (Fgrab_window, Fgrab_pointer): more parameters to allow finer grab control (event modes, pointer confinement). Patch from Timo Korvola 2000-02-28 John Harper * gradient.c, flippers.c: don't use rep_dl_subrs or rep_dl_feature (some BSD systems have (had?) problems with data segment relocations) 2000-02-27 John Harper * x.c: new plugin (feature `x'), wraps some Xlib functions. Allows windows and GCs to be created and drawn with (from merlin@merlin.org with additions by me) * fonts.c (Ffont_ascent, Ffont_descent): new functions (from merlin@merlin.org) 2000-02-26 John Harper * sawmill-ui.jl: new option --flatten; display sub-groups inline instead of using a tree widget (good for control center). In normal `tree' item, don't put frame the widgets * keys.c (Fcurrent_event_string): fix typo when checking if an event is currently being handled * events.c (button_press): only use the context map if the window or its frame is visible 2000-02-25 John Harper * keys.c (update_keyboard_mapping): new function, updates the modifier data * events.c (mapping_notify): new event handler * sawmill-ui.jl: use `quotient' instead of `/' where appropriate. Define `quotient' to `/' if unbound * windows.c, functions.c, events.c, display.c, commands.c: use the non-fixnum number representations where appropriate (where 32-bit data may be found) * sawmill.h, main.c: define rep_INTEGERP (), rep_make_long_uint () and rep_get_long_uint () if rep_INTERFACE < 8 2000-02-24 John Harper * sawmill-ui.jl: put the theme README in a scroller 2000-02-20 John Harper * keys.c (Fsynthesize_event): new function, sends an event (key or mouse button) to a window 2000-02-15 John Harper * events.c (install_colormaps): new function, install all colormaps associated with a given window (including colormaps of it's associated windows) (property_notify): watch for WM_COLORMAP_WINDOWS changing * sawmill.h (Lisp_Window): added cmap_windows and n_cmap_windows fields * windows.c (add_window): initialise cmap_windows fields (window_sweep): free cmap_windows 2000-02-14 John Harper * version 0.24 * sawmill.h (Lisp_Font): support for both XFontSet and XFontStruct representations * fonts.c (Fget_font): if a FontSet can't be created, try to load a FontStruct (x_text_width, x_draw_string): switch on actual font representation * frames.c, functions.c: use x_text_width () and x_draw_string () 2000-02-11 John Harper * events.c (configure_request): marshal the event to an alist, then call configure-request-hook with it * client.c: copied the bouncing parentheses hack from librep (which was copied from guile) * keys.c (Fx_keysym_name, Fx_lookup_keysym): new functions 2000-02-10 John Harper * sawmill-ui.jl (match-window:edit): make three columns of boolean properties, not two 2000-02-08 John Harper * client.c (main): set rl_basic_quote_characters to include only the double-quote character (from Matt Krai) * events.c (save_timestamp): don't print the ``time backwards'' messages anymore * functions.c (Fdisplay_message): translate font names to fonts * colors.c, cursors.c, fonts.c, images.c (Fget_color, Fget_cursor, Fget_font, Fmake_image): if dpy == 0, return nil 2000-02-06 John Harper * functions.c (Fdisplay_message): if possible, keep the message window wholly on screen * main.c (main): run in a dynamic root * events.c (handle_input_mask): run all handlers in dynamic roots 2000-02-03 John Harper * cursors.c, events.c, frames.c (default-cursor, synthetic-configure-mutex, frame-draw-mutex, frame-state-mutex): now a function of a single parameter * frames.c (fp_sweep): comment out `fp->win == 0' assert, I think it should be harmless * commands.c, keys.c (last-command, this-command, prefix-arg, current-prefix-arg, eval-modifier-events, eval-key-release-events): these are now normal (passive) variables 2000-01-31 John Harper * events.c (send_synthetic_configure): remember to clear the pending_configure flag after sending the event 2000-01-30 John Harper * version 0.23 2000-01-27 John Harper * windows.c, images.c, fonts.c (Fwindow_put, Fwindow_get, Fimage_put, Fimage_get, Ffont_put, Ffont_get): use equal test on property names, not eq * sawmill-ui.jl (build-tree): put the root tree in a scrolled window * sawmill-ui.jl: new widget `tree' 2000-01-26 John Harper * fonts.c (fonts_init): don't cause following code to fail catastrophically if unable to load fixed font * frames.c (set_frame_part_fg): bail out if no font whatsoever 2000-01-25 John Harper * main.c: only call before-exit-hook if rep_INTERFACE < 8 * functions.c (Fx_delete_window, Fdelete_window): removed (Fsend_client_message): if format is 32, accept long-int style values 2000-01-24 John Harper * windows.c (add_window): fix bug of leaving window name unset if XmbTextPropertyToTextList () fails * functions.c (Fx_delete_window, Fx_kill_client): two new functions 2000-01-21 John Harper * windows.c (add_window): call after-add-window-hook after everything has been initialised 2000-01-20 John Harper * events.c (Vsynthetic_configure_mutex): new variable, while t, no synthetic ConfigureNotify events are sent to windows after they've been moved * sawmill.h (Lisp_Window): new flag, `pending_configure' * functions.c (Fmove_resize_window_to): new function, simultaneous move&resize * frames.c (list_frame_generator): when reconfiguring an existing frame window, set its position as well as its size 2000-01-19 John Harper * version 0.22 2000-01-18 John Harper * frames.c (refresh_frame_part): abort if trying to redraw a part without a window 2000-01-15 John Harper * frames.c (Fframe_part_put): only set values in the new `local_alist' field, in case `alist' is shared by multiple frame parts (the `local_alist' is scanned first) * sawmill.h (struct frame_part): new field `local_alist' * frames.c (Frebuild_frame_part): new function, analogous to Frebuild_frame (), but for a specific part of the frame * events.c (subtract_timestamps): made this function actually work (return negative values when necessary) 2000-01-14 John Harper * functions.c (Fdisplay_message): fixed specifying foreground colours using strings; abort when Fget_color returns rep_NULL; update the background pixel of any existing message window to the new color (from Matt Kraai ) * events.c (handle_fp_click, unclick_current_fp): protection against refreshing stale frame parts * frames.c (list_frame_generator): fixed stupid gc-protection bug when building new frames 2000-01-12 John Harper * frames.c: frame parts are now first-class lisp objects (Fframe_part_put, Sframe_part_window, Fframe_part_x_window, Fframe_part_position, Fframe_part_dimensions, Fframe_part_state, Fmap_frame_parts, Frefresh_frame_part, Frefresh_window): new functions (set_frame_part_fg, set_frame_part_bg): if the fg or bg object is a function, then call it to do the redrawing, with the frame part as the sole argument (Fframe_part_get): args are now `(FRAME-PART PROP)' * sawmill.h (struct frame_part): made into a lisp data type * events.c (Fclicked_frame_part_offset, Fclicked_frame_part_dimensions): deleted (Qenter_frame_part_hook, Qleave_frame_part_hook): now called with arguments `(WINDOW FRAME-PART)' * windows.c (window_mark_type): no need to call mark_frame_type anymore * keys.c: filter Scroll_Lock events as well as Num_Lock and Caps_Lock (from Matt Krai, with minor changes by me) 2000-01-11 John Harper * events.c (save_timestamp): new function, records a server timestamp with checks for validity * server.c (server_handle_request): call save_timestamp * events.c (record_mouse_position): only update button-press details on button-release events if they're not already filled * windows.c, keys.c, frames.c: revert to grabbing on the client window, grabbing on the client causes awkward problems with replaying events * events.c, windows.c (property_notify, add_window): support compound text properties in icon and window names * main.c (main): call setlocale (LC_ALL, "") * fonts.c, frames.c, functions.c, sawmill.h: use XFontSet instead of XFontStruct, and related other changes * gtk-style.c: call gtk_set_locale (), handle missing RcStyle's [ patch from Kondara MNU/Linux distribution, forwarded by Yukihiro Nakai ] * display.c (xa_compound_text): new interned atom * sawmill-ui.jl (build-frame-style): use a GtkCombo instead of a GtkOptionMenu to display the list of themes, also put the details box above the combo * events.c (get_server_timestamp): new function, jumps through hoops to get a recent timestamp direct from the server (record_event_time): be more careful about accepting timestamps, only if they look like they're actually _after_ the previously last-seen time (Fx_server_timestamp): new optional arg, when non-nil get a timestamp direct from the server * server.c (server_handle_request): don't set last_event_time to CurrentTime, instead fetch a timestamp from the server 2000-01-10 John Harper * keys.c (translate_event_to_x_key): return FALSE if no keycode exists for the specified keysym (i.e. the keyboard has no such key) * events.c (record_mouse_position): on button-release, don't cancel the saved position/window, just update the position. The button_press function will clear the position before it exits. This fixes the ``can't bind to -Off events'' bug. Pointed out by Matt Krai * keys.c (Fallow_events): if mode is `replay-pointer', then forget the time of the last click event (that is used to measure double-clicks) 2000-01-09 John Harper * version 0.21 * keys.c (lookup_binding): check for non-null current_x_event before accessing it 2000-01-08 John Harper * frames.c (create_window_frame): if actually creating the frame window, then call grab_window_events () * windows.c (add_window, remove_window): don't call grab_window_events () anymore * keys.c, frames.c (grab_window_events, grab_keymap_event, Fwindow_put): when grabbing events, grab on the frame window, not the client window * images.c (Fmake_image): _always_ returns a new image, by working around Imlib's annoying caching 2000-01-07 John Harper * sawmill.h: added fps_inactive_highlighted and fps_inactive_clicked * frames.c (get_pattern_prop): new function, called by list_frame_generator to fill the fp->bg, fp->fg and fp->font arrays. This now takes a new format, an alist mapping state symbols to values (the old formats are also still accepted). Current states are `inactive', `focused', `highlighted', `clicked', `inactive-focused', `inactive-clicked'. The last two are new, there inclusion removes the need for the highlight-when-unfocused option, so it's been removed * sawmill.h (FRAME_EVENTS): added VisibilityChangeMask (patch from Matt Krai ) 2000-01-06 John Harper * server.c (server_init): chmod the socket as well as the directory (for people with losing umasks) 2000-01-02 John Harper * frames.c (list_frame_generator): make `(cursor . nil)' work 1999-12-31 John Harper * commands.c (Fcall_command): accept closures as possible commands * main.c (main): use rep_load_environment () and rep_top_level_exit () * windows.c (window_mark): always call mark_frame_parts (), not just when w->frame != 0 (window_mark_type): call mark_frame_type * frames.c (mark_frame_type): new function, marks any frame parts that are being built but have not yet been added to a window 1999-12-24 John Harper * functions.c: when reading/writing X properties, use u_longs/u_shorts instead of CARD32s/CARD16s; otherwise things stop working on alphas (from George ) 1999-12-22 John Harper * windows.c, images.c, fonts.c (X_put): remove checks for immutable cons cells, can't happen 1999-12-20 John Harper * 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 * version 0.20 1999-12-17 John Harper * commands.c (Fcommandp): fixed for current autoload format 1999-12-15 John Harper * 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 ) 1999-12-14 John Harper * images.c (make_image): when adding to rep_data_after_gc, try to include the Imlib allocated data 1999-12-13 John Harper * 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 * 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 * sawmill-ui.jl: i18n for all natural language strings 1999-12-10 John Harper * 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 * 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 ) * images.c (Fbevel_pixel): new optional parameter BEVEL-PERCENT (from Chris Hanson ) (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 * keys.c (Fforget_button_press): new function, forgets about any remembered button press (for calculating click2's etc) 1999-12-07 John Harper * 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 * 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 * 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 * 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 1999-12-01 John Harper * 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 * 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 * 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 * 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 * windows.c (Fwindow_size_hints): added window-gravity field (Fwindow_border_width): new function [both mostly from merlin ] 1999-11-25 John Harper * 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 * 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 * 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 * 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 * images.c (Fbevel_image): patch from Scott Sams to fix some calculation errors 1999-11-11 John Harper * sawmill-ui.jl (build-color:clicked): remove left over comma from old backquoting 1999-11-10 John Harper * 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 * version 0.16 1999-11-06 John Harper * windows.c (Fget_window_by_id): new function 1999-11-05 John Harper * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * client.c (main): fix realloc bug 1999-10-25 John Harper * 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 1999-10-24 John Harper * 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 * windows.c (install_window_frame): call restack_frame_parts * frames.c (restack_frame_parts): new function 1999-10-22 John Harper * 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 * 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 * functions.c, events.c: added debugging output for X timestamps and [un]grabbing functions 1999-10-17 John Harper * version 0.13 * sawmill-ui.jl (build-frame-style:update-readme): handle themes stored in tar files 1999-10-16 John Harper * images.c (Fmake_image): support loading non-local images (by copying to a temporary file) 1999-10-14 John Harper * 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 * main.c (main): handle --version option; provide usage function to rep_init () 1999-10-12 John Harper * 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 * 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 * version 0.12 1999-10-09 John Harper * events.c (focus_in, focus_out): ignore events with detail NotifyPointer 1999-10-08 John Harper * 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 * 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 * 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 * 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 * 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 * 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 * server.c (server_init): chmod the socket to rwx------ 1999-10-01 John Harper * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * version 0.7 1999-09-18 John Harper * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * version 0.5 1999-09-04 John Harper * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * version 0.1 * main.c (Qsawmill_version): new variable 1999-08-02 John Harper * 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 * 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 * 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 * 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 * 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 * 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 * 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