Scwm NEWS --- history of user-visible changes.  -*- text -*-
Copyright (C) 1997, 1998 Maciej Stachowiak and Greg J. Badros
See the end for copying conditions.

Changes to scwm-0.8 (released XX-August-1998)

* extract-docs documentation extraction system

* usage-logging system -- UDP packet gets sent to a counter machine
  every time scwm starts up.  Disable by setting SCWM_DO_NOT_LOG_USAGE
  environment variable before starting scwm

* all primitives have been documented

* better standardized names, more symmetric getters and setters
  throughout the Scwm API

* improved, configurable message-display window when doing window moves,
  resizes; also usable via a string prompt argument to new primitive,
  select-window-interactively

* much improved scwm.el Emacs interaction mode, including apropos and
  procedure help

* multibyte character support (thanks to ITANI Eiichiro)

* squashed titlebar style

* added mini-icons option to show-window-list, permit using a window
  list to select a window w/ select-window-from-window-list

* improved X synthetic keystroke and string sending

* integration with guile-gtk widget bindings

* window objects printable form now includes the title of the window

* alpha-quality optional integration of Cassowary constraint solver
  see http://www.cs.washington.edu/research/constraints/cassowary/

* much improved fvwm2 module support (thanks to Danius Michaelides)

* Use XmuPrintDefaultErrorMessage instead of ad-hoc format for X11 errors

* Provide ability to popup menus in an appropriate position when
  selected from a titlebar decoration using new args to popup-menu primitive

* New primitives to support X-Properties (thanks Robert Bihlmeyer)

* Lots of other new primitives: testing mod-mask availability,
  restacking-windows, listing windows in their stacking order, X
  resources, window-transient-for, capturing?, set-X-server-synchronize!

* Much improved window gravity support

* Much improved window placement configurability, including use of
  placeement-proc and transient-placement-proc object properties

* Hooks: invalid-interaction-hook, cannot-grab-hook

* Lots of internal rewrites, including making the code type safe by
  C++'s more strict rules, using init_XXX functions and guile-snarf
  pervasively, and better modularizing sub-pieces of scwm (especially
  reducing numbers of exposed prototypes in header files, and making
  more functions static), cleanup of Screen struct, ScwmWindow struct.
  Use SCWM_PROC, SCWM_SYMBOL throughout, and fixed lots of bugs that
  extract-docs found relating to mis-identifier argument requirements.

Changes to scwm-0.7 (released 22-June-1998; 0.7a 26-June-1998)

* The start of a TexInfo manual.

* New (app scwm auto-raise) module. The #:auto-raise,
#:auto-raise-delay, #:auto-raise-focus-proc, #:auto-raise-unfocus-proc
and #:auto-raise-unfocus-delay window style options added by this
module control auto-raise. Still not as general as I'd like (it should
be possible to set an arbitrary number of independent focus-unfocus
pairs), but will be eventually. See the auto-raise.scm file for exaple
usage.

