Toybox 1.3 - and icon-manager with colour pixmaps. Requires Motif, the Xpm-library and a C++ compiler to build. Works under [v]twm (see below), ol[v]wm and mwm. Changes from 1.2 to 1.3: Works with [v]twm, ol[v]wm and mwm : To make it work with [v]twm, include "IconifyByUnmapping", "NoIconManagers" in your .[v]twmrc file to make [v]twm not produce an icon when a window is iconified - toybox will handle it. Also if you're using Doors and their names are (say) door1, door2 etc. then insert the following lines into your .Xdefaults: toybox*door1: DONT_SHOW toybox*door2: DONT_SHOW ! in general, use : toybox*<door-name>: DONT_SHOW The lines above tells toybox not to produce an icon for the doors that you use. You may also want to get rid of the icon-manager that comes with [v]twm. See the man-page of twm for details. To make toybox work with ol[v]wm, you may want to get rid of the flashing lines ol[v]wm draws when windows are iconified. To do this, add these lines to your .Xdefaults: olwm*IconFlashCount: 0 olwm*IconFlashOnTime: 0 ! use "olvwm" instead of "olwm" if you use olvwm. See the man page for ol[v]wm for details. You might also like to set toybox*overrideRedirect: True or, if you're using [v]twm, include "toybox" in the list of windows specified in the "NailedDown" list in your .vtwmrc file. This is so that the window-manager doesn't wait for you to place the window and toybox will persist across all parts of your virtual-desktop in [v]twm. You also might like setting: toybox.x: 0 toybox.y: 0 ! to make toybox appear at the origin . Toybox now supports transparent windows - getting rid of that needless opaque window the icons were sitting in. Define HAVE_SHAPE_EXTENSION when building. See instructions below on how to check if your version of X supports the SHAPE extension. You are advised to use the SHAPE extension if you have it. New resources: toybox*floatOnRoot: YES or: toybox*floatOnRoot: NO enables or disables transparent windows. Effective only when toybox is built with HAVE_SHAPE_EXTENSION defined. toybox*layoutPolicy: top_left or bottom_right or right_top or left_bottom etc. but *not* top_bottom, left_right, bottom_bottom etc. Changes from 1.1 to 1.2: New resources: toybox*window-title-15chars-max: DONT_SHOW tells toybox not to produce an icon for that window. The semantics when windows change names is still undefined. ie I still haven't made up my mind! Clicking the right-mouse-button raises the corresp. window, mapping it first, if necessary. Shift and Button3 on an icon will delete it - you can't get it back! Deleting all icons with Shift+Button3 will make toybox restore (as best it can) mwm's original icons and then exit. Note: Toybox is provided "as-is", without any express or implied warranty. In no event will the author be held liable for any damage arising from the use of this software. If you would like include some of your own enhancements/changes, please email me at thc2@doc.ic.ac.uk and we could work something out. To build toybox, 1. build Xpm-library(get this from export.lcs.mit.edu:/contrib if you need to. It builds pretty easily ). Take note of where the library called libXpm.a is built, along with xpm.h and xpmP.h. 2. Check to see if your version of X has the SHAPE extension: Look into /usr/include/X11/extensions/ for a file called shape.h. If it's there, add "-DHAVE_SHAPE_EXTENSION" on the command-line when building. If you're not sure whether or not you have the SHAPE extension, try running "xeyes" and see if it has a transparent, non-rectangular window. If it does, then you have the extension. Type: <name-of-your-C++-compiler> -DHAVE_SHAPE_EXTENSION -O -o toybox toybox.cc -I<directory-where-the-XPM-header-file-is> -L<directory-where-libXpm.a-is> -lXpm -lXm -lXt -lXext -lX11 Exclude "-DHAVE_SHAPE_EXTENSION" if your version of X doesn't support the SHAPE extension. You're advised to use the SHAPE extension if possible. eg. (a) g++ -O -o toybox toybox.cc -I/usr/include/ -L/usr/lib/ -lXpm -lXm -lXt -lXext -lX11 or: (b) g++ -O -o toybox -DHAVE_SHAPE_EXTENSION toybox.cc -I/usr/include/ -L/usr/lib -lXpm -lXm -lXt -lXext -lX11 if you have g++ and xpm.h,xpmP.h are in /usr/include and libXpm.a is in /usr/lib. Use (a) if you don't have the SHAPE extension, (b) otherwise. 3. Inspect the file called Toybox. It contains sample X defaults for toybox. The format of some of the defaults is like this: toybox*<name-of-the-window>: <full-path-name-of-XPM-file> The <name-of-the-window> should be replaced with the string that appears below the image in toybox's window. To find out the string needed, run toybox first and then the program with the desired window. Check to see the name that toybox labels the image with and use that. The string is 15 chars max. To change this, change the #define in toybox.cc. To register the default XPM-file to use, change the right- hand-side of the line that says toybox*defaultPixmapFile: <right-hand-side> to the full pathname of the default XPM-file. Other defaults: toybox*<name-of-the-window>: DONT_SHOW tells toybox not to produce an icon for that window. toybox*floatOnRoot: YES or: toybox*floatOnRoot: NO enables/ disables transaprent windows. toybox*layoutPolicy: top_left or bottom_right or right_top or left_bottom etc. but *not* top_bottom, left_right, bottom_bottom etc. Specifying "bottom_right" means that icons will stay as close to the "bottom" as possible and to the "right" as far as possible, in that order. Only meaningful when floatOnRoot is "YES". Experiment with top_right, right_top to see the difference. In the distribution, you will find some sample XPM-files that can be used with toybox in the pixmaps/ directory. Some of them are referred to in the X-defaults file, Toybox. Change the pathnames as appropriate. Once you have modified the file "Toybox", append it to your .Xdefaults and use xrdb to register these resources. eg. xrdb -load ~/.Xdefaults 4. Toybox is ready to run! Type "toybox". Note: To make your own XPM-files to use with toybox, build "grabber" : Change the #include for xpm.h in grabber.cc to the appropiate path-name of xpm.h Type: g++ -O -o grabber grabber.cc -I<directory-where-XPM-header-file-is> -L<directory-where-libXpm.a-is> -lXpm -lX11 To run grabber, just type "grabber name-of-file" and draw a rubber-band rectangle over the region of the screen you want to save by pressing the left-mouse-button at the top-left-hand corner of the region and dragging the mouse until the rectangle drawn covers the area you want to grab. Let the mouse-button go and the area covered in the rectangle will be saved in <name-of-file>. Email any suggestions/bug-fixes/kludge-zappers to: thc2@doc.ic.ac.uk There will be the odd bus-error or two. If you think you have found a memory-leak/bug in toybox, please feel free to email me. No flames, please. Tse Huong Choo Dept of Computing, Imperial College, 180 Queens Gate, South Kensington, London SW7 2BZ, London, UK. [ Thanks to: Kenneth "N." Flaxman <kenlaw!knf@uunet.UU.NET> for some bug-fixes ... keep 'em coming! ]