# $Id: TODO,v 1.75 2000/01/06 00:36:28 gjb Exp $ -*- outline -*-

See also doc/dev/scwm-1.0-release-todo

* Right click to get at cancel/window-selection menu during interactive-selections
  -> also permit escape to cancel a window selection
  -> right-click could bring up a window-list menu with a first option "Cancel"
* make nonant selection permit using only ternants --01/05/00 gjb

* constraints
** Improve error handling in constraint solver
** right-click menus for toolbar
** debug timer-hook problems
** use ternant-only selection for alignment constraints. --01/05/00 gjb
** Reorder widgets in constraint investigator --01/05/00 gjb
** make label draw visualization in constraint investigator --01/05/00 gjb

* Copyright issues -- get release from UW

* Leader windows and window groups could be made implicit

* make scwmrepl take options w/ getopt. e.g., -v for a startup message
  re: documentation and apropos and autoloading of (app scwm doc) module

* Improvements to ScwmButtons
;;; o Extend ScwmButtons to permit animated icons when mouse is over button
;;;   (like ui-constraints buttonbar)
;;; o Extend ScwmButtons to have a right-click menu for
;;;   -> turning on/off tooltips
;;;   -> changing orientation
;;;   -> changing auto-orientation

* layers support for GNOME

* path-cache.scm -- test w/o zsh

* Revisit all FIXME lines