* Added kill-all-fvwm-modules to (app scwm fvwm-module which kills all
active fvwm modules; add it to the shutdown hook.

* Added transient? primitive for checking wether a window is
transient.

* Removed bind-event; everything it was used for is now provided by
the new hook system.

* New system for hooks - allows scwm to set up distinguished Scheme
variables that contain a list of procedures to be invoked on certain
actions, possibly with arguments.  Guile's usual add-hook! macro can
be used to add hooks, and remove-hook! can be used to remove them. 

Here is an example (the (app scwm flux) module must be loaded for this
to work:

	(define (message-show-error . args)
	  (message (with-output-to-string
		     (lambda ()
		       (display "scwm error: ")
		       (map (lambda (arg)
			      (write arg)
			      (display " ")) args)
		       (newline)))))

	(add-hook! error-hook message-show-error)
	(remove-hook! error-hook message-show-error)

Available hooks are:

	  error-hook

	  The procedures in this hook are called with the appropriate
	  throw arguments when an uncaught error occurs.

	  broadcast-hook
	  broadcast-config-hook
	  broadcast-name-hook

	  Called when certain actions happen; used by the fvwm module
	  emulation and auto-raise. Usage in code is not reccomended,
	  as the arguments are strange and poorly specified.

	  before-new-window-hook
	  after-new-window-hook

	  Replace the new-window-hint and window-hint `bind-event'
	  arguments. before-new-window-hook is invoked with the window
	  as an argument before the window sturcture is fully well
	  formed; only window hints should be processed at this time. 
	  after-new-window-hook is called when the window structure has been
	  processed in order to set style options. Both get the window
	  object as an argument.	 

	  shutdown-hook

	  Called before scwm shuts down, with no arguments.

* Support for timer hooks. The following procedures may be used to set
and cancel timer hooks.

	add-timer-hook! USEC PROC - schedule a call of procedure PROC with
 	no arguments to occur after about USEC microseconds have elapsed
 	(it may take somewhat longer if there are many x evebts to
 	process). Return a handle suitable to be passed to
 	remove-timer-hook!

	remove-timer-hook! HANDLE - remove the specified timer hook from
 	the hook list, preventing it from being invoked if it hasn't been
 	already.

* Support for input hooks. The following procedures may be used to add
and remove input hooks.

	add-input-hook! PORT PROC - schedule a call of procedure PROC with
 	no arguments to occur whenever PORT has input
	available. PORT must be an open input file port (since
	internally it's file descriptor is passed to select). Return a handle
	suitable to be passed to remove-input-hook!

	remove-input-hook! HANDLE - remove the specified input hook from
 	the hook list.

* ICCCM-compliant detection of modifier keys; the keysyms bound to the
modifier are actually checked. Also, "s-" is used for the supper
modifier, not "P-".

* Added X-version-information and X-display-information primitives,
which are needed for FvwmM4 module compatibility, but generally useful
in their own right; they take no arguements and return lists of useful
information about the X server and display.

* Added restarted? primitive, which returns true if this is not an
original invocation of scwm, but rather one after a restart.

* Color handling changed; colors are now cached as fonts and
images. Also, set-window-colors! and set-menu-colors! have been
removed, and the following procedures have been added:

	make-color STRING - replaces load-color

	color-properties COLOR - returns the properties of a color object:
 	currently only name and the X pixel value it uses.

	clear-color-cache-entry STRING - clears an entry in the color
 	cache; shouldn't be necessary unless you do something really weird
 	to your X server, but provided for consistency.

	make-relief-color COLOR FACTOR - factor is a floating point number
 	that is multiplied by the color's saturation and luminosity in HLS
 	sppace. This is used with specific factors to 
	
	set-hilight-foreground! COLOR, set-hilight-background! COLOR -
 	these replace set-hilight-colors! FG BG

	set-menu-foreground! COLOR, set-menu-background! COLOR,
 	set-menu-stipple! COLOR - replace set-menu-colors!
	
	set-hilight-factor! FLOAT - sets the factor that is used by
 	windows with the current decor to generate the relief "hilight"
 	color for the regular and hilight background.

	set-shadow-factor! FLOAT - sets the factor that is used by windows
 	with the current decor to generate the relief "shadow" color for
 	the regular and hilight background.

	hilight-factor, shadow-factor - retrieve the settings of the above
 	two factors from the current decor.]

	set-menu-hilihght-factor! FLOAT, set-menu-shadow-factor! FLOAT,
 	menu-hilight-factor, menu-shadow-factor - analogous to the above
 	but for menus, and are global, not decor-specific.
	
	All procedures that take a color (except color-properties) will also
 	accept a string that specifies a color.

* New procedure scwm-version returns the current scwm version.

* Converted build system to automake and libtool; dependencies should
work much better now, and a shared library of libscwmexec is built and
installed on systems that support it. Also, make uninstall works.

* --with-lispdir=DIR option to configure allows you to specify where
emacs-lisp files are to be installed; for instance, if you have emacs
installed in /usr and are installing scwm in /usr/local, you may want
to configure --with-lispdir=/usr/share/emacs/site-lisp

* scwm.el Emacs mode for scwm files much improved; provides
intelligent tab completion, apropos, font-locking, support for emacs
and xemacs 19 or 20, and other good stuff.

* Greatly improved error handling; an error should now display the
file, column and line number where it occured, as well as giving a
detailed message and a backtrace.

* scwmexec and scwmrepl programs much improved; errors and output
resulting from evaluation of commands are now displayed.

* Numerous bug fixes.

Changes to scwm-0.6

* Changes to installation: Scwm no longer installs it's scheme modules
in the guile install locations; instead, it installs them in its own
prefix and adds it to the guile load path. The environment variable
SCWM_LOAD_PATH will override this location.

* Support for fvwm2 modules: Scwm can now execute fvwm2 modules, using
an interface written almost entirely in Scheme. This is only slightly
slower than the native fvwm module support. The new support is mainly
in the new (app scwm fvwm-module) module, using the following
procedures:

run-fvwm-module PATH RC-FILE CONFIGURATION #&optional OTHER-ARGS

  Runs the specified module. PATH is the full path to the module
  binary. RC-FILE is the path to the fvwm2rc file, which does not have
  to actually exist for most modules. CONFIGURATION is a list of
  strings which are passed as the module as the configuration
  information. OTHER-ARGS is an optional list of strings to be passed
  extra command-line arguments to pass to the module. The
  procedure returns an fvwm-module object which may be passed to
  kill-fvwm-module.

kill-fvwm-module FVWM-MODULE

  Kills the module.

See the fvwm-module.scm file for additional documentation.

* New external program protocol: scwm now supports an improved
external program protocol which allows other programs to send commands
to a running scwm and get the results. Two new programs take advantage
of this:

  `scwmexec' will send scwm an expression passed on the command line,
  and print the return value. 

  `scwmrepl' gives the user an interactive session with a running
  scwm.

There is also new emacs support based on these programs, in the form
of scwm.el. scwm.el allows either evaluation of single expressions or
access to the interactive repl from within emacs. See
utilities/dev/scwm.el in the distribution for more details.

These changes obsolete the old scwmsend program, scwm --interactive
mode, and the old emacs interaction mode, all of which will be removed
by the next release.

* Improvements to images: Support for images (to be used as icons,
buttons, tiles, etc) is much improved.

  - The path for loading images is now an ordinary Scheme variable,
  image-load-path, which the user may set to a list of string path
  prefixes.

  - Multiple requests to load the same image file will return the same
  object through the use of a cache.

  - Loaders may be specified for additional image formats.

The new procedures are:

make-image FILENAME

  Return a scheme object representing the image from FILENAME; if
  FILENAME is an absolute path or relative to the current or parent
  directory (starts with "/", "./" or "../") the image is loaded
  directly, otherwise the image-load-path is scanned.

image? OBJECT

  A predicate determining if an object is an image object.

image-properties IMAGE

  Returns an asssociation list of several properties of the image.

load-xbm PATHNAME

  Loads a file as an X bitmap directly from PATHNAME, treating it as
  an absolute path. This procedure is not intended for direct use, but
  rather to be registered as an image loader.

load-xpm PATHNAME

  Loads a file as an X pixmap directly from PATHNAME, treating it as
  an absolute path. This procedure is not intended for direct use, but
  rather to be registered as an image loader.

register-image-loader EXTENSION PROC

  Registers PROC as an image loader for files ending in
  EXTENSION. EXTENSION should either be a string starting with a dot,
  or the string "default", which is used to register the default image
  loader.

unregister-mage-loader EXTENSION

  Unregisters the image loader for the specified extension.

clear-image-cache-entry FNAME

  Clears the appropriate entry in the image cache; this may be
  necessary if an image is currently loaded, the file is changed, and
  the user wants to load the updated version. Note that images are
  cached both by the name passed to make-image and the fully qualified
  path name, so two clears may be necessary.

In addition to X bitmaps and X pixmaps, GNU zipped X pixmap
(".xpm.gz") files are now supported automatically; the icons and
mini-icons could in theory all be installed gzipped to save space.

* Foreign format image loading through conversion: The new (app scwm
image-loaders) module supports several image loaders that attempt to
convert a variety of formats through external programs to a natively
supported format.

ImageMagick-loader

  Tries to convert the image to xpm using the `convert' program from the
  ImageMagick package.

netpbm-loader

  Tries to convert the image to xpm using the `anytopnm' and
  `ppmtoxpm' programs from the ImageMagick package.

try-everything-loader

  Tries both ImageMagick-loader and then netpbm loader if the former
  fails. In the future, it will support any other available conversion
  loaders.

support-image-conversion

  Installs try-everything-loader as the default loader.

* Improvements to fonts: Fonts are now more properly treated as Scheme
objects and should be garbage collected more effectively. They are
also cached like images, so multiple calls to make-font with the same
font name will return the same font object.

make-font FONTNAME
  Renamed from load-font.

font-properties? FONT
  Returns an association list of properties of the font.
  
clear-font-cache-entry FONTNAME
  Analogous to clear-image-cache-entry

* Improvements to menus: Menus have been much improved. They now
include support for side pixmaps a la fvwm95, specification of the
fonts and colors to use per individual menu, and a nicer interface for
specfying menus. The new interface is in the (app scwm base) module
and should be used as follows:

menu MENUITEMS #&key IMAGE-SIDE COLOR-BG-IMAGE-SIDE IMAGE-BG COLOR-TEXT 
  COLOR-BG FONT

  Creates a menu object. The list of menuitems is mandatory, all the
  other keyword arguments are optional settings.

menuitem LABEL #&key IMAGE-ABOVE IMAGE-LEFT EXTRA-LABEL ACTION
  HOVER-ACTION UNHOVER-ACTION

  Creates a menuitem suitable for inclusion in a menu. The label is
  the only required part; keywords may specify images to put above or
  on the left, additional text to right-justify, an action, and hover
  and unhover actions. The hover and unhover actions are invoked when
  the cursor lingers over a menu item without clicking, and the
  unhover action when the mouse cursor leaves a hovered menu
  item. This is used to implement submenus. However, it need not be
  used directly. The action may be a procedure of no arguments, a
  string, or a menu. If it is a procedure, the procedure will be
  called when the program is selected, if a string, it will be run as
  a program. If it is a menu, it will be invoked as a submenu, and the
  hover and unhover actions will automatically be set up properly.

menu-sparator
  This variable should be passed in lieu of a menuitem when a
  separator is desired.

menu-title 
  This variable should be passed below the title entry of a menuitem
  when a title separator is desired.

* Improved icon handling: Several bugs in icon geometry handling have
been fixed. Control over the displayed icon has also been enhanced
with several new procedures and style options.

set-icon! IMAGE #&optional WINDOW
  Sets the window's icon image to icon. ICON may be an image object,
  a string specifying an image file, or #f, indicating no image.

set-force-icon! BOOLEAN #&optional WINDOW
  Specifies wether or not to override the application-supplied
  image. The default is to ignore the setting established by set-icon!
  for applications that provide an icon bitmap or icon window, and use
  the app-provided icon instead. This is the case even if the
  set-icon! setting is #f. However, setting the force-icon setting to
  #t will make the user-requested icon take precedence.

set-icon-title! BOOLEAN #&optional WINDOW
  Specifies wether or not the icon title is shown.
	
set-show-icon! BOOLEAN #&optional WINDOW
  Just determines wether or not the whole icon is shown at all, without
  affecting any other settings (so setting it to #f and then back to
  #t will hide and then restore all the original icons).

The corresponding style options for use with window-style are
#:icon, #:force-icon, #:icon-title and #:show-icon.

* Improved example scwmrcs: Two new example scwmrc files are
available: juhp.scwmrc and sds.scwmrc. These demonstrate usage of some
of the new advanced features.

* Support for /etc/X11/wmconfig from Red Hat Linux 5.0: The new (app
scwm wmconfig) module allows you to create a menu that matches the
spec in the /etc/X11/wmconfig directory under Red Hat Linux 5.0.

* Several other useful menus: The (app scwm std-menus) module provides
convenience procedures to create menus that allow launching xlock in a
variety of modes, and telnetting to a set of specified hosts.

* Broadcast hooks: intentionally undocumented for now.

* Input hooks: intentionally undocumented for now.

* The icon distribution is now separate again, and has it's own
installation process. It is reccomended that it be installed with the
same --prefix passed to configure.

* Many bug fixes and general clean-up.


Changes to scwm-0.5

Many bug fixes to the build process and the program itself.

Integrated the icon distribution.

The documentation ahs been updaed to roughly reflect current reality.


Changes to scwm-0.4

set-xor-value! has been renamed to set-rubber-band-mask!.

Window-shades can now optionally be animated. (See gjb.scwmrc for an
example.)

Images are now Scheme objects. Anything that takes an image filename
string can now take either a filename string or an image
object. make-image creates an image object. set-icon-path! and
set-pixmap-path! are now gone and replaced by set-image-path!.

Paths are no longer environment-variable expanded; use the Scheme
procedure getenv if you need this.

wait-for-window now takes a predicate rather than a wildcard
string. You can pass (wildcard-matcher NAME) to get the old effect.

Implementation of decors and faces to allow a fair amount of
customization of the look. The low-level interface consists of the
make-decor, set-current-decor!, set-window-decor!, make-face,
set-title-face!, set-button-face!, set-button-mwm-flag! and
set-border-face! procedures, but the new (app scwm decor) and (app
scwm face) modules provide the friendlier wrappers with-decor,
title-style, button-style and border-style.

Added support for set-smart-placement-is-really-smart!,
set-click-to-focus-passes-click!, set-click-to-focus-raises! and
set-mouse-focus-click-raises!. These are obscure, but being able to
have click-to-focus without raising the window is nice.

New (app scwm fvwm-compat) module with some fvwm-compatability
procedures that are otherwise not very useful.

Added send-button-press and send-key-press to send synthetic mouse
button and keypress events.

Added animated moves - move-to can optionally animate the movement of
a window. See gjb.scwmrc for examples.

Added unbind-key and unbind-mouse - bindings can now be removed.

Added a sendscwm program and scwm-buffer.el; allows some interaction
with a running scwm, but the interface is not yet two-way.

Added sample.scwmrc/gjb.scwmrc, a scwmrc example that has more
features and shows off a lot of new functionality.

Improvements to the build process to make VPATH and dependencies work
correctly.

Many bug fixes.


Changes to scwm-0.3

Fixed prev-window and next-window to deal with windows that do not
accept the window focus. 

Fixed the wildcard matching mechanism.

Removed much unused C code. 

Many bug fixes to the distribution and configuration script; libm and
libdl are checked for, libguile is checked for more accurately, and
the srcdir/VPATH mechanism works.

Assorted fixes to the C files, including a fix of the longstanding bug
in interactive move that made moves start in the wrong place.

Changes to scwm-0.2

Autoconf configurability. No more futzing with imake, now you can just
./configure; make; make install.

Command line option support including interactive mode (scwm -i) which
reads your .scwrc and then gives you a read-eval-print loop with the
window manager. A recent snapshot of guile is needed for this to work
(but that should no longer be necessary in the next scwm release).

Fvwm2 Style command implemented (in a way that lets you change
[almost] any style option dynamically per window). User extensions to
the style command are also possible. Several non-fvwm style options
(e.g. start-maximize, start-window-shaded) are already available. See
the (app scwm style) module.

Improvements to the system.scwmrc file enabled by the implementation
of styles, and from user suggestions.

Changes to scwm-0.1

All fvwm2 functionality except styles, decors and modules is
implemented. 

Many bugs/limitations from the last release were fixed.

Scheme modules that provide extra useful operations are now available.

Initial release: scwm-0.0.0

Nearly all fvwm functionality is available, but a number of useful
things are missing.


Copyright information:

Copyright (C) 1997, 1998 Maciej Stachowiak and Greg J. Badros

   Permission is granted to anyone to make or distribute verbatim copies
   of this document as received, in any medium, provided that the
   copyright notice and this permission notice are preserved,
   thus giving the recipient permission to redistribute in turn.

   Permission is granted to distribute modified versions
   of this document, or of portions of it,
   under the above conditions, provided also that they
   carry prominent notices stating who last changed them.


Local variables:
mode: outline
paragraph-separate: "[ 	]*$"
end:
