Next: Colors, Previous: Introduction, Up: Top
This lists the user-visible changes made to Sawfish, and which releases they occurred between. For more detailed information see the ChangeLog files in the Sawfish source tree.
StaticGravity while
reparenting windows (Michal Maru¹ka)
SKIP_TASKBAR state (Chris Boyle, me)
window-history-key
variable)
_NET_WM_NAME as UTF8_STRING type (Christian
Krause)
adjust-position-for-gravity/y
_NET_WORKAREA)
accept ()
grow-pack bug fixes (Daniel Pfeiffer)
grow-pack module (Kai Großjohann, Daniel
Pfeiffer)
bindtextdomaincodeset function if rep implements it
(Christophe Fergeau)
apply-command-keys function (David Bustos)
wm-spec module causing nautilus desktop
window to cover panel
display-window function that can prevent the
window getting focused
librep 0.14 or newer
menu-program-stays-running variable now defaults to true
by popular demand
focus-desktop
_WIN_WORKSPACE property of each window
decorate-transients option works again with shaded windows
window-history
module
Extract some more translatable strings (Vlad Harchev)
Crux theme now has an extra button mode: Default,
like Mac OS Platinum but also has an iconify button. Used by default
grow-pack module now works with windows which specify
increments (Kai Großjohann)
kill-client
nil instead
_WIN_WORKSPACE property
changing and will move the window in response
configure-ignore-stacking-requests and a
similarly-named window property. When set stacking requests from
windows are ignored (Matt Tucker)
exit-type – returns the type of exit in
progress
XParseColor unless we actually have a
display connection (merlin)
setlocale to avoid trashing the locale
preferences
shade-button button class (many themes created it
anyway)
sawfish.wm.util.recolor-image module, currently
contains a single function for recolouring parts of images based on a
given colour gradient
delete-group. Deletes a whole group of
windows. With default bindings, shift-click on the close button to
invoke this command
window-icon-image will return the mini-icon
XUrgencyHint not being defined before X11R6
bind-keys is called with zero
arguments
crop-image function when checking validity
of height parameter (martin@whoever.com)
choice widgets may now contain descriptive names,
syntax is (symbol "description")
focus-windows-when-mapped option to only apply to
non-transient windows (this option is now enabled by default)
top-left and off-center.
top-left is now the default mode for non-transients
_SAWFISH_WM_RAISE_WINDOW and
_SAWFISH_WM_LOWER_WINDOW. Used by maybe-raise-window and
maybe-lower-window functions.
These are similar to WM_TAKE_FOCUS, in that if the window
supports the protocol, it's up to it whether or not it raises (or
lowers) the window in question. These functions should only be used
where the user hasn't explicitly requested the restacking
An example usage is an application that doesn't want its window to be raised due to a button-press event that initiates a drag operation
menus-include-shortcuts, disabled by default
(Unai Uribarri)
WM_TRANSIENT_FOR set to the
root window as children of all windows in the group (it causes too many
annoying effects), instead just decorate these windows as transients
group and transient iconification modes
better, don't use a recursive method, instead use one pass to identify
the windows to change, then another to make the changes. In
transients mode, only change the state of shared transients if
they will have no visible parents afterwards
_WIN_HINTS client
message (with a similar format to the _WIN_STATE message)
sawfish.wm.commands.viewport-extras, some
commands for viewport for viewport navigation (Dams Nadé)
never-iconify and never-maximize
window properties when appropriate
focus-windows-when-mapped set would cause any shaded windows to
be deleted
font-ascent and font-descent functions to the
gaol
"" to denote a null doc string (which has bad
side effects when internationalized)
composite-images function
gtk-style program
(michaelj@maine.rr.com)
() as a valid image modifier color component
defgroup forms
correctly
sawfish.wm.ext.error-handler). When
loaded it records the most recent errors, and the time at which they
occurred. Use the display-errors command to display all recorded
errors.
window-history-clear command to forget
history for all windows.
defcustom forms may now a :widget-flags keyword, a
constant list of symbols passed to the configuration tool. Current
flags include: expand-vertically and expand-horizontally
sawfish.wm.util.ping module, it implements the
_NET_WM_PING protocol of the new window manager spec.
destroy-notify-hook is no longer called asynchronously
sawfish.wm.state.wm-spec module to match the
current (almost final) draft of the new GNOME/KDE window manager spec
avoid property
raise-window,
lower-window, raise-lower-window. The set of windows
affected by these commands is determined by the user-raise-type
(either the individual window, the window and any transients, or the
entire group). The old commands of these names are now called
foo-single-window.
Most modules now use these commands when raising or lowering windows, allowing the stacking model to be configured globally.
Also, try to avoid displaying maximize buttons in windows whose hints prevent them from being maximized
wm-spec module
edge-flip-delay option now applies when dragging
windows
sawfish-themer
persisitent-group-ids option
enter-exit focus mode, focus isn't removed due to
enter/leave events due to pointer grabs (fixes the bug with Mozilla URL
completion)
focus-click-through behaviour with
respect to frame decorations
window-wants-input-p to check if the
InputHint is set before reading the value
-backwards, e.g.
cycle-windows-backwards (Merlin, me)
window-urgent-p and
window-state-change-hook is called with urgency state
when it changes
shade-hover mode (adapted from Eli
Barzilay)
window-list-skip. Unified with GNOME
skip-winlist hint
:tooltip tag
dimensions property in window matching was called
size by mistake
sp-cost: functions from
the sawfish.wm.placement.smart module
disable-auto-raise correctly
move-window-foo commands
(Yoshiki Hayashi)
WM_TAKE_FOCUS message, only focus the window
if its `Input' hint is set
sawfish.wm.gnome.integration and
sawfish-themer (Christian Marillat)
0.13
sawfish.wm for window manager code, sawfish.ui for
configurator and sawfish.gtk for GTK+ utilities
Compatibility should have been preserved as far as possible, through
the use of module aliases. The user module that unmodularized
user code is loaded in should look very similar to the old environment.
However, code using private functions, probably will not work
New features written as modules can either import modules individually,
or just open sawfish.wm to get the core functionality
define-command and autoload-command add entries to this
mapping. define-command takes a name and a function (and some
other optional arguments). The old style of defining commands still
works, but only in the user module
sawfish-client now provides the same repl as the normal
rep program. E.g. this allows the module system to be easily
inspected
Also, the module of each loaded theme is available for inspection under
themes.theme-name. (With themes using top-level defines
instead of a single let* block, this is useful for debugging)
sawfish.client module provides lisp functions for
communicating with a running window manager. Also, the protocol has
been modified to support proper communication of errors, which are then
re-raised on the client-side. This should make debugging client-server
code more obvious
add-window-menu-toggle to add items to the
`Toggle' sub-menu of each window
ConfigureRequest events in a way that is compliant
with the ICCCM—honour the window's win_gravity setting
(defaulting to NorthWest gravity), instead of assuming
Static gravity
sawfish.wm.util.x plugin
(Ryan Pavlik)
To support this, new window property desktop denoting a
“desktop” window; new function desktop-window-p recognizing
one of these things (or the symbol root)
pointer-motion-threshold option. Pointer motion
events are only generated when the pointer moves at this many pixes
away from the position it had when the button was pressed
scale-image, composite-images, and
crop-image.
maximize-avoid-avoided (Jonas Linde)
sawfish.wm.ext.tooltips module:
display-tooltip, remove-tooltip
sawfish.wm.viewports module:
select-workspace-and-viewport. Renamed some workspace functions:
ws-move-window => move-window-to-workspace,
ws-copy-window => copy-window-to-workspace,
ws-insert-workspace => insert-workspace,
ws-move-workspace => move-workspace,
ws-remove-window => remove-workspace.
get-visible-window-edges function to
use proper keyword parameters, and added some new keywords
help:about and gnome-about. Added a
sawfish-about script to implement the first of these. Added
associate menu items to the `Help' menu
cycle-skip, defines whether the window
is included when cycling the focused window. (Dave Dribin, me)
throw out the top of the program by
mistake
find-head function, to allow Xinerama support to
work
synthesize-event to scan the window tree for a child
window accepting button events (E. Jay Berkenbilt)
image-set and related functions will add an alpha channel
to the image when necessary (when using gdk-pixbuf)
sawfish.wm.ext.match-window
quote-menu-item function to help with this)
set method of the icon widget
hidden attribute, ignore it
FIXED_POSITION GNOME hint (renamed old
fixed-position property as client-set-position;
fixed-position now means don't allow the window to be moved by
the user)
transients-above option can now be set per-window
:require keyword in defcustom always causing
the module to be loaded, not just when the option is non-nil
quote-event command now works with applications that
ignore synthetic events (adapted from code by Timo Korvola)
define-frame-type-mapper allows modules to affect the mapping
from window type to frame type. E.g. the shading module uses this.
(fixes the bug that changing the frame type of a shaded window didn't
work)
variable-customized-p; use this to avoid
redefining user-modified options
:type (optional color) weren't being converted when passed
between the wm and the configurator, leading to reader errors
A side-effect of this is that updated custom files will not be compatible with previous versions of the wm (though old custom files will work with new versions)
map-windows and filter-windows
default-bevel-percent was being ignored)
move-window-to-viewport command to correct for
1... indexing
activate-viewport-column,
activate-viewport-row
raise-window-and-transients,
lower-window-and-transients and
raise-lower-window-and-transients,
raise-transients-and-pass-through-click.
As the normal window stacking commands, but restacks the “transient-group” of the window. This includes the window itself and any transients it has, and any windows that it itself is a transient of.
These commands are used in the default keymaps
WM_TRANSIENT_FOR property to the
root window denotes that the window is a transient for the whole group
image-ref,
image-set, image-fill, image-map. New color
accessor function color-rgb-8. New function
root-window-id
sawfish-ui: optionally use some GNOME
widgets, more lisp widget types, some bug fixes
command-sequence. Allows individual bindings
to invoke a sequence of commands
iconify-group-mode and uniconify-group-mode
replace iconify-whole-group and uniconify-whole-group.
New commands iconify-transient-group, and
uniconify-transient-group
:type* key to defcustom, like :type,
but value is left unquoted
WM_NORMAL_HINTS (was using base-size
instead of min-size in places)
window-history module won't resize a window to a size that
violates its size constraints
run-shell-command command)
match-window options). Also, extra widget types and containers
may be added as extra Lisp modules
nil
scale-foreground. The
cursor attribute may now be a function
centered, centered-on-parent and
under-pointer placement modes clamp the window into the current
work area (i.e. without overlapping windows that shouldn't be covered).
Added a stagger placement mode
window-history options to placement group.
Fixed some more bugs and sub-optimal default option values
SKIP_FOCUS window hint sets never-focus
property on window, as well as the ignored property
window-history module behave more sanely (don't
save iconified or shaded state; include window name when generating
keys for transient windows)
beos-window-module the standard window menu (require
old-window-menu to get the original version). Also made this
display the windows' class names
window-history—automatically saves window
attributes when they are explicitly set by the user, then copies these
attributes to windows with the same WM_CLASS as they are
created. This is loaded automatically if you have no .sawfishrc
frame-type-fallback-alist maps each frame type to the type to
try if the original type isn't available in the chosen frame style.
Note that for this to work, themes must return nil when they
don't support the requested frame type, until now, the convention had
been to return the default frame definition, so most if not all themes
will need changing. (This doesn't include themes created using the
make-theme module.)
best-fit placement mode
user-controllable. Set the sp-cost-components variable to a list
of cost functions and the weight to apply to that metric. E.g. by
default it gives 50% importance to the distance from the placement to
the focused window, and 25% each to the distance to the pointer and to
the “future-unusefulness” of the area being covered
beos-window-menu to redefine the window menu to
group items by the window group that they are a member of (in the
absence of actual group information, it will heuristically build groups
by matching window titles)
edge-flip-warp-pointer, whether or not to warp
the pointer after edge-flipping (Paul Warren)
display-window:uniconify-to-current-workspace,
controls whether windows uniconified by display-window should be
moved to the current workspace (John N S Gill)
x library now supports creating and then drawing to
pixmaps. The pixmaps can then be grabbed to images using the
make-image-from-x-drawable function
cycle-windows sequence is terminated by an
unknown event, re-handle that event after exiting (so that e.g.
M-TAB can be followed by another M- qualified event without
releasing Meta)
enter-root and leave-root
raise-groups-on-focus option, it caused unstable
window flickering in certain cases
current-head,
current-head-dimensions, current-head-offset. Some
placement modes should handle multiple heads sensibly, as should window
maximization and edge snapping.
map-window-properties (me),
window-icon-image (Bruce Miller)
raise-group and lower-group to
preserve the stacking of the group, then change the selected window.
Added new command raise-lower-group
raise-groups-on-focus
below-client frame-part attribute
workspace-menu to add the focus-marking asterisk
(John N S Gill)
WM_STATE property is set each time a window is
mapped, not just the first time
selection, adds functions
x-selection-active-p and x-get-selection for retrieving X
selections (Mark Probst)
prompt-for-window,
prompt-for-workspace and select-workspace-interactively
(Dave Pearson)
window-anim module enabling asynchronous animations after
window events. Currently only two animation styles wireframe and
solid, and they only animate window iconification
audio-events module; maps window manager events to audio
samples (played using esd by default, but can be configured to use any
program)
xterm-program to decide which terminal program to
use (James Antill)
toggle-window-iconified (Jens-Ulrik Petersen)
raise-windows-when-unshaded
random
mode; also increased sp-avoided-windows-weight by an order of
magnitude (Dan Winship)
get-cursor to use the correct background color when
creating cursors from vectors (Alexander Barinov)
get-font to set `descent' property correctly
x plugin, also only
support this if configure finds the correct header files
synthesize-event to generate correct relative
pointer positions
input-focus to theme-callable functions
display-window when it's applied to iconified
windows
fonts-are-fontsets and
fontset-languages-re to work around broken X servers
ws-move-window to not remove the window if source
and dest are the same (Rob Hodges)
sp-prune-points function (Dan Winship)
move-viewport-to-window to only flip viewports if
window isn't already on the current viewport (Merlin)
x-raise-window; added symmetrical
function x-lower-window
x module
/ in themes to be the quotient function
(integer division), which is what they expect. The divide
function can be used for real division
x, a basic Xlib binding for creating and
drawing in windows (Merlin, me)
call-command-with-output-to-screen, prompts
for and invokes a command, then displays any output it emitted (bound
to A-x in default keymaps)
multi-click-delay, maximum time in
milliseconds between button presses to count as click2 or
click3 events (Martin Blais)
edge-flip-only-when-moving (Yaron M. Minsky)
cycle-prefix,
cycle-class (Kai Großjohann); can now be bound to events with
more than one modifier (Timo Korvola)
uniquify-window-name; new property
unique-name. Forces the window to have a unique name
size-window-add-column,
size-window-subtract-column, size-window-add-row,
size-window-subtract-row
magnetism
(the old method), attraction and resistance. (Merlin, me)
grow-window-{left,right,up,down} and
pack-window-{left,right,up,down} (Kai Großjohann)
WM_COLORMAP_WINDOWS protocol
synthesize-event, font-ascent,
font-descent, call-with-keyboard-grabbed
define-placement-mode and
define-focus-mode—make defining these things easier. Focus
modes are now settable for each window individually
current-event-string function
x-cycle command
configure-request-hook. The new configure handler respects
window gravity when resizing
configure-auto-gravity. When enabled the window
gravity is implied by the position of the center of the window. (e.g.
try placing the GNOME control center in the bottom right corner of the
screen, then click on an item that causes it to resize)
XCreateFontSet causes—fall back to
XLoadQueryFont if possible
Also, remove the need to call custom-add-required in
.sawmillrc, it's always done now
focus-when-mapped, and
gravity (overrides the hinted gravity value)
under-pointer and
centered-on-parent
resize-edge-mode, replaces
resize-by-frame-class and resize-add-edges>. Also allows
twm-style resizing (Mark Probst, me)
default-cursor,
synthetic-configure-mutex, frame-draw-mutex,
frame-state-mutex are now functions
x-keysym-name, x-lookup-keysym,
decode-event, encode-event.
move-resize-inhibit-configure
fp->win == 0 assertion, it should be harmless and
was triggering for some people
ws-insert-workspace (Kirk
Saranathan)
custom-add-required. If
you have a .sawmillrc you'll need to do this manually
move-resize-window-to doing a combined
move/resize. New variable synthetic-configure-mutex, when set
holds off sending synthetic ConfigureNotify events to windows
until it's unset (this is held while interactively moving or resizing
windows)
after-add-window-hook. Called with a single
parameter, the window that's has just been adopted
x-kill-client, delete-window-safely.
send-client-message now groks long integers (i.e. cons cells) in
32-bit data (Timo Korvola)
window-put, window-get, image-put,
image-get, font-put, font-get: use equal to
compare keys, not eq
error-handler, implements a simple alternative
error handler (and allows the much-maligned beep to be turned off),
requires rep 0.11+
shade-hover, unshades windows while the pointer
is over them
window-menu,
shorten sticky entries as usual (James Antill)
raise-or-pass-through-click,
raise-and-pass-through-click-if-focused
move-cursor, various commands for moving the
mouse pointer; these commands are bound to the cursor keys when moving
or resizing windows
WM_NAME is a
null text property
skip-winlist and
skip-tasklist properties I'd stupidly broken
move-workspace-forwards and
move-workspace-backwards commands
uniconify-to-current-viewport option
delete-empty-workspaces command
New or updated functions to access frame parts directly:
frame-part-get, frame-part-put,
frame-part-window, frame-part-x-window,
frame-part-position, frame-part-dimensions,
frame-part-state, map-frame-parts,
refresh-frame-part, rebuild-frame-part
Other new functions: refresh-window
sawmill-themer to emit code to tell the window
manager that the theme is editable. The wm adds an `Edit Theme...'
option to the Customize menu when appropriate
call-after-property-changed function can now be given
a list of properties to monitor (James Antill)
call-after-state-changed, monitors a list of
window states (i.e. things like iconified, shaded, ...) and calls a
function when any of them change. The window-state-change-hook
now has a second argument (apart from the window), the list of symbolic
states that changed (James Antill)
skip-winlist and skip-tasklist to
the window matcher when GNOME support is enabled (Ben Liblit)
mono theme
display-message function update background color,
and gracefully handle invalid color specifiers (Matt Krai)
window-keymap. (Matt Krai)
inactive, focused,
highlighted, clicked, inactive-highlighted,
inactive-clicked. (Last two are new)
sawmill-themer. A GUI for creating simple
themes (those without any parts defined by functions)
gnome-int, loaded by sawmill-defaults if
GNOME is around, sets up some GNOME'ish things
toggle-single-window-mode
make-image now
always returns a new image
call-command accept closures
(cursor . nil) work correctly in frame definitions
Create new window instances by using the copy-to-next-workspace,
copy-to-previous-workspace, and copy-to-workspace:n
commands. Merge instances by moving them to the same workspace, or
using the delete-window-instance command
ungrouped. Means to put
the window in a group on its own
commandp function when applied to autoload stubs
gnome-logout command (Jens Finke)
raise-window-and-pass-through-click command to pass
<click2>, etc, events through to frame parts
frame-part-get, server-grabbed-p,
forget-button-press, resize-window-with-hints,
window-in-workspace-p, windows-share-workspace-p
never-focus, raise-on-focus
size, in terms
of the window's size hints
popup-apps-menu command (Gérard Milmeister)
define-frame-class when creating keymaps
(set ...) custom types
raise-window-and-pass-through-click command to
pass-through subsequent clicks
move-resize-raise-window is set
auto-foo-alist and
bar-windows-re variables, they're obsoleted by the general
match-windows mechanism
mono
show-message function, replaced by
display-message with a better calling interface; also displays
multi-line strings
Hyper modifier, prefix is H-
resize-add-edges)
fixed-position property as sticky-viewport,
and focus-proxy-click as focus-click-through
New option `--disable-nls' to disable i18n
call-after-property-changed and
gtkrc-call-after-changed to allow themes to receive these events
(hooks are now off-limits to themes)
raise-window-and-pass-through-click; bind it
to a mouse button in the window-keymap to get the “raise window
on click” behaviour that seems popular
slide-window-x and slide-group-x for x
one of: left, right, up, down
ignored property of windows
(Julian Missig)
stacking-order function
bevel-image function (Scott Sams)
gnome-menu code when GNOME binaries aren't in
the first $PATH item; also accept non-alphanumeric language codes
AnyModifier and a
specific button
auto-group-alist and persistent-group-ids
variables).
For most commands working on single windows, there's also one operating on the group that the current window is a member of. (With the notable exception currently of moving windows.) There's also options controlling whether (de)iconification operates on windows or groups
gnome-share-directory, also look in
/etc/X11/applnk for menu entries
edge-flip-type)
after-framing-hook: called whenever a window's
frame is changed or recalibrated
first-fit-or-interactive
move-cursor-shape, resize-cursor-shape,
select-window-cursor-shape)
cycle-windows only
finds a single window; also, abort immediately if there's no windows to
cycle through at all
WM_NORMAL_HINTS property is read after it's
been updated
maximize-fill functions to respect the
maximize-ignore-when-filling option
avoid property instead of the
maximize-avoid property; new functions window-avoided-p
and avoided-windows; new regexp avoided-windows-re
delete-empty-workspaces
microGUI
window-id and
window-frame-dimensions functions. Replaced
query-last-pointer function by query-button-press-pointer
while-moving-hook, while-resizing-hook
WM_TRANSIENT_FOR property changes
window-outside-viewport-p (Andreas Degert)
SM_CLIENT_ID or WM_COMMAND has to match
resize-by-frame-class, when enabled (the
default), the resized window edges are chosen to match the class of the
clicked frame part (i.e. matching the cursor shape)
window-moved-hook, window-resized-hook,
after-initialization-hook, shape-notify-hook.
centered placement style
highlight-when-unfocused)
sm-after-restore-hook
set-frame-part-value—makes customizing the
frame-part-classes variables easier
_WIN_CLIENT_LIST property not being set properly (both
missing windows immediately after they're adopted, and of intentionally
skipping ignored windows)
cycle-disable-auto-raise); option to restrict cycling to the
current viewport (cycle-all-viewports)
lock-first-workspace is now enabled by default, and
prevents both the first and last interesting workspaces being moved
inwards
below-client
root-window-keymap is
searched for key-press events
shaped-transient
window types (make the window completely unframed)
decorate-transients enabled
cycle-windows could leave a window
originally under the pointer that's unfocused, drawn as though it is
focused
lock-first-workspace, prevent the first
workspace from being deleted when it's empty
ignore-window-input-hint, to always give
windows the focus, whether they say they will accept it or not
cycle-warp-pointer and
cycle-focus-windows
move-viewport-x and move-window-x commands
(for x being left, right, up, or
down)
microGUI by Ryan Lovett
ryan@ocf.berkeley.edu, based on the QNX Photon screenshots
(require 'gnome-menu) to your
~/.sawmillrc file to load it
transients-above-parents)
workspace-send-boundary-mode)
send-to-workspace:x for x from 1
to 9
foreground property of each frame part may now be an
image instead of a piece of text
smaker, uses the foreground images capability to
do a somewhat WindowMaker-like theme (with the absolute-e images). This
theme is extensively customizable—all images, colors, dimensions,
etc...
PseudoColor visuals
xterm command to launch an xterm
next-workspace-row and previous-workspace-row
commands. Together with the workspace-columns variable these
mimic a 2d desktop
cycle-through-workspaces option, there's now
workspace-boundary-mode—one of stop, wrap-around
or keep-going
move-snap-ignored-windows)
override_redirect
attribute while unmapped
focus-windows-on-uniconify)
preallocated-workspaces option
override-frame-part-classes variable—allows all
frame properties to be overridden on a per-class basis
auto-window-type-alist variable mapping window
names to border types
eval-modifier-events and
eval-key-release-events to allow catching these types of
keyboard events, disabled by default
alt-keysyms and meta-keysyms describe the virtual
modifier assignments
frame-part-classes variable). This should ensure that different
themes have the same feel (but a feel that may be customized by the
user)
removable property). Nothing makes use of this yet
gtk theme, draw bevels on window decorations
focus-proxy-click controlling whether to pass
the focus-inducing button-press event to the underlying window (in
click-to-focus mode)
sm-window-save-functions and
sm-restore-window-hook hooks). See lisp/workspace.jl for
an example
move-show-position,
resize-show-dimensions)
auto-frame-style-alist
variable associates window name regular expressions with frame styles.
Also, the window-ops-menu has a new submenu with all possible
styles
preallocated-workspaces, the number of
workspaces to create at startup
gradient theme to create full-sized gradient
images, trading memory for quality
menus and custom customize
options into normal variables (they're not particularly intuitive)
renderer property in frame definitions. This property is a
function called with args (image state); it should
draw a background into image for the specified state (nil,
focused, highlighted or clicked)
gtk. This reads the default GTK style and uses
the associated colors and pixmaps to decorate windows. It doesn't try
to handle engine-based themes. It should automatically detect when the
default style changes (if changed by the GNOME control center). Do
`sawmill-client -c gtk-reload-style' in the shell to reload the
style manually
gradient theme uses these and on-the-fly rendering to do
afterstep-like window titles
customize:group for each
group.
Also created the variable theme-load-path containing the list of
directories searched when trying to load a theme. By default it
contains two directories: ~/.sawmill/themes/ and
prefix/share/sawmill/version/themes.
select-workspace:X for X between
1 and 9
sawmill-client; invokes
the named interactive function
unframed window type
place-transient-mode)
window-ops-menu could be displayed from
one window but then affect a different window
move-snap-edges and move-snap-epsilon)
sloppy-focus variable, it's replaced by
focus-mode. This can currently be one of enter-exit
(normal focus follows pointer), enter-only (“sloppy” focus) or
click (click to focus)
keymap property of
the window under the pointer, not the focused window (as with keypress
events)
before-exit-hook, called immediately before
shutting down
raise-selected-windows)
warp-to-selected-windows)
brushed-metal and simple themes now define all
four standard frame types
simple frame style can now be
customized (simple-normal-color and simple-active-color)
decorate-transients)
transients-get-focus)
focus-windows-when-mapped)
foreground, background and font
attributes of each frame part may now refer to a function
First proper release