* improve look of scwm-options-dialog, expose more options.
** (copy econf's widget layout?)
** reflection module and optargs support for more information about procedures

* Integrate menus, icons, cursor-pixmaps w/ theme infrastructure

* window style options dialog ala KDE (i.e., improve the stylist module)

* face.c (add_spec_to_face_x) should use color objects, not strings, for gradients; see also colors.c (AllocLinearGradient)

* Improve esound wrapper

* Test proplist module better

* multi-window animated move/resize; scheme level slower, not-synchronous, anim. move/resize
** do this with constraint solver and a "t" variable?  Super cool!

* make gravity of windows visible somehow

* Finish C-level API review, renaming things, adding getters, etc

* Finish documenting scheme procedures

* Module-global docstring, and module scanning for preferences support

* beta testing
Maciej has access to ensure it builds and runs on Linux, NetBSD, Irix,
Solaris and SunOS.  On each of this try compiling and running guile-1.3.1
(should we test both w/ and w/o threads?);  see BUILD-PLATFORMS

After Scwm 1.0:

* Integrate z-ordering constraints

* better dynamic linking test for platforms like HP/UX?

* Advice (like emacs) mechanism for augmenting procedures 
** (Robert has done some work on this)

* interactive declarations

* rewrite configure.in

* Multi-line message windows -- maybe just use gtk for this...

* Autoloading, and ##autoload scanning

* separate frame-size and client-size; introduce client-offset window parameter
-> like fvwmscroll

* Generalize stickiness -- permit windows to appear on multiple desktops,
  but not all (can we do anything funky for viewports, too?)

* Generalize stays-on-top -- Layers code from fvwm2?  shadows for showing
  depth?  Needs to have this for GNOME support!

* overlay plane support (or grab server during constraint draws)
** http://www.motifzone.com/tmd/articles/Overlay/oplanes.html

* event rewrite
** Read about Tk's multi-event sequences:
> The relevant user-level documentation is in the bind manpage (man 3tk
> bind); in particular, the section "multi-event sequences and ignored
> events" describes how multi-event bindings are matched against
> events.  The implementation is in tkBind.c:Tk_BindEvent().
  -- says Carl Witty

* decorations rewrite

* finish window struct rewrite.

* split into on-demand loaded modules of primitives


Other Stuff

* Documentation stuff
** denoting user-options variables, and /**VAR markers
** extra sections in manual
*** high-level scwm introduction
*** docs on scwmexec/scwmrepl, emacs interface
*** brief intro to scheme
*** command-line arguments --done 09/07/98 gjb
** documentation strings in scwm scheme modules --done August 1998 gjb

* Organize and automate testing of scheme/tests/*.scm files
** can we use xlab? http://www.alphalink.com.au/~mvertes/xlab.html

* Constraint embedding
** Flesh out ui-constraints-classes -- Jeff N.
** Use toolbar widget, not hbox - guile-gtk is incomplete here
** Enable/disable checkboxes (instead of menu)
** animated windows to new position when resolve
** make ClVariables always connect to a scheme level object --done 09/05/98 gjb
*** Screen (for clv-s part of the pssci)
*** window (for clv-s part of the Psw-s)
*** cl-variable (for bare cl-variables)
** consider using cleaner subclassing w/ partial wrap model, instead of C-like void pointers
** virtual desktop and sticky interaction with the constraint variables
** z-order stacking constraints to replace add-hoc stays-on-top, raisewindow, lowerwindow
** See also ../cassowary/local/TODO
** rubberband-resizing fixes -- generalization of the rubberband

* Add delays for reducing the number of configurenotify events
 that a client receives when being resized opaquely

* WM_ATTENTION patch for xterms (from Robert Bihlmeyer), integration with zsh instead?

* Gnome clue proposal support

* General cleanup
** more static function hidden behind modules
** pervasive use of VALIDATE macros
** fewer primitives that do work themselves
instead they should just process arguments and call C functions that do
the real work -- those C functions would then be the core of a WM library
** better naming conventions for these C-level functions
specifically, I'd like the non-primitive C-level functions to all start
with capital letters.  Obviously I prefer Hungarian!
** fewer global variables, fewer function static variables
** separation of of initialization work (may be overkill)
separate init_MODULE which registers the SMOB, and
init_MODULE_LATER_WORK which needs to be called after all SMOB types
exist and the X11 connection and screen information have been
initialized.  (init_MODULE functions should ideally not have an order
dependence as they do now -- especially if it's not documented, as it
isn't now).

* Primitive for XGetCommand, XrmParseCommand, XrmGetResource (see AddWindow())

* Add checks about redefining keystrokes, if not already done

* only move mouse with moving window if a keyboard command, or forced to -- allow user to control this + update man page for menustyle animated

* accelerating mouse movements w/ keyboard shortcuts

* Layers support (staysonbottom, etc.)
** constraints could do this nicely, too

* X Selection support
** Gtk have functions?  Wrap Xt Instrinsics (libXt)?

* Better error handling  -- this may be more of a guile problem
** more consistent use, especially abstractions for argument type checking
** Warn if ')' encountered when reading top-level -- don't die!


* Other useful primitives/procedures --08/02/98 gjb (inspired by GWM, other wms)
** (meminfo) ; Return string describing memory usage information
** (current-screen), (screen-count)
** (list-of-screens) ; list of managed screens (multi-screen support is iffy?)
** (last-key) ; return last key pressed
** (set-mouse-acceleration! ACCEL), (set-mouse-acceleration-threshold! PIXELS)
** (set-colormap-focus! WINDOW) -- rename set-colormap-focus! and colormap-focus to [set-]colormap-focus-policy
** (window-client-size) (window-client-position) (window-client-borderwidth) ;dimensions for the client (application top-level window, not the wm frame) 
** (window-user-set-position? WIN), (window-user-set-size? WIN) ; tell if user specified position/size on command line
** (window-program-set-position? WIN), (window-program-set-size? WIN) ; tell if client programmatically specified position/size on command line
 - I thought I added these! Will fix ASAP - Maciej
** (windows-at-position X Y), (windows-at-virtual-position X Y)  ; return in stacking order 
 - Could just be an abstraction on top of get-stacking-order (see above) - MS
** visibility change hooks (fully-obscured, partially-obscured, unobscured) -- subsumed by event rewrite --08/07/98 gjb

* Message (size/position) window needs to be more dynamic, customizable
** permit control of its position
** nestable stack of these for displaying messages


* administrative b.s.
** cvsweb
** gnats for problem reporting

* Memory profiling -- instrument NEW and FREE and keep track of
alloc/dealloc to see where the memory is going... guile support for this?

* getters for setter functions

* Better error handling system -- gettext?


* color scheme wrappers need reference counting; whole rewrite like image?

* replace ColorPair struct w/ scheme-bject based

* New event handling mechanism
** event objects?
** event binding objects?

* Menu functionality
** placement of side-menus 'top, 'middle, 'bottom (Todd Larason?)
** existence testing for menu items
** side images should have optional alignment to top, center, or bottom
** pie menus
** auto splitting
** sticky menus (like button-bar)
** cacade-menu vs. popup-menu
** make-menu-item, make-menu
** horizontal vs. vertical vs. matrix
** auto-cascade vs. auto-matrix when too long
** reverting mouse position when only keyboard used
** extra-information list of properties (e.g, options for drawing, behaviour)
** animation
** keyboard short cuts using the new event model
** smarter placement of menus that is aware of the context of the popup-menu (or give args to popup-menu so button decorations can do inform popup-menu of a left edge or right edge constraint)
** pinup menus?  e.g. like the button bars
** multi-columns?
** horizontal?

** keyword argument checking -- give me errors instead of silently failing --done!
** get a line number!  -- done!
** Don't crash and burn so often -- done!
** keep trying on .scwmrc especially! -- done!

* New threads stuff & widget embedding -- GTk?

* Add a hook to the scwm_error handler routine passing the request error and event type; provide a module to make these human readable -- see X-error-describe

* scwm.h has some stuff that belongs in window.h; separate these out better

* add_window.c, borders.c seem to duplicate some functionality
** figure out what each should do and remove extraneous stuff
** modularize the window decorations as C functions

* figure out dynamic loading issues
** what is guile's support for this?
** test with the drawmenu.c functions
** menu objects should be able to specify a .o file containing the functions they want to use to do the drawing

* Write some graphical reconfiguration tools.

* Interactive move/resize should permit using a real color, not just an xor-value, as an option (hard w/o an overlay plane)

* Quote key feature -- like C-q in Emacs, C-v in shells

* rewrite of remaining copyrighted code  to allow release under GPL

* Refine undo feature


** DONE STUFF
* GNOME icons are not positioned --09/29/99 gjb

* use ms, not usec for timer hooks --09/26/99 gjb

* Rename scwm/scwm directory to scwm/src --09/26/99 gjb

* quoting keystroke support-- must ungrab keystrokes or do something w/ synch grabbing

* Web Link to bug tracker

* XTest module

* Make sure that scwm and guile-gtk interoperate reasonably well;
provide some example uses of guile-gtk for scwm.
** ask-string implementation
** guile-gtk imitation of fvwm-buttons


* Improve the gravity handling stuff.
** Respect gravity on program resize
** Respect gravity on resize-to
** Let user get/set gravity.

* Support for custom cursors --done 07/03/99 gjb

** (keycode->keysym KEYCODE), (keysym->keycode KEYSYM) --07/04/99 gjb
*** window closing hook? (upon removal of the window?) -- done 09/17/98 gjb
*** (with-window WINDOW) to make WINDOW be the implicit target of (get-window) primitive -- done 09/17/98 gjb
    Maybe should have set-window-context! and window-context routines that with-window is just a syntax around --09/02/98 gjb
*** (window-shaped? WINDOW), (window-icon-shaped? WIN) --done 09/02/98 gjb
*** (rotate-cut-buffers) --done 09/02/98 gjb
*** (invert-color COLOR) ; return a new color by inverting COLOR --done 09/02/98 gjb
*** (elapsed-time) ; get running time of scwm --done 09/02/98 gjb
*** (X-resource-get NAME CLASS), (X-resource-put NAME VALUE) --done 08/07/98 gjb
*** (window-client-machine-name WINDOW) ; name of host on which client is running -- done --08/05/98 gjb
*** (make-string-usable-for-resource-key STRING) ; replace [.*& ] with _'s -- use regexp --done [in flux] 08/05/98 gjb
*** (lower-window-below LOWERWINDOW BELOWWINDOW) ; lower LOWERWINDOW to just below BELOWWINDOW done --08/02/98 gjb
*** (raise-window-above RAISEWINDOW ABOVEWINDOW) ; (these two in terms of restack-windows) done --08/02/98 gjb
*** (color->string COLOR) ; return an X11 string representation for COLOR (e.g., #cc88cc) done --08/02/98 gjb
*** (get-wm-command WIN) ; get WM_COMMAND property (in terms of window-xproperty) -- done [in flux] 08/05/98 gjb

DONE --04/14/99 gjb
* generalize select-window to permit proc to be called when would-be-selected win changes

* Add session manager support
** TEST IT!  Add hooks to scheme code for various messages, etc.
*** Robert said he could do this
** configure test for libSM, libICE, link with -lSM -lICE and #define XSM
** #include <X11/SM/SMlib.h>
** initialization routines in scwm-smc.c
** call initSM() from scwm.c
** main loop processing of ICE messages, i/o multiplexing w/ select

* Fix up style handling a bit; make more convenient ways to match
styles only on one of resource class/resource instance/ window title,
and add convenient ways to match on certain other things.

* Promote generally useful things from flux.scm to somewhere supported

* use real hook for auto-raise module (window-focus-change-hook)

* window-group feature (at scheme level) for applying operations to multiple windows



* Done for scwm 0.8:

* Add a `get-stacking-order' primitive -- renamed `list-all-windows-in-stacking-order'
** returns the window list in the stacking order. done --08/03/98 gjb

* Make lsm file -- [needs final update of file size] done --08/04/98 gjb




* Done:

* Fix Perry Metzger's long-standing bug with all the timing-related
things on NetBSD. --8/31/98 gjb

- Implement error reporting and output redirection for the scwmexec
protocol, and make setting the SCWMEXEC_REQWIN property safe against
race conditions; with these, scwmrepl should be a total replacement of
the --interactive option.

- get rid of sun-headers.h -- we should just include the proper files

- Opaque resize -- afterstep and others do this --07/25/98 gjb

- use placement function for window placement (suggested by Sam Steingold <sds@usa.net>)

- Make scwm work with automake, and libtool where appropriate; this
should make setting up loadable modules much easier.

- Clean out all of the artifacts of the FVWM function system.
  [ I think that stuff is all gone now - MS ]

- Respond to scwmsend-s via some reasonable iccm
  - libICE?
  - ToolTalk?
   [ both of these are way too complicated, the new X properties
     method is lightweight but should be able to support what
     we need - MS]

- legacy module interface -- see utilities/dev/fvwm2-pager-demo
   [ done, see the fvwm-module module - MS ]

- replace MyFont struct w/ scheme-object based -- font scheme wrappers
still use the MyFont garbage; clean this up [ done - MS ]

- Finish implementing (useful) Fvwm functions as Scheme procedures. 
[this is mostly the style, decor, desk and path stuff,
modules should be punted.]

- Make scwm work with autoconf.

- Synthetic mouse presses

- Synthetic key presses

- Animated window shades --gjb 11/9/97 


;;; Local Variables:
;;; eval: (require 'filladapt)
;;; eval: (hide-sublevels 1)
;;; 
