1# CTWM Change History
2
3
4## 4.1.0  (2023-03-26)
5
6### Backward-Incompatible Changes And Removed Features
7
81. Support for `VirtualScreens` has been removed.  This was an early
9   attempt to allow some manual configuration of multiple monitors, but
10   carried with it a lot of caveats and strange behaviors.  The current
11   automatic RANDR and manual `MonitorLayout` features are a replacement
12   for anywhere this ever really worked.
13
141. `ctwm`'s captive mode support has been removed.  This includes the
15   `--window` and `--name` command line arguments, and the
16   `f.adoptwindow` and `f.hypermove` functions.  Be sure to remove any
17   references to those functions from your config file.
18
191. Support for `WindowBox` has been removed, along with the
20   `f.fittocontent` function related to it.
21
221. The minimum cmake version has been bumped to 3.6.  This is available
23   in standard packages back to CentOS 6, and we appear to have actually
24   been using syntax requiring 3.5 for a while unknowingly anyway.
25
26### New Features
27
281. Support for understanding multi-monitor layouts as something other
29   than a single giant rectangle added.  The RANDR X extension is used
30   for determining how your monitors are laid out.  The various
31   `f.\*zoom` functions now zoom on the monitor the window is currently
32   on, and new `f.x\*zoom` functions are added to zoom across your entire
33   display.  Various internal geometries can be specified
34   RANDR-output-relative; see doc of _e.g._ `IconManagers`.  Contributed
35   by Maxime Soulé <<btik-ctwm@scoubidou.com>>.
36
371. Added `MonitorLayout {}` config var for overriding the layout of
38   multiple monitors.  In normal cases with multiple monitors and a
39   modern X server, this is unnecessary.  It's useful if the X server
40   doesn't support RANDR (_e.g._, older servers), or if the info it
41   provides is wrong (_e.g._, multi-display simulation with Xephyr), or
42   if you just prefer to specify things differently than they would
43   otherwise be (_e.g._, treat an ultra-wide display as 2 separate
44   monitors).
45
461. The EWMH `_NET_FRAME_EXTENTS` property is now set on windows when we
47   take control of them.  This should fix clients mispositioning other
48   windows on top of themselves; visible with Firefox's form autofilling
49   and context menus.  Contributed by Maxime Soulé
50   <<btik-ctwm@scoubidou.com>>.
51
52### Bugfixes
53
541. When restarting ctwm, the icon managers for the current workspace will
55   now initially show up, rather than those for first WS.
56
571. When restarting ctwm, the stacking order of windows is now preserved.
58
591. Running `--cfgchk` without an available X server will now work.  Some
60   errors may only be discovered when it can talk to X (things relating
61   to colors are a likely suspect).  Checking configs for multi-Screen
62   setups will now properly check all of them as well.
63
641. Fix display of combined modifiers in TwmKeys menu.  Contributed by
65   Maxime Soulé <<btik-ctwm@scoubidou.com>>.
66
671. Fix window icon name spilling out into the border of icon manager
68   entries.  Contributed by Carl Svensson <<ctwm@datagubbe.se>>.
69
701. Fix minor mis-sizing and postitioning of squeezed titlebar when window
71   is squeezed away.  Contributed by Maxime Soulé
72   <<btik-ctwm@scoubidou.com>>.
73
741. Fix window placement when `DontMoveOff` is enabled without 3D borders.
75   Contributed by Maxime Soulé <<btik-ctwm@scoubidou.com>>.
76
771. When window titles overflow the available space, always treat them as
78   left-justified, to avoid bad behavior of other justifications and
79   provide the best available behavior. Found by Carl Svensson
80   <<ctwm@datagubbe.se>>.
81
82
83
84## 4.0.3  (2019-07-21)
85
86### Bugfixes
87
881. Perform various manipulations and overrides of `WM_HINTS` property
89   when it gets reset during runtime, like we do when initially adopting
90   the window.  The most visible effect of this was in windows that don't
91   give a focus hint (which we override to give focus), but then reset
92   `WM_HINTS` later and still don't give us a hint, where we wound up not
93   re-overriding previously.  Reported for `xvile` by Wayne Cuddy.
94
951. The font height estimation changes in 4.0.0 were not applied correctly
96   when UseThreeDMenus was set, leading to some odd vertical misalignment
97   of the text with some fonts.  Reported by Wayne Cuddy.
98
991. A failure in OTP consistency checks caused by the handling of
100   transients of fullscreen windows has been fixed.  This manifested as
101   failures in OtpCheckConsistencyVS() assertions.
102
103
104
105## 4.0.2  (2018-08-25)
106
107### Backward-Incompatible Changes And Removed Features
108
1091. The `UseThreeDIconBorders` config var has been removed.  It came in
110   silently and undocumented in 3.4 and has never done anything.
111
1121. The attempts to use DNS lookups for setting the `HOSTNAME` `m4` variable
113   have been removed; it is now just a duplicate of `CLIENTHOST`.
114
115### New Features
116
1171. The EWMH `_NET_WM_NAME` property is now supported, and used for the
118   window name in place of the ICCCM `WM_NAME` when set.  By default, we
119   also accept `UTF8_STRING` encoded `WM_NAME` as a result of this
120   change; see below for var to restore historical strictness.
121
1221. The EWMH `_NET_WM_ICON_NAME` property is now supported, and used for
123   the icon name in place of the ICCCM `WM_ICON_NAME` when set.  Similar
124   comments as above apply to the encodings.
125
1261. Support has been added for `CTWM_WM_NAME` and `CTWM_WM_ICON_NAME`
127   properties, which will override any window/icon names otherwise
128   specified.  This may be useful for applications that set unhelpful
129   names themselves, or for manually adjusting labelling.  These
130   properties can be set from the command line via `xprop`; as an
131   example, `xprop -f CTWM_WM_NAME 8u -set CTWM_WM_NAME "awesome
132   windowsauce"`.  See `xprop(1)` manual for details; the `s`, `t`, and
133   `u` field type specifiers will all work.
134
1351. When no icon name is set for a window, we've always used the window
136   name for the icon name as well.  But that only happened the first time
137   the window name is set; after that, the icon name is stuck at the
138   first name.  It now updates along with the window name, if no icon
139   name is set.
140
1411. All icon manager windows will now have the `TwmIconManager` class set
142   on them, so they can be addressed en mass by other config like
143   `NoTitle` by that class name.
144
145### New Config Options
146
1471. Added `DontNameDecorations` config option to disable setting names on
148   the X windows we create for window decoration (added in 4.0.0).  These
149   have been reported to confuse `xwit`, and might do the same for other
150   tools that don't expect to find them on non-end-app windows.  Reported
151   by Frank Steiner.
152
1531. Added `StrictWinNameEncoding` config option to enable historical
154   behavior, where we're reject invalid property encoding for window
155   naming properties (like a `UTF8_STRING` encoded `WM_NAME`).
156
157### Bugfixes
158
1591. Fix up broken parsing of `IconifyStyle "sweep"`.  Bug was introduced
160   in 4.0.0.
161
1621. When multiple X Screens are used, building the temporary file for m4
163   definitions could fail with an error from `mkstemp()`.  Reported by
164   Manfred Knick.
165
1661. When multiple X Screens are used, the OTP code didn't recognize the
167   difference, and kept everything in one list.  This caused the internal
168   consistency checks to trip when it didn't find all the windows it
169   expected.  Reported by Terran Melconian.
170
1711. When `ReverseCurrentWorkspace` is set, mapping windows not on the
172   current workspace (e.g., via restarting ctwm, or creating new windows
173   with the desktop set via EWMH properties) could segfault.  Reported by
174   Sean McAllister.
175
1761. Fix some edge cases where we'd fight other apps' focus handling.  When
177   an application moved focus itself to an unrelated (in X terms) window,
178   our processing would often race and re-move the focus to the root
179   ourselves.  This was visible with e.g. sub-windows in Firefox for
180   context menu and urlbar dropdown, which would flash on and then
181   disappear.
182
1831. When creating a new transient window of an existing full-screen
184   window, the OTP stacking may cause it to be stuck below the main
185   window due to the special handling of full-screen focused windows in
186   EWMH.  It should now be forced to the top.
187
1881. Building ctwm since 4.0.0 in certain locales could misorder functions
189   in the lookup table, leading to troubles parsing the config file.
190   You'd get some loud "INTERNAL ERROR" lines from ctwm when running it
191   if this were the case.  Now fixed.  Reported by Richard Levitte.
192
193
194
195## 4.0.1  (2017-06-05)
196
197### User Visible Changes
198
1991. Fix a bug where fullscreen windows could sometimes wind up incorrectly
200   stacked due to a focus-handling issue.  This would lead to ctwm
201   aborting with an assertion failure in the OTP code, like `Assertion
202   failed: (PRI(owl) >= priority), function OtpCheckConsistencyVS`.
203
2041. Fix an edge case (probably only triggerable via manual work with EWMH
205   messages) where a window could wind up resized down to nothing.
206
207### Internals
208
2091. Systems with the ctfconvert/ctfmerge tools available will now use them
210   to include CTF info in the compiled binary.  This allows more detailed
211   inspection of the running process via DTrace (e.g., the layout of the
212   structs).
213
2141. The initial rumblings of a Developer's Manual are now in
215   `doc/devman/`.  This isn't tied into the main build, and there's no
216   real reason it ever will be.  Things of interest to _users_ should
217   wind up in the main manual; this should only have things of interest
218   to people _developing_ ctwm.
219
220
221
222## 4.0.0  (2017-05-24)
223
224### Build System Change
225
226The old `imake` build system has been replaced by a new structure using
227`cmake`.  This makes [cmake](https://cmake.org/) a requirement to build
228ctwm.  See the `README.md` file for how to run it.
229
230A fallback minimal build system is available in the `minibuild/`
231directory for environments that can't use the main one.  This is likely
232to need some manual adjustment on many systems, and the main build is
233strongly preferred.  But it should suffice to get a runnable binary if
234all else fails.
235
236### Platform Support
237
238Support for many non-current platforms has been dropped.  In particular,
239remnants of special-case VMS support have been removed.  Many old and now
240dead Unix variants have been similarly desupported.  Generally, platforms
241without support for C99 and mid-2000's POSIX are increasingly less likely
242to work.
243
244### Backward-Incompatible Changes And Removed Features
245
2461. Argument parsing has been rewritten to use `getopt_long()`.  All
247   `-long` options are now `--long` instead.  `-version`, `-info`,
248   `-cfgchk`, and `-display` are still accepted if they're the first
249   option given, to make it easier for scripts to simultaneously support
250   before/after versions; this shim will be removed in a later version.
251
2521. Support for the SDSC imconv library, and the IMCONV options related to
253    it, has been removed.  The last release is almost 20 years old, and
254    doesn't support any remotely recent platforms.
255
2561. The USE_SIGNALS code to use signal-driven animations has been removed.
257    It's been non-default since 3.2 (more than 20 years ago), and not
258    documented anywhere but in the code and a comment in this file.
259
2601. The USE_GNOME option and code for GNOME1 support has been removed.
261
2621. The old-style title button action specifications (without an `=` in
263   them) deprecated since 3.8 are no longer supported.  Just replacing
264   the "`:`" with "`= :`" should suffice to make it work right in 3.8+.
265   If you need to share configs with older versions, you'll have to
266   conditionalize the syntax with m4 or some other preprocessing.
267
2681. The `f.cut` (and `^` alias for it), `f.cutfile`, and `f.file`
269   functions have been removed.  These functions for messing with the
270   clipboard were never visibly documented, and came into the manpage in
271   3.0 already commented-out and saying they were obsolete.
272
2731. The `f.source` function has been removed.  It's never done anything
274   (except beep) as far back as 1.1 and has never been documented.
275
2761. The `f.movemenu` function has been removed.  It was added silently in
277   2.1, has never done anything, and has never been documented.
278
2791. The `NoVersion` config parameter has been removed.  It's been
280   undocumented, obsoleted, and done absolutely nothing since 1.1.
281
2821. Support for non-flex versions of lex(1) is deprecated, and will take
283   some manual work to build.  Note that release tarballs include
284   prebuild lexers, so this probably only matters to people building from
285   a development tree.  (And if you are, and really need AT&T or some
286   other lex to work, talk to us!)
287
2881. Support for building with internal regex implementation has been
289   disabled; we now require regex support from libc.  It is still
290   possible to enable by manually editing files, but this will be removed
291   in the future.  If you have to mess with this, please bring it up on
292   the mailing list so we can figure out a long-term solution.
293
2941. Parsing of the `ctwm.workspaces` X resource (i.e., setting `-xrm
295   "ctwm.workspaces: something"` on program command-lines) since 3.0 has
296   collapsed doubled backslashes (`\\`) into a single (`\`).  However,
297   there were no other escapes, so this didn't gain anything.  Using a
298   single will work with both variants, unless you need multiple
299   backslashes in a row in your workspace names.
300
3011. The `IconRegion` and `WindowRegion` config params both take a `vgrav
302   hgrav` pair of parameters to control layout.  Previous versions would
303   accept a `hgrav vgrav` ordering in the parsing, and would mostly work
304   by odd quirks of the code.  The parsing has been made stricter, so
305   only the documented `vgrav hgrav` ordering is accepted now.
306
307### User Visible Changes
308
3091. The default install locations have been changed.  See the README for
310    details about where things are installed and how to change them.
311
3121. Several default settings have been changed.  ctwm now defaults to
313   acting as though `RestartPreviousState`, `NoGrabServer`,
314   `DecorateTransients`, `NoBackingStore`, `RandomPlacement`,
315   `OpaqueMove`, `OpaqueResize`, `SortIconManager`, and `StartInMapState`
316   have been set.  Those settings that didn't previously have an inverse
317   (to get the behavior previously seen when they weren't specified) have
318   such added; see below.
319
3201. Added various config parameters as inverses of existing params.  New
321   params (with existing param they invert in parens):
322    * `BackingStore` (`NoBackingStore`)
323    * `GrabServer` (`NoGrabServer`)
324    * `StartInButtonState` (`StartInMapState`)
325    * `NoSortIconManager` (`SortIconManager`)
326    * `NoRestartPreviousState` (`RestartPreviousState`)
327    * `NoDecorateTransients` (`DecorateTransients`)
328
3291. Added `DontShowWelcomeWindow` config option to not show welcome
330    splashscreen image.
331
3321. Selected a number of cleanups from Stefan Monnier
333    <<monnier@IRO.UMontreal.CA>>, including rate-limiting of animations
334    using a new `_XA_WM_END_OF_ANIMATION` message.  Font height is
335    estimated based on used characters only.  Added some similar changes,
336    improved the prevention of placing windows off-screen, the
337    `f.rescuewindows` function for emergencies, a hack-fix for
338    `f.adoptwindow`. More virtual screen tweaks/fixes.
339
3401. Added the remaining OnTopPriority changes from Stefan Monnier
341    <<monnier@IRO.UMontreal.CA>>: `AutoPopup`, `AutoPriority`,
342    `OnTopPriority`, `PrioritySwitching`, `f.changepriority`,
343    `f.priorityswitching`, `f.setpriority`, `f.switchpriority`,
344    `f.tinylower`, `f.tinyraise`.  Currently consistency checking code is
345    enabled, which will terminate with an assertion failure if something
346    unexpected happens. Smoothed out various inconsistencies that this
347    check discovered when virtual screens are used.
348
3491. Basic support for EWMH (Extended Window Manager Hints) added and
350    enabled by default.  `EWMHIgnore {}` config option allows selectively
351    disabling bits.
352    [Olaf "Rhialto" Seibert, Matthew Fuller]
353
3541. Icon manager windows are no longer included in the window ring
355    (that had confusing effects on the focus sequence).
356
3571. Added `--dumpcfg` command-line option to print out the compiled-in
358    fallback config file.
359
3601. The `Occupy {}` specification now accepts "ws:" as a prefix for
361    workspaces.  This may break things if you have workspaces with names
362    that differ only by that prefix (e.g., you have workspaces "abc" and
363    "ws:abc", and your `Occupy {}` declarations affects both.
364
3651. If ctwm is built with rplay support, sounds may now be configured with
366    the RplaySounds {} parameter in the config file in place of the
367    `~/.ctwm-sounds` file.  If so, ctwm will give a warning if
368    `.ctwm-sounds` exists; support for the external file will be removed
369    in a future version.  Also the `SoundHost` config parameter is
370    replaced by `RplaySoundHost`; the old name is still accepted, but
371    will be removed in a future version.
372
3731. Added `MWMIgnore {}` config option to allow selectively disabling
374    honoring of some Motif WM hints.
375
3761. Warping to a window now explicitly sets focus on that window.  This
377    would generally (but not always, in the presence of odd X server
378    behavior) have already happened for users with focus following mouse,
379    but now occurs for `ClickToFocus` users as well.
380    [Alexander Klein]
381
3821. Several bugs relating to the Occupy window were fixed.  Iconifying the
383    Occupy window no longer loses it and leaves you unable to pull it up
384    again.  Minor undersizing in some cases fixed.
385
3861. Windows which fail to use the `WM_HINTS` property to tell us things like
387    whether they want us to give them focus are now explicitly given
388    focus anyway.  This should fix focus problems with some apps
389    (Chromium is a common example).
390
3911. Added `ForceFocus {}` config option to forcibly give focus to all (or
392    specified) windows, whether they request it or not.  Previously the
393    code did this unconditionally (except when no `WM_HINTS` were
394    provided; x-ref previous), but this causes problems with at least
395    some programs that tell us they don't want focus, and mean it
396    (some Java GUI apps are common examples).
397
3981. `OpaqueMoveThreshold` values >= 200 (the default) are now treated as
399    infinite, and so will always cause opaque moving.
400
401### Internals
402
4031. A new code style has been chosen and the entire codebase reformatted
404    into it.  Configs for
405    [Artistic Style](http://astyle.sourceforge.net/)
406    to generate the proper output are in the source tree.
407
4081. The `full_name` element of the TwmWindow structure has been removed.
409    Consumers should just use the `name` element instead.
410
411
412
413## 3.8.2  (2014-05-18)
414
4151. Various code cleanups.
416
417    * Cleanup re: raising and warping to windows (previous location of
418      pointer in windows), SaveWorkspaceFocus. A few extra NULL pointer
419      checks.
420
421    * Logical hasfocusvisible cleanup.
422
423    * Rename TwmWindow.list to iconmanagerlist, and various smaller
424      cleanups.
425
426    * Eliminated TwmWindow TwmRoot from struct ScreenInfo. Mostly a
427      mechanical change.  I found some cases where the dummy TwmWindow
428      was apparently mistakenly included in a loop. Replaced `.next`
429      with `TwmWindow *FirstWindow` and `.cmaps` with `Colormaps
430      RootColormaps`.  Other members were not used.
431
4321. Fix a bug where insufficient validation of the size hints
433    resulted in a division by zero when considering aspect ratio.
434
4351. Lots of minor compiler warnings and build fixes, a few of which
436    were real current or latent bugs.  Leave warnings enabled by
437    default.  A few of the build system adjustments may break very
438    old systems (e.g., those with original AT&T `yacc`).
439
4401. Fix incorrect inclusion of `$DESTDIR` in some paths.
441
4421. Update for new website and mailing list at <http://www.ctwm.org>.
443
4441. Look at `_MOTIF_WM_HINTS` for titlebar-less or border-less
445    windows.
446
447
448
449## 3.8.1  (2012-01-05)
450
4511. Fix bug causing [de]iconified status of windows to not be
452    maintained across workspaces.
453    [Matthew Fuller]
454
4551. Quiet a bunch of compiler warnings.
456    [Matthew Fuller]
457
4581. Make sure we fully initialize our WorkSpaceWindow structure so
459    we don't try to dereference uninitialized pointers later on.
460    [Matthew Fuller]
461
4621. Increased the number of supported mouse buttons again, having
463    just heard of a mouse with 9 possible buttons...
464    [Richard Levitte]
465
4661. Fix a bug in the warping "next" function, where if there is a
467    single window and the cursor is not on it, invoking `f.warpring
468    "next"` does nothing.
469    [Martin Blais]
470
4711. Introduce a new feature called "SaveWorkspaceFocus", which when
472    enabled, makes ctwm remember which window has the focus within
473    each virtual workspace. As you switch workspaces, the cursor is
474    automatically warped to the window previous in focus in the
475    workspace. This significantly reduces the amount of mouse use.
476    [Martin Blais]
477
4781. f.fill patch from Matthias Kretschmer <<kretschm@cs.uni-bonn.de>>.
479    Without the patch, you might get windows which are increased by
480    two times the border width more than it should be.  Additionally
481    if you place a window with no/not much size contrainst like
482    firefox in the upper left corner and perform `f.fill "top"` or
483    `f.fill "left"` the size of the window will increase by two times
484    the border width in width and height without changing the
485    top-left coordinate without the patch.  Of course in such a
486    situation the size should not change at all...
487    [via Olaf Seibert]
488
489
490
491## 3.8  (2007-02-16)
492
4931. Global cleanup.  There were some variables shadowing others, things
494    not being safely initialized, that sort of thing.
495    [Richard Levitte]
496
4971. Fixed several memory leaks found by
498    "Nadav Har'El" <<nyh@math.technion.ac.il>>.
499    [Olaf "Rhialto" Seibert]
500
5011. Merged in the `f.movetitlebar` command. By default this is bound to
502    alt-left-click in the titlebar.
503    [Olaf "Rhialto" Seibert]
504
5051. Fixed the following issue:
506
507    * Poking at the code, it looks like InitVirtualScreens() is called
508      before the configuration file is parsed which would explain what I
509      see since there's no attempt to create them after the config file
510      read.  Moving the call after the config parsing causes things to
511      work.
512
513    * I've run into a few other issues that I fixed with the attached
514      patch:
515        * shadow menus on the right screen open the shadow on the left
516          screen
517        * shadow menus on the left screen open on top of the window
518        * windows on the right screen disappear after startup
519
520    [Todd Kover]
521
5221. Adjustments to ctwm.man.  I noticed a couple of small errors.  [Ross
523    Combs]
524
525    * One is that the window list arguments for the opaque keywords are
526      now optional, are listed with square brackets in the man page.
527
528    * The other is that the two Threshold keywords are shown in the man
529      page as requiring curly-brackets, but they are not required or
530      accepted in configuration files.
531
5321. Improve algoritm to deal with mismatched geometry of virtual
533    screens
534
535    * allow windows to be dragged from one virtual screen to another and
536      have them switch workspaces appropriately
537
538    * handle restarts properly with virtual screens, including preserving
539      where windows were placed within workspaces regardless of which
540      virtual screen a window was on; preserve across restarts
541
542    [Todd Kover]
543
5441. `WMapCreateCurrentBackGround()` and `WMapCreateDefaultBackGround()`
545    would skip remaining virtual screens if not all parameters are
546    present.  Small type errors.
547    [Olaf "Rhialto" Seibert]
548
5491. There were some directives in the config file that wanted to set some
550    setting for all virtual screens. However since that list is (now) only
551    set up after parsing the config file, they failed to work.  Moreover,
552    these settings were basically meant to be global to all virtual
553    screens, so a better place for them is somewhere in `*Scr`.  They all
554    related to the Workspace Manager, so I moved them from `struct
555    WorkSpaceWindow` to `struct WorkSpaceMgr`.
556
557    The affected directives are StartInMapState, WMgrVertButtonIndent,
558    WMgrHorizButtonIndent, MapWindowCurrentWorkSpace,
559    MapWindowDefaultWorkSpace.  The window and icon_name, even though not
560    user-settable, were also moved.
561
562    This is basically the previous change above done right.
563    [Olaf "Rhialto" Seibert]
564
5651. Re-introduced `TwmWindow.oldvs`, used to avoid calling
566    `XReparentWindow()` when possibe (it messed up the stacking order of
567    windows). However, maybe the use of `.vs` should be rethought a bit:
568    in `Vanish()` it is now set to `NULL` with the old value kept in
569    `.oldvs`.  However the window is still a child of the same vs.  Maybe
570    it is better not to set it to `NULL` and then, when *really* changing
571    the virtual screen, `.vs` can be used instead of `.oldvs`.
572
573    This whole "virtual screen" thing is unexplained in the manual, which
574    even uses it as a synonym for "workspace" already in the introduction
575    paragraph. (There also does not seem to be a way now to test virtual
576    screens in captive windows) I suspect that all this causes lots of
577    confusion, and when cleared up, can simplify the code a lot.
578
579    I also fixed up the horrible indentation in the functions
580    where I changed something.
581    [Olaf "Rhialto" Seibert]
582
5831. Fixed interaction between "inner" and "outer" workspace
584    selection with "captive" windows. This was because the Gnome
585    `_WIN_WORKSPACE` property is used in 2 conflicting ways: for
586    client windows it indicates which workspace they are in, for
587    root windows it indicates which workspace they show. Captive
588    windows are both. Also, the initially selected inner workspace
589    is now the first, not the same as the outer workspace (this had
590    a different cause).
591    [Olaf "Rhialto" Seibert]
592
5931. Introduce `Scr->XineramaRoot` to store the root window that
594    encompasses all virtual screen rootwindows. This further reduces any
595    need to use RealRoot and/or CaptiveRoot.  Add a schematic drawing
596    that clarifies the relation between the various root-type windows.
597    [Olaf "Rhialto" Seibert]
598
5991. Get rid of all non-locale code and make I18N the silent default
600    (doesn't have to be mentioned any more).  **THIS WILL BREAK CTWM ON
601    OLDER (PRE-LOCALE) ENVIRONMENTS**.  I strongly recommend an upgrade
602    to "post-locale" standards.
603    [Richard Levitte]
604
6051. Enhance RandomPlacement with a displacement argument, so the
606    pseudo-radomness can be of displacements other than +30+30.  Here's
607    an example for a pretty funky displacement:
608
609        RandomPlacement "on" "-30-100"
610
611    [Richard Levitte]
612
6131. Extend the Info window with the geometry seen from the lower
614    right corner as well.
615    [Richard Levitte]
616
6171. Extend the pointer button specification for title buttons to take
618    modifiers.  As part of this change, the following title pointer
619    button specification is deprecated:
620
621        Button {j} : {function}
622
623    in favor of the following, for consistency:
624
625        Button {j} = {function}
626
627    The old way still works, but is considered bad form and will
628    be removed in a future version ("ctwm 4.0").
629    [Richard Levitte]
630
6311. Fix position of buttons in Occupy window, to make them centered.  (and
632    spread the remaining space evenly in 4).
633    [Olaf "Rhialto" Seibert]
634
6351. `TwmWindow.group` was once apparently set to 0 when a window had no
636    group leader but this was changed to pointing to its own window.
637    This resulted however in many places checking for both conditions,
638    and several checking only for 0 which could not occur anymore.
639    Changed it back to 0 (so we can now distinguish again windows that
640    really indicate themselves as group leader, if we wish) and this gave
641    rise to some simplifications.
642
643    Also, there were various loops through all TwmWindows looking for a
644    group leader (or a `transientfor`), I replaced them with
645    `GetTwmWindow()` which uses the Xlib function `XFindContext()` which
646    uses a hash table lookup. This should be more efficient.
647
648    When you change the occupation of a group member window, it is now
649    applied to the group leader (which in turn affects all members).
650
651    I tried this with ExMH, the only program that uses a real group
652    leader that I could find.  Iconifying the leader unmaps the members.
653    What should "squeezing" do?  ExMH also has an icon window (see ICCCM
654    4.1.9, 3rd option) which behaves weirdly; this may be a bug in ExMH
655    (see exmh-2.7.2/exmh.BUGS) even though fvwm somehow handles it
656    better.
657    [Olaf "Rhialto" Seibert]
658
6591. When Squeezing a window group leader, unmap the member windows, just
660    like happens with iconification.
661    [Olaf "Rhialto" Seibert]
662
6631. Simplifications c.q. de-duplications of code regarding the
664    WorkSpaceManager and Occupation windows. This includes coding the
665    layout of these windows only once instead of twice (at initialisation
666    and when resizing). If it's wrong now at least it should be
667    consistent.
668
669    When changing occupation via functions like f.movetonextworkspace,
670    also move complete window groups (just like when you do it via the
671    Occupation window).  Also fixed changing the occupation of the
672    Occupation window.  Documented (so far) undocumented possibility to
673    edit the labels of workspaces on the fly (what use this is, I'm not
674    sure).  Removed some unused variables.
675    [Olaf "Rhialto" Seibert]
676
6771. Get rid of the `USE_SESSION` and `X11R6` macros and make them the
678    silent default.  Also cleaned out a few references to the macro
679    `X11R4`, which hasn't been used for ages.  **THIS WILL BREAK CTWM ON
680    OLDER (PRE-X11R6) ENVIRONMENTS**.  I strongly recommend an upgrade to a
681    newer X11 release.
682    [Richard Levitte]
683
6841. Modified the random placement so a negative X displacement has the
685    first "random" window start near the right edge instead of the right
686    and a negative Y displacement has the first "random" window start
687    near the bottom edge instead of the top.
688    [Richard Levitte]
689
690
691
692## 3.7  (2005-07-19)
693
6941. Workspace context (bkctwmws.patch)
695
696    Makes it possible to bind keys specific to the workspace manager
697    (by Björn Knutsson). Use the event context "workspace" for this.
698
6991. New keyword : AlwaysSqueezeToGravity
700
701    If it is enabled, window squeezing always follows window gravity
702    (instead of northward when the window has a title).
703    (by Rudolph T. Maceyko).
704
7051. TwmKeys and TwmVisible menus (dlctwmmenu.patch)
706
707    Adds TwmKeys (rootmenu listing all keybindings) and TWM Visible (rootmenu
708    showing only deiconified windows) (by Dan Lilliehorn).
709
7101. Preliminary GNOME compliance (see README.gnome and TODO.gnome)
711    (by Nathan Dushman).
712
7131. IconifyStyle : "normal" "mosaic" "zoomin" "zoomout" "sweep"
714
715    A few "fancy" graphical effects when you iconify windows, just for fun.
716
7171. JPEG images support : You can now use jpeg image files wherever you
718    can use images. Use the `jpeg:imagename` syntax.
719
7201. `f.showbackground`
721
722    Since we can now use fancy jpeg image for root backgrounds, this function
723    unmaps all windows in the current workspace. This is a toggle function,
724    if all windows are unmapped, they are all remapped. Better bind this
725    function in the root context.
726
7271. Preliminary support for Xinerama extention. You can define "virtual"
728    screens (it's better if they correspond to you actual screens). The
729    thing is that you can see several workspaces at the sams time, one per
730    virtual screen. Of course, you cannot view the same workspace (or the
731    same window) in 2 vscreens at the same time. The syntax is:
732
733        VirtualScreens {
734            "1280x1024+0+0"
735            "1600x1200+1280+0"
736        }
737
738    for 2 screens, the first one (on the left) is 1280x1024, the second one
739    (on the right) is 1600x1200.
740
741    This is preliminary, because this has not been extensively tested. I did
742    this because I have now 2 screens, but I was unable to get them working
743    properly, so I use only one.
744
7451. **[ At this point, Claude has stopped working on CTWM, and the project
746    is now in the hands of Richard Levitte <<richard@levitte.org>>. ]**
747
7481. Changed Imakefile to support a distribution target.
749
7501. Changed `:xpm:cross` to become a bit larger and have a slightly more
751    3D appearance, and is visible even in very dark configurations.
752
7531. Make AlwaysSqueezeToGravity to work for all windows (if no window
754    list is given).
755
7561. New keyword: `NoImagesInWorkSpaceManager`
757
758    If it's enabled, background images aren't displayed in the workspace
759    map.
760
761    This was contributed by Thomas Linden.
762
7631. New command line option: `-cfgchk`
764
765    If used, CTWM will only parse the configuration file and indicate
766    if it found errors or not.
767
768    This was contributed by Matthew D. Fuller.
769
7701. `DontMoveOff` patch (by Björn Knutsson)
771
772    Change the behavior of `DontMoveOff` / `MoveOffResistance` so that
773    when you attempt to move a window off screen, it will not move at all
774    until it's been moved `MoveOffResistance` pixels (as before), but at
775    this time it will no longer "snap", but instead it will start moving
776    off screen. This means that you still have the old behavior of
777    DontMoveOff, but now with the ability to move a window off screen
778    less that `MoveOffResistance` pixels.
779
7801. Random placement and DontMoveOff patch (by Björn Knutsson, changed)
781
782    When random placement was used, DontMoveOff wasn't honored.
783    This behavior has now changed so a window will be kept within
784    the screen when at all possible.  When the window is too
785    large, it's top or left edge (or both) will be placed in
786    coordinate 0.
787    This change differs a little bit from Björns contribution by
788    not using rand() at all.
789
7901. `f.warpring` patch (by Björn Knutsson)
791
792    If `IconManagerFocus` is set, there's no reason why the icon
793    manager should get enter and leave events.  This fixes some
794    disturbing in the warpring that would otherwise happen.
795
7961. `f.movetoprevworkspace`,
797    `f.movetonextworkspace`,
798    `f.movetoprevworkspaceandfollow`,
799    `f.movetonextworkspaceandfollow` patch (by Daniel Holmström)
800
801    Makes it possible to move a window to the previous or next
802    workspace and, if you like, go to that workspace and focus
803    the moved window.
804
8051. `f.fill` "vertical" patch (by Daniel Holmström)
806
807    Expands the window vertically without overlapping any other window,
808    much like `{ f.fill "top" f.fill "bottom" }` but with the exception
809    that it doesn't expand over window borders. It also sets the windows
810    "zoomed" to `F_FULLZOOM`, so one can toggle between this size,
811    original and maximized.
812
8131. `RESIZEKEEPSFOCUS` bugfix patch (by Daniel Holmström)
814
815    If a window is maximized with `togglemaximize` and then restored it
816    might loose focus if the cursor is outside the restored window.  This
817    hack puts the cursor at the left-top corner of the window.
818
8191. `f.zoom` bugfix patch (by Daniel Holmström)
820
821    `f.zoom` now doesn't move the window up (as it sometimes did before)
822
8231. `IgnoreTransient` patch (by Peter Berg Larsen)
824
825    New keyword with list of windows for which to ignore transients.
826
8271. Workspace switch peformance optimization (by MC)
828
829    Stops ctwm from redrawing windows that occupy all workspaces when
830    switching from one workspace to another.
831
8321. GTK "group leader" bugfix (by Olaf 'Rhialto' Seibert)
833
834    Makes ctwm aware of the mysterious GTK group leader windows.
835
8361. Resize cursor with non-3D-borders bugfix (by Olaf 'Rhialto' Seibert)
837
838    BorderResizeCursors now works also for top and left borders when
839    non-3D-borders are used.
840
8411. Memory leak bugfix (by Simon Burge)
842
843    `GetWMPropertyString` in `util.c` no longer leaks memory.
844
8451. Warpring bugfix (by Takahashi Youichirou)
846
847    Solves these two problems when warping the pointer to the
848    next/previous mapped window:
849
850    * Sometimes the pointer moved right too much and ended up outside the
851      title bar.
852
853    * When the active window was closed and the pointer ended up on the
854      root window, the pointer wouldn't warp until moved with the mouse.
855
8561. NoWarpToMenuTitle patch (by Julian Coleman)
857
858    Fixes the sometimes annoying feature that the cursor is warped to the
859    menu title if the menu won't fit on the screen below the current
860    pointer position.
861
862    This patch introduces a new keyword `NoWarpToMenuTitle` keyword to
863    turn this off.
864
8651. `Scr->workSpaceMgr.windowFont` font init bugfix (by Martin Stjernholm)
866
867    `The Scr->workSpaceMgr.windowFont` in workmgr.c is now initialized.
868
8691. Full GNU regex patch (by Claude Lecommandeur)
870
871    It is now possible to use full GNU regex for window or class names by
872    defining `USE_GNU_REGEX` in Imakefile. It is disabled in the default
873    Imakefile.
874
8751. DontToggleWorkSpaceManagerState patch (by Dan 'dl' Lilliehorn)
876
877    New keyword to turn off the feature toggling the workspace manager
878    state to/from map/button state when you press ctrl and the workspace
879    manager window is in focus.
880
8811. TWMAllIcons patch (by Dan 'dl' Lilliehorn)
882
883    Adds the TWMAllIcons menu, listing all iconified windows on all
884    workspaces.
885
8861. `f.changesize` patch (by Dan 'dl' Lilliehorn)
887
888    Adds the function `f.changesize` which allows you to change the size
889    of the focused window via menus and keybindings.
890
891    Examples:
892
893        "Down"     = c|s: all           : f.changesize "bottom +10"
894        "F1"       = c|s: all           : f.changesize "640x480"
895
8961. When crashing, ctwm now refers to ctwm-bugs@free.lp.se instead of
897    Claude.Lecommandeur@epfl.ch.
898    **NOTE: This is historical information: neither of these addresses
899    are the current contact.**
900
9011. Changed all the code to use ANSI C prototypes instead of the old
902    K&R style.
903    [Richard Levitte]
904
9051. Only use the DefaultFunction if no function was found.
906    [Richard Levitte]
907
9081. Correct DontMoveOff
909
910    The DontMoveOff checks when calculating random placement wasn't
911    satisfactory.  It ended up placing all windows that were small enough
912    to fit in a random place at +50+50 with no exception.  The behavior
913    has now been changed to only apply to very large windows (almost as
914    large as or larger than the screen).  At the same time, the
915    RandomPlacement algorithm and the DonMoveOff checks have been tweaked
916    to keep the title height in mind, so centering and coordinates
917    correspond to the realities of the rest of CTWM.
918    [Richard Levitte]
919
9201. Correct resizing from menu
921
922    Choosing resize from the menu when not having 3D borders moved
923    the target window down and right by a border width.  This was
924    an error in window position calculations.
925    [Richard Levitte]
926
9271. Enhanced info window
928
929    Added the outer geometry.  Added the 3D border width.
930    [Richard Levitte]
931
9321. Restart on subsequent SIGHUPs
933
934    Reworked the code that catches a SIGHUP and has ctwm restart as
935    a result.  The restarting code has moved from Restart() to the new
936    DoRestart().  Restart() now only sets a flag, and CtwmNextEvent()
937    has been changed to react to that flag and call DoRestart().  From
938    now on, CtwmNextEvent() is always used to get the next event, even
939    when no animations are going on.
940    [Richard Levitte]
941
9421. A number of VMS-related changes
943
944    DEC/HP PC is a bit picky, the X11 environment is a little bit
945    different, and there were some sign/unsigned conflicts and one
946    too large symbol (the VMS linker truncates anything beyond the
947    31 first characters of any symbol name), so some tweaks were
948    needed to get CTWM to build cleanly on VMS.
949    [Richard Levitte]
950
9511. Allow gcc users to build with paranoia
952
953    To make it easier to find possible problems, the Imakefile macro
954    GCC_PEDANTIC can be defined in Imakefile.local.
955    [Richard Levitte]
956
9571. Allow spaces in sound files.
958
959    The .ctwm-sounds file parser would clip sound files at the first
960    spaces.  That won't do for sound libraries where file names may
961    have spaces in them.  The parser now accepts spaces in file names,
962    and will trim spaces from the beginning and the end of both file
963    names and event tokens, allowing for a slightly more flexible
964    format.
965    [Richard Levitte]
966
9671. ctwm.spec
968
969    Added a specification file for RPM building.
970    [Richard Levitte]
971
9721. More info for m4
973
974    The m4 subprocess now gets the variable PIXMAP_DIRECTORY, which
975    is defined to the directory where the pixmaps are installed, and
976    the new flags IMCONV, GNOME, SOUNDS, SESSION and I18N.
977    [Richard Levitte]
978
9791. Document sounds
980
981    The sounds system is now documented in the man page.
982    [Richard Levitte]
983
9841. Build RPMs
985
986    Added the target "rpm" to build an RPM directly from a distribution
987    tarball.
988    [Richard Levitte]
989
9901. Make life easier for package builders
991
992    Added the possibility to configure where some libraries can be found
993    through the use of `USER_*` make variables in Imakefile.local.  Added
994    a lot more commentary in Imakefile.local-template.
995    [Richard Levitte]
996
9971. Make it easier to configure on VMS
998
999    Moved all the configuration definitions to descrip.local-template,
1000    and instruct the users to copy that file to descrip.local and make
1001    all needed changes there.
1002    [Richard Levitte]
1003
10041. Changed all relevant occurences of levitte@lp.se to
1005    richard@levitte.org.
1006    [Richard Levitte]
1007
1008
1009
1010## 3.6  (2002-08-08 or earlier)
1011
10121. Fix line numbers for errors when using m4 preprocessor. Send thanks
1013    to Josh Wilmes <<josh@hitchhiker.org>>.
1014
10151. Fix the way menu entries are selected with the keyboard. Now
1016    when you type a letter, the pointer moves to the next entry
1017    whose first letter is this letter, but does not activate it.
1018    The new keyword IgnoreCaseInMenuSelection, can be used to
1019    ignore case for this delection.
1020
10211. New keyword: DontSave.  Takes a window list as argument. All listed
1022    windows won't have their characteristics saved for the session manager.
1023    Patch from Matthias Baake <<Matthias.Baake@gmx.de>>
1024
10251. Also from Matthias Baake <<Matthias.Baake@gmx.de>>:
1026    With the new keywords BorderLeft, BorderRight, BorderBottom and
1027    BorderTop (each of them is optional with a default value of 0 and
1028    takes a nonnegative integer as argument) you can declare a border
1029    "off limits" for f.move etc.. These borders act the same way as the
1030    real borders of the screen when moving windows; you can use
1031    f.forcemove to override them.
1032
10331. Sloppy Focus added with keyword "SloppyFocus" in configuration file
1034    (DINH V. Hoa <<dinh@enserb.fr>>).
1035
10361. The keyword "ClickToFocus" has been correctly implemented
1037    (DINH V. Hoa <<dinh@enserb.fr>>).
1038
10391. The keyword "IgnoreModifier" has been added, to use this feature, you
1040    have to add a line `IgnoreModifier { lock m2 }` in the configuration
1041    file.  All bindings (buttons and keys) will ignore the modifiers you
1042    specified. It is useful when you use caps locks or num locks. You
1043    don't need IgnoreLockModifier any more with this option.  (DINH V.
1044    Hoa <<dinh@enserb.fr>>).
1045
10461. New keyword: WindowBox.  Creates a new window called a box, where
1047    all the client windows that match the windows list are opened in,
1048    instead of the roor window. This is useful to group small windows
1049    in the same box (xload for instance) :
1050
1051        WindowBox "xloadbox" "320x100+0-0" {
1052            "xload"
1053        }
1054
10551. New function: f.fittocontent.  Can be used only with window boxes.
1056    The result is to have the box have the minimal size that contains
1057    all its children windows.
1058
10591. New keyword: WindowGeometries.  Used to give a default geometry to some
1060    clients:
1061
1062        WindowGeometries {
1063            "Mozilla*"       "1000x800+10+10"
1064            "jpilot*"        "800x600-0-0"
1065        }
1066
10671. New keyword: IconMenuDontShow.  Don't show the name of these windows
1068    in the TwmIcons menu.
1069
10701. And, as usual, a few bug fixes here and there.
1071
1072
1073
1074## 3.5.2  (1999-09-10 or earlier)
1075
10761. `f.moveresize`: Takes one string argument which is a geometry with the
1077    standard X geometry syntax (e.g. `200x300+150-0`). Sets the current
1078    window to the specified geometry. The width and height are to be given
1079    in pixel, no base size or resize increment are used.
1080
10811. AutoLower et `f.autolower`: from Kai Großjohann
1082    (Kai.Grossjohann@CS.Uni-Dortmund.DE). Same as autoraise but with lower.
1083
10841. `WindowRingExclude`: Takes a window list as argument. All listed windows
1085    will be excluded from the WarpRing.
1086
10871. A new menu: "TwmIcons" same as "TwmWindows", but shows only iconified
1088    windows. I did this when I got bored of having icons. Now I have no
1089    icons and no icon managers. I use this menu to deiconify windows.
1090    When I was young, I liked to have brightly colored icons, but now that
1091    I am getting old(er), I prefer a bare desktop.
1092
1093
1094
1095## 3.5.1  (1999-05-02 or earlier)
1096
10971. `f.initsize`: resets a window to its initial size given by the
1098    `WM_NORMAL_HINTS` hints.
1099
11001. `f.ring`: Selects a window and adds it to the WarpRing, or removes it if
1101    it was already in the ring. This command makes f.warpring much more
1102    useful, by making its configuration dynamic (thanks to Philip Kizer
1103    <<pckizer@tamu.edu>>).
1104
11051. f.jumpleft, f.jumpright, f.jumpup, f.jumpdown : takes one integer
1106    argument (the step). These function are designed to be bound to keys,
1107    they move the current window (step * {X,Y}MoveGrid) pixels in the
1108    corresponding direction. stopping when the window encounters another
1109    window (ala f.pack).
1110
1111
1112
1113## 3.5  (1997-11-27 or earlier)
1114
11151. `f.pack [direction]`.
1116    Where direction is one of: "right", "left", "top" or "bottom".
1117    The current window is moved in the specified direction until it reaches
1118    an obstacle (either another window, or the screen border). The pointer
1119    follows the window. Examples:
1120
1121        "Right" = m   : window        : f.pack "right"
1122        "Left"  = m   : window        : f.pack "left"
1123        "Up"    = m   : window        : f.pack "top"
1124        "Down"  = m   : window        : f.pack "bottom"
1125
11261. `f.fill [direction]`.
1127    Where direction is either : "right", "left", "top" or "bottom".
1128    The current window is resized in the specified direction until it
1129    reaches an obstacle (either another window, or the screen border).
1130
1131        "Right" = s|m   : window        : f.fill "right"
1132        "Left"  = s|m   : window        : f.fill "left"
1133        "Up"    = s|m   : window        : f.fill "top"
1134        "Down"  = s|m   : window        : f.fill "bottom"
1135
11361. `f.savegeometry`.
1137    The geometry of the current window is saved. The next call to
1138    `f.restoregeometry` will restore this window to this geometry.
1139
11401. `f.restoregeometry`
1141    Restore the current window geometry to what was saved in the last
1142    call to `f.savegeometry`.
1143
11441. ShortAllWindowsMenus
1145    Don't show WorkSpaceManager and IconManagers in the TwmWindows and
1146    TwmAllWindows menus.
1147
11481. f.toggleworkspacemgr
1149    Toggle the presence of the WorkSpaceManager. If it is mapped, it will
1150    be unmapped and vice verça.
1151
11521. OpenWindowTimeout number
1153    number is an integer representing a number of second. When a window
1154    tries to open on an unattended display, it will be automatically
1155    mapped after this number of seconds.
1156
11571. `DontSetInactive { win-list }`
1158    These windows won't be set to InactiveState when they become invisible
1159    due to a change workspace. This has been added because some ill-behaved
1160    clients (Frame5) don't like this.
1161
11621. `UnmapByMovingFarAway { win-list }`
1163    These windows will be moved out of the screen instead of being
1164    unmapped when they become invisible due to a change workspace. This has
1165    been added because some ill-behaved clients (Frame5) don't like to be
1166    unmapped. Use this if the previous doesn't work.
1167
11681. `AutoSqueeze { win-list }`
1169    These windows will be auto-squeezed. i.e. automatically unsqueezed
1170    when they get focus, and squeezed when they loose it. Useful for the
1171    workspace manager. (Note, it is not possible to AutoSqueeze icon
1172    managers).
1173
11741. `StartSqueezed  { win-list }`
1175    These windows will first show up squeezed.
1176
11771. RaiseWhenAutoUnSqueeze
1178    Windows are raised when auto-unsqueezed.
1179
11801. Now if the string "$currentworkspace" is present inside the string
1181    argument of f.exec, it will be substituated with the current workspace
1182    name. So it is possible to do something like :
1183
1184        f.exec "someclient -xrm ctwm.workspace:$currentworkspace &"
1185
1186    and the client will popus up in the workspace where the command was
1187    started even if you go elsewhere before it actually shows up.
1188
11891. Fixes for the VMS version. From Richard Levitte - VMS Whacker
1190    <<levitte@lp.se>>.
1191
11921. Better I18N. From Toshiya Yasukawa <<t-yasuka@dd.iij4u.or.jp>>. (Define
1193    I18N in Imakefile to activate it).
1194
11951. Better Session Management interface. Patches from Matthew McNeill
1196    <<M.R.McNeill@durham.ac.uk>>.
1197
11981. new flag : `-name`, useful only for captive Ctwm. Sets the name of the
1199    captive root window. Useful too for next point. If no name is
1200    specified ctwm-n is used, where n is a number automatically
1201    generated.
1202
12031. Two new client resources are now handled by Ctwm :
1204
1205    * `ctwm.redirect: <captive_ctwm_name>`
1206
1207        The new client window is open in the captive Ctwm with name
1208        `<captive_ctwm_name>`.
1209
1210    * `ctwm.rootWindow: <window_id>`
1211
1212        The new client window is reparented into `<window_id>` (whaa!!!).
1213        It is up to you to find any usefullness to this.
1214
12151. If the string "$redirect" is present inside the string
1216    argument of f.exec, it will be substituated with a redirection
1217    to the current captive Ctwm if any (or nothing if in a main Ctwm).
1218    So it is possible to do something like :
1219
1220        f.exec "someclient $redirect &"
1221
1222    and the client will popus up in the right captive Ctwm.
1223
12241. New function f.hypermove. With it, you can drag and drop a window
1225    between 2 captives Ctwm (or between a captive and the root Ctwm).
1226
12271. 2 new m4 variables defined in your startup file:
1228
1229    * TWM_CAPTIVE
1230        : value "Yes" if Ctwm is captive, "No" else.
1231
1232    * TWM_CAPTIVE_NAME
1233        : The name of the captive Ctwm, if captive.
1234
12351. `RaiseOnClick`: if present a window will be raised on top of others
1236    when clicked on, and the ButtonPress event will be correctly
1237    forwarded to the client that owns this window (if it asked to).
1238
1239        RaiseOnClickButton <n> : <Button number to use for RaiseOnClick>
1240
12411. `IgnoreLockModifier`: if present, all bindings (buttons and keys) will
1242    ignore the LockMask. Useful if you often use caps lock, and don't
1243    want to define twice all your bindings.
1244
12451. AutoFocusToTransients
1246    Transient windows get focus automatically when created.  Useful with
1247    programs that have keyboard shortcuts that pop up windows.  (patch
1248    from Kai Grossjohann <<grossjohann@charly.cs.uni-dortmund.de>>).
1249
12501. PackNewWindows
1251    Use f.movepack algorithm instead of f.move when opening a new window.
1252
1253
1254
1255## 3.4  (1996-09-14  or earlier)
1256
12571. 2 new keywords: XMoveGrid and YMoveGrid with an integer parameter.
1258    Constrains window moves so that its x and y coordinates are multiple
1259    of the specified values. Useful to align windows easily.
1260
12611. New function: f.deleteordestroy. First tries to delete the window
1262    (send it `WM_DELETE_WINDOW` message), or kills it, if the client
1263    doesn't accept such message.
1264
12651. New function : f.squeeze. It squeezes a window to a null vertical
1266    size. Works only for windows with either a title, or a 3D border
1267    (in order to have something left on the screen). If the window is
1268    already squeezed, it is unsqueezed.
1269
12701. New built-in title button: `:xpm:vbar` (a vertical bar).
1271
12721. CenterFeedbackWindow : The moving and resizing information window
1273    is centered in the middle of the screen instead of the top left
1274    corner.
1275
12761. 2 New options:
1277
1278    * -version
1279        : Ctwm just prints its version number and exits.
1280    * -info
1281        : Ctwm prints its detailed version and compile time options.
1282
12831. WarpToDefaultMenuEntry (Useful only with StayUpMenus) : When using
1284    StayUpMenus, and a menu does stays up, the pointer is warped to
1285    the default entry of the menu. Try it. Can emulate double click.
1286    For example :
1287
1288        Button2 =       : icon          : f.menu "iconmenu"
1289        menu "iconmenu" {
1290            "Actions"           f.title
1291            ""                  f.separator
1292            "*Restore"          f.iconify
1293            "Move"              f.move
1294            "Squeeze"           f.squeeze
1295            "Occupy ..."        f.occupy
1296            "Occupy All"        f.occupyall
1297            ""                  f.separator
1298            "Delete"            f.deleteordestroy
1299        }
1300
1301    will result in DoubleButton2 on an icon uniconifies it.
1302
13031. When you popup a menu that is constrained by the border of the screen
1304    the pointer is warped to the first entry. (Avoid exiting ctwm when you
1305    just want to refresh the screen).
1306
13071. When compiled with `X11R6` defined, ctwm supports ICE session
1308    management.  (the code has been stolen directly from the X11R6 twm,
1309    it has not been thoroughly tested, humm... actually, not tested at
1310    all).
1311
13121. SchrinkIconTitles: A la Motif schrinking of icon titles, and expansion
1313    when mouse is inside icon.
1314    (Yes, it's misspelt.  Yes, the misspelling is accepted.)
1315
13161. AutoRaiseIcons: Icons are raised when the cursor enters it. Useful
1317    with SchrinkIconTitles.
1318
1319
13201. XPM files for title bars or buttons may include the following symbolic
1321    colors. These symbolic colors allow the possiblity of using the same
1322    3d XPM file with different colors for different titlebars.
1323
1324    Background
1325    : The main color to be used by the title bar
1326
1327    HiShadow
1328    :   The color to be used as the highlight
1329
1330    LoShadow
1331    :   The color to be used as the dark shadow.
1332
1333    Using these colors, I have built some 3d XPM files for various
1334    titlebars while still keeping the ability to change titlebar colors.
1335    [Matt Wormley <<mwormley@airship.ardfa.calpoly.edu>>]
1336
13371. Added a keyword to the .ctwmrc file: "UseSunkTitlePixmap".  This
1338    makes it so the shadows are inversed for title pixmaps when focus is
1339    lost.  This is similar to having the SunkFocusWindowTitle, but it
1340    makes your 3d XPM sink instead of just the whole bar.
1341    [Matt Wormley <<mwormley@airship.ardfa.calpoly.edu>>]
1342
13431. Added 3 new builtin 3d buttons for "Iconify", "Resize" and "Box". They
1344    are available with the :xpm: identifier in the .ctwmrc file.
1345    [Matt Wormley <<mwormley@airship.ardfa.calpoly.edu>>]
1346
13471. Added another keyword to the .ctwmrc file: "WorkSpaceFont". This
1348    allows you to specify the font to use in the workspace manager.
1349    [Matt Wormley <<mwormley@airship.ardfa.calpoly.edu>>]
1350
13511. 8 new xpm pixmaps for buttons, title highlite, etc... :
1352    3dcircle.xpm 3ddimple.xpm 3ddot.xpm 3dfeet.xpm 3dleopard.xpm 3dpie.xpm
1353    3dpyramid.xpm 3dslant.xpm
1354    [Matt Wormley <<mwormley@airship.ardfa.calpoly.edu>>]
1355
13561. 2 new functions : f.forwmapiconmgr and f.backmapiconmgr, similar to
1357    f.forwiconmgr and f.backiconmgr but only stops on mapped windows.
1358    [Scott Bolte <<scottb@cirque.moneng.mei.com>>]
1359
13601. Last minute: PixmapDirectory now accept a colon separated list of
1361    directories.
1362
13631. If you use m4, ctwm now defines `TWM_VERSION` which is the version in
1364    the form of floating point (e.g. 3.4).
1365
13661. I forgot to tell that IconRegion has now 3 more optionnal parameters
1367    iconjust, iconregjust and iconregalign. That can be used to give
1368    special values to IconJustification, IconRegionJustification and
1369    IconRegionAlignement for this IconRegion. The new syntax is :
1370
1371        IconRegion geomstring vgrav hgrav gridwidth gridheight \
1372            [iconjust] [iconregjust] [iconregalign] [{ win-list }]
1373
1374
1375
1376## 3.3  (pre-1995-02-11 or 1995-05-04)
1377
13781. Better 3D borders with SqueezeTitle.
1379
13801. New keywords : BorderShadowDepth, TitleButtonShadowDepth,
1381    TitleShadowDepth, MenuShadowDepth and IconManagerShadowDepth. You can
1382    modify the depth of the 3D shadow of all the objects.
1383
13841. f.altcontext. a new context named "alter" is introduced. The next key
1385    or button event after a call to f.altcontext will be interpreted using
1386    the alternate context. To define bindings in the alternate context, use
1387    the keyword alter in the context field of the binding command.
1388
13891. f.altkeymap. Up to 5 alternate modifiers (a1 to a5). The next key
1390    or button event after a call to f.altkeymap will be interpreted with
1391    this alternate modifies set. To define bindings with an alternate
1392    modifier, use the keyword 'a' followed by the number of the modifier in
1393    the modifier field of the binding command. Only the root, window, icon
1394    and iconmgr context are allowed when an alternate modified is used.
1395
13961. Default menu entry : If a menu entry name begins with a "\*" (star),
1397    this star won't be displayed and the corresponding entry will be the
1398    default entry for this menu. When a menu has a default entry and is used
1399    as a pull-right in another menu, this default entry action will be executed
1400    automatically when this submenu is selected without being displayed.
1401    It's hard to explain, but easy to understand.
1402
14031. New keywords:
1404
1405    `ReallyMoveInWorkspaceManager`
1406    : tells ctwm to move the actual window when the user is moving the
1407      small windows in the WorkSpaceMap window.
1408
1409    `AlwaysShowWindowWhenMovingFromWorkspaceManager`
1410    : tells ctwm to always map the actual window during the move,
1411      regardless of whether it crosses the current workspace or not. The
1412      Shift key toggles this behaviour.
1413
14141. 4 new functions:
1415
1416    * f.rightworkspace
1417    * f.leftworkspace
1418    * f.upworkspace
1419    * f.downworkspace
1420
1421    Do what you expect.
1422
14231. The function f.raiseicons (from Rickard Westman <<ricwe@ida.liu.se>>).
1424    Raises all icons.
1425
14261. A new keyword: IconRegionAlignement. Like IconRegionJustification
1427    but align vertically. The parameter is "top", "center", "bottom" or
1428    "border".
1429
14301. f.addtoworkspace, f.removefromworkspace and f.toggleoccupation. (idea
1431    from Kai Grossjohann <<grossjoh@linus.informatik.uni-dortmund.de>>). They
1432    take one argument that is a workspace name. When applied to a window,
1433    they add to, remove from, or toggle the occupation of this window in
1434    this workspace.
1435
14361. AlwaysOnTop (from Stefan Monnier <<monnier@di.epfl.ch>>). Accept a list
1437    of windows as argument. Ctwm will do it's best to keep these windows
1438    on top of the screen. Not perfect.
1439
14401. Some moving stuff.
1441
1442    f.movepack
1443    : is like f.move, but it tries to avoid overlapping of windows on the
1444      screen.  When the moving window begin to overlap with another
1445      window, the move is stopped.  If you go too far over the other
1446      window (more than MovePackResistance pixels), the move is resumed
1447      and the moving window can overlap with the other window. Useful to
1448      pack windows closely.
1449
1450    f.movepush
1451    : Instead of stopping the move, tries to push the other window to
1452      avoid overlap.  f.movepush is here mainly because I found it
1453      amusing to do it. Is is not very useful.
1454
14551. `TitleJustification`: Takes one string argument : "left", "center", or
1456    "right". Tells ctwm how to justify the window titles.
1457
14581. `UseThreeDWMap`: Tells ctwm to use 3D decorations for the small windows
1459    in the workspace map.
1460
14611. `ReverseCurrentWorkspace`: Tells ctwm to reverse the background and
1462    foreground colors in the small windows in the workspace map for the
1463    current workspace.
1464
14651. `DontWarpCursorInWMap`: Tells ctwm not to warp the cursor to the
1466    corresponding actual window when you click in a small window in the
1467    workspace map.
1468
14691. If there is neither MapWindowBackground, nor MapWindowForeground in the
1470    config file,the window title colors are used for the small windows in the
1471    workspace map.
1472
1473
1474
1475## 3.2  (1994-11-13  or earlier)
1476
14771. I have considerably reworked the focus handling. So I have probably
1478    introduced some problems.
1479
14801. New keyword: `NoIconManagerFocus`. Tells ctwm not to set focus on windows
1481    when the pointer is in an IconManager.
1482
14831. new option: `-W`. Tells ctwm not to display any welcome when starting.
1484    To be used on slow machines.
1485
14861. New keyword: `StayUpMenus`. Tells ctwm to use stayup menus. These
1487    menus will stay on the screen when ButtonUp, if either the menu has
1488    not yet been entered by the pointer, or the current item is a
1489    f.title.
1490
14911. Now ctwm tries to use welcome.xwd instead of welcome.xpm if it exists.
1492    On my machine the ctwm process size went from 2.3MB to 1MB when changing
1493    this. Xpm is very greedy.
1494
14951. New keyword: `IconRegionJustification`. Tells ctwm how to justify
1496    icons inside their place in the IconRegion. This keyword needs a
1497    string value. The acceptable values are : "left", "center", "right"
1498    and "border".  If "border" is given, the justification will be "left"
1499    if the icon region gravity is "west" and "right" if the icon region
1500    gravity is "east".  (clever, isn't it)
1501
15021. If you specify the `-f filename` option, ctwm will first try to load
1503    filename.scrnum, where scrnum is the screen number. If it fails, it
1504    will try to load filename as usual.
1505
15061. TitleButtons can now have different bindings for buttons with the
1507    following syntax :
1508
1509        LeftTitleButton ":xpm:menu" {
1510            Button1 : f.menu "WindowMenu"
1511            Button2 : f.zoom
1512            Button3 : f.hzoom
1513        }
1514
1515    The old syntax is of course accepted.
1516    Patch from Stefan Monnier <<Stefan_Monnier@NIAGARA.NECTAR.CS.CMU.EDU>>.
1517
15181. A lot of new animated title buttons : `%xpm:menu-up`, `%xpm:menu-down`,
1519    `%xpm:resize-out-top`, `%xpm:resize-in-top`, `%xpm:resize-out-bot`,
1520    `%xpm:resize-in-bot`, `%xpm:maze-out`, `%xpm:maze-in`, `%xpm:zoom-out`,
1521    `%xpm:zoom-in` and `%xpm:zoom-inout`. From Stefan Monnier
1522    <<Stefan_Monnier@NIAGARA.NECTAR.CS.CMU.EDU>>.
1523
15241. 2 new builtin menus: TwmAllWindows and TwmWorkspaces. Guess what they
1525    do.
1526
15271. You can now bind menus to keys. When a menu is visible, you can
1528    navigate in it with the arrow keys. "Down" or space goes down, "Up"
1529    goes up, "Left" pops down the menu, and "Right" activates the current
1530    entry. The first letter of an entry name activates this entry (the first
1531    one if several entries match). If the first letter is ~ then
1532    Meta-the-second-letter activates it, if this first letter is ^ then
1533    Control-the-second-letter activates it, and if this first letter is space,
1534    then the second letter activates it.
1535
15361. Support for VMS. Patch from Peter Chang <<peterc@v2.ph.man.ac.uk>>.
1537    Completely untested. If you have problems to build on VMS ask
1538    Peter Chang.
1539
15401. New keyword: `MoveOffResistance`.  Idea borrowed to fvwm.  If you set
1541    MoveOffResistance to a positive (n) value, dontmoveoff will only
1542    prevent you from going off the edge if you're within n pixels off the
1543    edge. If you go further, dontmoveoff gives up and lets you go as far
1544    as you wish.  f.forcemove still allows you to totally ignore
1545    dontmoveoff. A negative value puts you back into "never moveoff" mode
1546    (it's the default).
1547
15481. The files `background[1-7].xpm` and `background9.xpm` have been
1549    removed from the distribution. Someone tells me that they are
1550    copyrighted. I tried to contact him in order to join his copyright,
1551    but his mail address is invalid.  <<desktop-textures@avernus.com>>.
1552    Most of these backgrounds and much more can be obtained in the AIcons
1553    package on ftp.x.org. Particularly in cl-bgnd/Textures: bg_blu.gif,
1554    concrete.gif, marble1.gif, sharks.gif bg_grn.gif, granite_dark.gif,
1555    marble2.gif, snails.gif, coarse.gif, granite_light.gif and pool.gif.
1556
15571. New keyword: `BorderResizeCursors` with no parameter. If used ctwm
1558    will put nice cursors when the cursor in on the window borders.  To
1559    be used when you have bound a button to f.resize in the frame
1560    context.
1561
15621. The xpm files are now installed in `$(TWMDIR)/images` instead of
1563    `$(TWMDIR)`.
1564
15651. Due to the many problems I had with signals being slightly different
1566    on different systems, I rewrote the animation handling without using
1567    signals anymore. I hope it is more portable. The old code is still
1568    available if you define USE_SIGNALS.
1569
1570
1571
1572## 3.1  (1994-01-28)
1573
15741. Ctwm is moving. You can now have animated images for icons, root
1575    backgrounds, title buttons and focus window title image. This adds
1576    one new keyword: `AnimationSpeed`, and 4 new function:
1577    `f.startanimation`, `f.stopanimation`, `f.speedupanimation` and
1578    `f.slowdownanimation`. An image name is considered an animation if it
1579    contains the percent (%) character. In which case ctwm replaces this
1580    character by numbers starting a 1, and will play an animation with
1581    all these images. There is only 2 examples : ball%.xpm suitable for
1582    icons, and supman%.xbm suitable for title highlight.  Another example
1583    (much more beautiful) can be found in the Mosaic distribution. There
1584    is also one built-in animation for title buttons : `%xpm:resize`, for
1585    example :
1586
1587        RightTitleButton                "%xpm:resize" = f.resize
1588
15891. Add the WMgrButtonShadowDepth keyword to control the depth of the
1590    shadow of the workspace manager buttons.
1591
15921. The RandomPlacement command has now an optionnal parameter:
1593    "on", "off", "all" or "unmapped".
1594
15951. Three new keywords : ChangeWorkspaceFunction, IconifyFunction and
1596    DeIconifyFunction, the argument is the name of a function that is
1597    executed whenever the corresponding event occurs. Useful for sounds :
1598
1599        ChangeWorkspaceFunction !"cat /users/lecom/sounds/bom.au 2>/dev/null 1>/dev/audio &"
1600
16011. A new keyword : IconJustification with 1 argument, either: "left",
1602    "center" or "right". Tells ctwm how to justify the icon image on the
1603    icon title (if any).
1604
16051. flex is now supported.
1606
16071. The IconRegion keyword now support an optionnal winlist argument.
1608    Thanks to Mike Hoswell <<hoswell@ncar.ucar.edu>> for adding this.
1609
16101. f.separator now works (does something) with 3D menus.
1611
16121. The format xwd is now accepted for images (icons, background, ...). You
1613    have to prefix the image file name with xwd: to use this format.
1614    If the first character of an image file name is |, the filename is
1615    supposed to be a command that output a xwd image, and it is executed.
1616    For example, to use a gif file, use :
1617
1618        "|(giftoppm | pnmtoxwd) < /users/lecom/images/2010.gif"
1619
16201. A new keyword: MaxIconTitleWidth with an integer argument. If an icon
1621    title is larger than this integer, it is truncated.
1622
16231. A sound extension is supported. To use it you have to define
1624    `USE_SOUND` in the Imakefile (not defined by default). In order to
1625    use this option you need the rplay package. The documentation for
1626    this extension is in sounds.doc. Warning: this extension is not
1627    mine, and I don't use it, so don't expect a good support if you have
1628    problems with it.
1629
16301. A new keyword : NoBorder with a window list argument. These windows
1631    won't have borders. Thanks to J.P. Albers van der Linden
1632    <<albers@pasichva.serigate.philips.nl>> for this patch.
1633
16341. Ctwm has a new option selectable with the flag `-w`, if used, ctwm
1635    will not take over the whole screen(s), instead it will create a new
1636    window and manage it. The `-w` has an optional argument which is a
1637    window id of an existing window, if specified, ctwm will try to
1638    manage this window.  This is totally useless, but I like it. The
1639    `f.adoptwindow` function can be used to capture an existing window
1640    into such a captive ctwm. A possible use of such mode can be to test
1641    new configuration file without restarting ctwm.
1642
16431. Now the welcome file can be of any type understood by ctwm. So it must
1644    be prefixed with its type. The default is `xpm:welcome.xpm` if the
1645    XPM option is compiled in, else it is `xwd:welcome.xwd`. You use for
1646    example:
1647
1648        setenv CTWM_WELCOME_FILE "|(giftoppm | pnmtoxwd) < ~/images/2010.gif"
1649
16501. You can now have 3D window borders with the keyword: UseThreeDBorders.
1651    In which case the 3D border width is given with: ThreeDBorderWidth.
1652    The default value is 6.  The color is BorderColor for the window that
1653    has focus and BorderTileBackground for all others windows. Note: The
1654    3D borders do not merge very well with squeezed titles, as the top
1655    edge of the window where the title is missing does not get a 3d
1656    border.
1657
16581. Now, WindowRing can be specified without argument, in this case all
1659    the windows are in the ring. (Alec Wolman
1660    <<wolman@blue.cs.washington.edu>>)
1661
16621. New keyword: WarpRingOnScreen, if present, tells ctwm that f.warpring
1663    should warp pointer only to windows visible in the current workspace.
1664
1665
1666
1667## 3.0  (1993-07-21)
1668
16691. A few bugs fixes.
1670
16711. A 3D presentation of menus, titles and IconManagers can be selected
1672    with UseThreeDMenus, UseThreeDTitles and UseThreeDIconManagers. If
1673    UseThreeDTitles is set the default values for TitleButtonBorderWidth,
1674    FramePadding, TitlePadding, ButtonIndent are set to 0 pixels. I am
1675    not that proud of the appearance of 3D titles but 3D menus look nice.
1676    If UseThreeDTitles is set the flag SunkFocusWindowTitle tells ctwm to
1677    sunk the title of the window that the focus. 3D features look ugly on
1678    monochrome displays, but I have no such display for testing purpose.
1679    If a monochrome display owner can have a look, he is welcome. The
1680    contrast of the clear and dark shadows can be tuned via the
1681    ClearShadowContrast and DarkShadowContrast parameters. These
1682    parameters are percentages.  The formulas used are :
1683
1684        clear.{RGB} = (65535 - color.{RGB}) * (ClearShadowContrast / 100)
1685        dark.{RGB}  = color.{RGB} * ((100 - DarkShadowContrast) / 100)
1686
1687    If you choose UseThreeDIconManagers, icon titles are also 3D. By
1688    defaults new colors are allocated for shadows, but you can specify
1689    BeNiceToColormap to inform ctwm to use stipple instead of new colors,
1690    the effect is less beautiful, but acceptable.
1691
1692
16931. A new keyword: NoIconTitle with an optionnal window list.
1694
16951. A new keyword: TransientOnTop with an integer parameter. This
1696    paramater is a percentage and tells ctwm to put transient (and
1697    non-group leader) windows always on top of their leader only if their
1698    surface is smaller than this fraction of the surface of their leader.
1699
17001. OpaqueMove and OpaqueResize now accept an optionnal list of windows
1701    as parameter. They also have their NoOpaqueMove and NoOpaqueResize
1702    counterpart with the same syntax.
1703
17041. Two new keywords: OpaqueMoveThreshold and OpaqueResizeThreshold with
1705    one integer parameter. The parameter represent a percentage of the
1706    screen surface. If Opaque{Move,Resize} is active for a window, (via
1707    point 4) the opaque {move, resize} is done only if the window surface
1708    is smaller than this percentage of the screen. The default is large
1709    enough.
1710
17111. Startup is optionally piped into `m4` before ctwm parse it, ypu can
1712    now have a common startup file for ctwm, tvtwm, etc ... It can be
1713    disabled at compile time by undefining USEM4 in Imakefile. It can be
1714    disabled at execution time by using the `-n` option. Take care if you
1715    have backquotes (`) in your .ctwmrc file. This character is special
1716    to m4. In that case, put something like :
1717
1718        changequote(,)
1719        changequote(``,'')
1720
1721    at the beginning of your .ctwmrc.
1722
17231. The startup looks nicer (I think). If you use XPM and the file
1724    welcome.xpm is present in your PixmapDirectory, it is displayed while
1725    the startup is in progress. Unfortunately, the PixmapDirectory is
1726    known only after the .ctwmrc is loaded, and this loading is a large
1727    part of the startup time. So you can define the environnement
1728    variable `CTWM_WELCOME_FILE` to point to an XPM file, in which case
1729    it will be displayed very quickly.
1730
17311. A new function: f.separator, valid only in menus. The effect is to add
1732    a line separator between the previous and the following entry.  The
1733    name selector part in the menu is not used. f.separator works only
1734    with conventionnal menus, not with 3D menus.
1735
17361. Thanks to <<bret@essex.ac.uk>>, the man page is integrated with the
1737    original twm one, and is of a much better quality.
1738
17391. While moving a window, the position is displayed in a similar way as
1740    the size when resizing.
1741
17421. The info window now display the compile time options of the current
1743    version of ctwm.
1744
17451. You can now specify xpm pixmap title buttons and TitleHighlight.
1746    There is 5 built-in scalable pixmap for buttons, `:xpm:menu`,
1747    `:xpm:dot`, `:xpm:resize`, `:xpm:zoom` and `:xpm:bar`.
1748
17491. Ctwm now restarts when receiving signal SIGHUP, so to restart it from
1750    a shell, use `kill -1 the_ctwm_pid`.
1751
17521. 2 New keywords: WMgrVertButtonIndent and WMgrHorizButtonIndent with 1
1753    parameter, specifying the vertical and horizontal space beetween
1754    buttons in the workspace manager.
1755
17561. Some more xpm files given. Among them several backgrounds.
1757
17581. Ctwm set the property `WM_WORKSPACELIST` (type STRING) on the root
1759    window, this property contains the null separated list of all the
1760    workspaces. Now the `WM_OCCUPATION` property on each window is a null
1761    separated list instead of a space separated list, it was wrong since
1762    workspace names can contain spaces. So, the first time you will start
1763    the this version, your windows will show up anywhere.
1764
17651. A new library libctwm.a and an include file ctwm.h are given. The
1766    library contains functions for an external program to have some
1767    control over ctwm. The functions are:
1768
1769        Bool    CtwmIsRunning                   ();
1770        char    **CtwmWorkspaces                ();
1771        char    *CtwmCurrentWorkspace           ();
1772        int     CtwmChangeWorkspace             ();
1773        char    **CtwmCurrentOccupation         ();
1774        int     CtwmSetOccupation               ();
1775        int     CtwmAddToCurrentWorkspace       ();
1776
1777    There is no documentation. A program demolib.c is given to help.
1778
1779
1780
1781## 2.2  (1993-02-05)
1782
17831. Bugs:
1784
1785    * Redraw small windows when icon name changes.
1786    * Kill window from the title bar menu
1787    * Partial geometry on Workspace manager can core dump.
1788    * AutoRaise and tiny windows in the Workspace Map.
1789
17901. Transient windows and non group leader windows are now always on the
1791    top of their leader.
1792
17931. When an icon name changes, the icon itself changes automatically
1794    according the Icons list in your .ctwmrc. This is very useful for
1795    clients that have several states. For example xrn or some X mail
1796    readers can have two differents icons for new mail (news) / no new
1797    mail (news).
1798
17991. A new keyword: TransientHasOccupation has been added for people
1800    annoyed by the fact that since ctwm-2.1, transient-for non
1801    group-leader windows have the same occupation that their leader. If
1802    you specify this, these windows have their own occupation.
1803
18041. A new keyword: AutoOccupy. If specified, the occupation of a client is
1805    changed automatically when it's name or icon name changes, according
1806    to the Occupy list in your .ctwmrc. For example a mail reader can
1807    popup instantly in the current workspace when mail arrives.
1808
18091. A new keyword: DontPaintRootWindow. If specified, the root window is
1810    not painted, whatever you told in the Workspaces specification. This
1811    is useful to have pixmaps in the Workspace Map but not on the root
1812    window.
1813
18141. You can use XPM pixmaps for your background root window. Use
1815    xpm:filename instead of @filename. The latter is still accepted. Of
1816    course if your XPM file has transparent parts, there are not
1817    transparent on the root window, i.e. you dont see the electron gun
1818    through it.
1819
18201. XPMIconDirectory is replaced by PixmapDirectory. (XPMIconDirectory is
1821    still accepted).
1822
18231. You can now use colored root background pixmap and icons in many
1824    formats.  Ctwm use the imconv library from the San Diego
1825    Supercomputer Center.  To use these formats, specify: "im:filename"
1826    for the pixmap name.
1827
1828    * The following format are supported :
1829
1830        bmp
1831        :    Microsoft Windows bitmap image file
1832
1833        cur
1834        :    Microsoft Windows cursor image file
1835
1836        eps
1837        :    Adobe Encapsulated PostScript file
1838
1839        gif
1840        :    Compuserve Graphics image file
1841
1842        hdf
1843        :    Hierarchical Data File
1844
1845        ico
1846        :    Microsoft Windows icon image file
1847
1848        icon
1849        :    Sun Icon and Cursor file
1850
1851        iff
1852        :    Sun TAAC Image File Format
1853
1854        mpnt
1855        :    Apple Macintosh MacPaint file
1856
1857        pbm
1858        :    PBM Portable Bit Map file
1859
1860        pcx
1861        :    ZSoft IBM PC Paintbrush file
1862
1863        pgm
1864        :    PBM Portable Gray Map file
1865
1866        pic
1867        :    PIXAR picture file
1868
1869        pict
1870        :    Apple Macintosh QuickDraw/PICT file
1871
1872        pix
1873        :    Alias image file
1874
1875        ppm
1876        :    PBM Portable Pixel Map file
1877
1878        pnm
1879        :    PBM Portable aNy Map file
1880
1881        ps
1882        :    Adobe PostScript file
1883
1884        ras
1885        :    Sun Rasterfile
1886
1887        rgb
1888        :    SGI RGB image file
1889
1890        rla
1891        :    Wavefront raster image file
1892
1893        rle
1894        :    Utah Run length encoded image file
1895
1896        synu
1897        :    SDSC Synu image file
1898
1899        tga
1900        :    Truevision Targa image file
1901
1902        tiff
1903        :    Tagged image file
1904
1905        viff
1906        :    Khoros Visualization image file
1907
1908        x
1909        :    AVS X image file
1910
1911        xbm
1912        :    X11 bitmap file
1913
1914        xwd
1915        :    X Window System window dump image file
1916
1917    * You can find the imconv package at `ftp.sdsc.edu`. in the directory
1918      `/pub/sdsc/graphics/imtools`.
1919
1920    * If `(width > screenwidth / 2) || (height > screenheight / 2)` the
1921      image is centered else it is tiled.
1922
1923    * If you don't have the libim library or don't want to use it,
1924      undefine IMCONV in Imakefile.
1925
1926    But take care :
1927
1928    * It is very memory consuming (on the server side).
1929    * It is very color cells consuming.
1930    * The ctwm executable is much larger executable.
1931    * Startup is much much slower (but not the workspace swap).
1932    * It works only for 8 planes pixmaps and 8 planes screens. If there
1933      is an imconv specialist somewhere that can generelize this, he is
1934      welcome.
1935
19361. Two new functions : f.nextworkspace, f.prevworkspace.
1937
19381. Xpm examples files are now automatically installed in `$(TWMDIR)`
1939
19401. An example of .ctwmrc is given, showing some aspect of ctwm
1941    (example.ctwmrc). It is not a complete .ctwmrc, only the ctwm
1942    aspects are shown.
1943
19441. A new file PROBLEMS has been added that lists some problems you
1945    can have while using ctwm and some solutions.
1946
1947Is there any good pixmap designer out there, that i can add beautiful
1948icons and background to the distribution. Don't use too many colors,
1949try to use the same few already used in the example icons.
1950
1951
1952
1953## 2.1  (1992-12-22)
1954
19551. Cleanup code to make gcc happy.
1956
19571. Bugs fixed
1958
1959    * IconMaskHint honored.
1960
1961    * Workaround a bug on HP7xx/8.07 servers for RaiseLower in Map
1962        window. The stacking order in the MapWindow was not correct on
1963        those servers. Use
1964
1965            EXTRA_DEFINES = -DBUGGY_HP700_SERVER
1966
1967        in your Imakefile if you plan to use this server. It doesn't
1968        break on others servers.
1969
1970    * No longer core dump if MapWindowCurrentWorkSpace or
1971        MapWindowDefaultWorkSpace are specified before WorkSpaces in
1972        .ctwmrc
1973
1974    * Small windows handling in the WorkspaceMap window works even if the
1975        Workspace Manager window has a title (that was not the case with
1976        ctwm-2.0).
1977
1978    * ForceIcon works for Xpm icons.
1979
1980    * Occupation of "transient for" window is correct.
1981
1982    * RestartPreviousState necessary to keep previous window occupation
1983        on restart.
1984
1985    * If a window dies while Occupy Window is mapped, the Occupy Window
1986        is correctly unmapped.
1987
19881. Ctwm now maintains the `WM_CURRENTWORKSPACE` property on the root
1989    window and `WM_OCCUPATION` on every windows. They mean what you
1990    think.  These properties are string properties and are in clear text
1991    instead of an obscure mask. If an external application changes these
1992    properties ctwm respond with the correct actions, changing the
1993    current workspace or the occupation of a window. I give a small
1994    example (gtw.c). An application can manage its occupation and it is
1995    even possible to write an external workspace manager. It is of course
1996    not ICCCM compliant because ICCCM says nothing on multiple
1997    workspaces. The special names "all" and "current" can be used. And
1998    you can specify relative occupations if the workspace names list
1999    begin with a "+" or "-" (ex: "+current" adds a window to the current
2000    workspace).
2001
20021. 3 new functions:
2003
2004    `f.pin`
2005    :   Pin/Unpin a menu on the screen. Only usable inside a root menu.
2006
2007    `f.vanish`
2008    :   Remove a window from the current workspace.  Works only if the
2009        window occupies at least one other workspace.
2010
2011    `f.warphere "win-name"`
2012    :   Adds the window whose name matches win-name to the current
2013        workspace and warps the pointer to it.
2014
20151. And a new keyword: `NoShowOccupyAll`.  Tells ctwm not to show
2016    OccupyAll windows in the WorkSpaceMap window.
2017
20181. All window names can now be specified as (shell-like) regular expressions.
2019
2020
2021
2022## 2.0  (date unknown)
2023
20241. A few bugs fixed:
2025
2026    * Resize at window creation with button2 works.
2027
2028    * Some others i don't remember.
2029
20301. Better support of monochrome displays: video inverse instead of 3d
2031    buttons.
2032
20331. WorkSpaceManager and Occupy Window are now resizable.  Don't forget to
2034    verify you have a powerful server before resizing the workspace
2035    manager with OpaqueResize set.
2036
20371. X11R4 support with Imakefile.X11R4 (i didn't try so tell me).
2038
20391. The visibility of the workspace manager is now consistant with the
2040    visibility of the icon managers.  This mean that by default the
2041    workspace manager is *NOT* visible at startup.  Use the
2042    ShowWorkSpaceManager to make it visible at startup.
2043
20441. Two new functions: f.showworkspacemgr and f.hideworkspacemgr have been
2045    added. They do what you imagine.
2046
20471. And now, the cherry on the cake. The workspace manager has now 2
2048    states, the button state (the usual one) and the map state (the new
2049    one). In the map state  the buttons  are replaced  by windows
2050    displaying  a synthetic view of the corresponding workspaces.  All
2051    the non-iconified windows of the workspace are shown as small windows
2052    with the  icon name  written in it.  It looks like  the virtual
2053    screen of  [t]vtwm, but, of course, much nicer.
2054
2055    * In this state, you can modify directly the occupation of your
2056        windows by manipulating these little windows.
2057
2058        * Button1 move a window from a workspace to another.
2059        * Button2 copy a window from a workspace to another.
2060        * Button3 remove a window from a workspace.
2061
2062    * Clicking in the "root" of these windows warps you to the
2063        corresponding workspace.  Clicking and releasing Button1 or
2064        Button2 quickly in a small window go to the corresponding
2065        workspace and warps the pointer to the corresponding window.
2066
2067    * The Control-Key (Press and Release) in workspace manager toggles
2068        the buttons and map state.
2069
2070    * Four variables and Three functions manipulates this:
2071
2072        * StartInMapState: The map state is selected at startup, default is
2073          buttons state.
2074
2075        * MapWindowCurrentWorkSpace: The aspect of the current workspace in
2076          the map window.
2077
2078        * MapWindowDefaultWorkSpace:  Specify the aspect of the non-current
2079          workspaces in the map window.
2080
2081        * MapWindowBackground:
2082        * MapWindowForeground:  Specify the aspect of the small  windows in
2083          the map window on a per-client basis.
2084
2085        * f.setbuttonsstate: You can guess.
2086
2087        * f.setmapstate: You can guess.
2088
2089        * f.togglestate: You can guess.
2090
20911. AutoRaise with RaiseDelay.  Thanks to Johan Vromans <<jv@mh.nl>> who
2092    gave me this patch.  I think Warren Jessop <<whj@cs.washington.edu>>
2093    wrote it for twm.
2094
2095
2096
2097## 1.3  (1992-09-16)
2098
20991. Many bugs fixed:
2100
2101    * Partial geometry in the WorkSpaceManagerGeometry statement no
2102        longer cause ctwm to core dump.
2103
2104    * The occupy window name now is "Occupy Window" instead of "Occupy WIndow"
2105        a typo on the uppercase I in window.
2106
2107    * Several types problems that make good compilers to issue warnings.
2108
2109    * The icons of the WorkSpaceManager and Occupy Window windows now
2110        behave correctly with ButtonPress.
2111
2112    * UnknownIcon can now have Xpm icons specified.
2113
2114    * f.showiconmgr no longer map empty icon managers.
2115
2116    * The ctwm process is smaller (even smaller than twm).
2117
21181. Add the Occupy command in .ctwmrc, you can now specify at startup
2119    which window occupy which workspace.  Example:
2120
2121        Occupy {
2122                      "xload"  {"all"}
2123            Window    "xterm"  {"here" "there" "elsewhere"}
2124                      "xv"     {"images"}
2125            WorkSpace "images" {"xloadimage"}
2126        }
2127
2128
2129
2130## 1.2  (date unknown)
2131
21321. You can now directly edit workspace names in their buttons. only
2133    printable characters, delete and backspace keys are honored.
2134
21351. Ctwm now handle shaped colored icons in XPM format. This added the
2136    variable XPMIconDirectory, and slightly modified the syntax of the
2137    Icons command. The XPM icon file names should be prefixed by the
2138    character '@' to distinguished them from the ordinary bitmap files.
2139
2140    Example:
2141
2142        XPMIconDirectory  "/usr/lib/X11/X11/XPM"
2143
2144        Icons {
2145            "Axe"    "@xedit.xpm"
2146            "xterm"  "@xterm.xpm"
2147            "xrn"    "@xrn.xpm"
2148            "HPterm" "@hpterm.xpm"
2149            "XAlarm" "@datebook.xpm"
2150            "Xman"   "@xman.xpm"
2151        }
2152
2153    These above xpm pixmap are given.
2154
21551. Many bugs fixed:
2156
2157    * Icon regions now works.
2158    * The absence of ShowIconManager is taken into account.
2159    * The `-iconic` flag is honored.
2160    * The `-xrm 'ctwm.workspace'` works as expected.
2161    * I think that f.warpto[to|ring] works correctly i.e warps.  Also to
2162        the correct workspace if the destination window doesn't occupy
2163        the current workspace.
2164    * A few minor bugs fixed.
2165
2166
2167
2168## 1.1  (1992-06-24 or 26)
2169
21701. Correction of a few bugs
2171
21721. Add the OpaqueResize flag: similar to OpaqueMove, but redraw the
2173    window you are resizing at each motion event. Extremely resource
2174    consuming, but beautiful with fast server/client/network.
2175
21761. Now if you don't specify any background/foreground/pixmap indication
2177    for the root window, ctwm leave it alone so you can have your own
2178    root background pixmap.
2179
21801. You can now specify on the command line a list of workspaces in which a
2181    new client opens.  The syntax is:
2182
2183        whatever_client -xrm 'ctwm.workspace: name1 name2 ... namen'
2184
2185        or
2186
2187        whatever_client -xrm 'ctwm.workspace: all'
2188
2189    where 'name1', 'name2', ..., 'namen' are names of workspaces and
2190    'all' refers to all workspaces.  Example:
2191
2192        xload -xrm 'ctwm.workspace: all'
2193
21941. Add the  OccupyAll command in .ctwmrc, you can now specify at startup
2195    a list of windows that occupy all the workspaces.  Example:
2196
2197        OccupyAll {
2198            "xload"
2199            "xconsole"
2200            "xbiff"
2201        }
2202
22031. Add the f.gotoworkspace function. It goes the workspace specified by
2204    its name.  Example:
2205
2206        "F1"      =    : root           : f.gotoworkspace "cognac"
2207
2208
2209
2210## 1.0  (after 1992-04-22)
2211
2212
2213
2214
2215
2216{>>
2217 vim:expandtab:ft=markdown:formatoptions-=q:formatoptions+=2
2218<<}
2219