From 0.6.0 to 0.6.1: (Massimiliano Ghilardi, Milos Jakubicek, 17 Feb 2009) * Fixed uninitialized variable bug in --hw=gfx introduced in 0.6.0, sometimes causing twin/twdisplay not to draw anything when using --hw=gfx, especially on 64 bit archs. * Added explicit copyright statement to all source files (thanks, Milos!) From 0.5.1 to 0.6.0: (Massimiliano Ghilardi, 01 Dec 2007) * Fixed build errors with gcc 4.0, 4.1 and 4.2. * Fixed some (not all) pointer <-> integer conversion issues on 64 bit archs. * Fixed time arithmetic overflow bug often causing twin to hang in a busy loop for several seconds on 64 bit archs. * Fixed raw keyboard support for --hw=tty on Linux console which sometimes got confused between being in the active console and being switched away, resulting in raw keyboard to screw up. * Added dead keys and compose (Multi_key) support to --hw=X11 and --hw=gfx. * Added `view=x++' option to --hw=X11 and --hw=gfx, allowing to show only a portion of twin desktop. It is not possible to resize the X11 windows created using this option. Used with multiple twdisplay/twattach allows to split twin desktop across multiple X11 screens/servers. Example: suppose your twin is using a 100x30 desktop. Then: $ twdisplay --hw=X11@:0,view=50x15+0+0 & $ twdisplay --hw=X11@:1,view=50x15+50+0 & $ twdisplay --hw=X11@:2,view=50x15+0+15 & $ twdisplay --hw=X11@:3,view=50x15+50+15 & will show your whole twin desktop split in four equal parts, each one on a different X11 server (in this example on :0 :1 :2 :3 servers). * Updated twsysmon to linux kernel 2.6 style disk activity report (using /proc/diskstats) and cpu activity report (added new states 'irq' as MAGENTA and 'wait' as HIGH|BLUE) From 0.5.0 to 0.5.1: (Massimiliano Ghilardi, 29 May 2003) * Added raw keyboard support for --hw=tty on Linux console. This is hopefully very complete, since it queries the kernel tables to implement keyboard layouts, diacriticals, compose key, console-switch, Alt+, AltGr+ and other bells and whitles found in Linux console. This finally allows twin on Linux console to react to almost *any* keys combination like Alt+Up, Shift+PageUp and Shift+PageDown. * Added new actions to system.twinrc, usable on the drivers: --hw=tty (only on Linux console), --hw=X11 and --hw=gfx. Alt+Up spawn new terminal window Shift+PageUp scroll up current window Shift+PageDown scroll down current window From 0.4.6 to 0.5.0: (Massimiliano Ghilardi, 02 Apr 2003) * Added libTw client `twcuckoo', modeled after xcuckoo. * Added support for mouse wheel (= buttons 4 and 5) in libTw, libTT and in twin server. Be aware anyway that gpm daemon (used by twin to receive mouse events on Linux console) does not support mouse wheel, at least up to gpm 1.18.1. * Updated makefiles to support building in a different directory than source tree. This allows compiling twin for multiple architectures using the same source tree, and also from read-only sources (pending issue: during build, a few symbolic links are added to the sources). To use this feature, simply type: $ /configure $ make Using this feature from a CVS snapshot is a little harder, look at `Makefile.fake' for an example. * Added CONF__ASM and CONF__LONG_LONG to configuration: now you can manually enable/disable assembler source code and `long long' support (`long long' support may automatically disable assembler source code due to internal limitations) using one of: `./configure --enable--{asm|long-long}[=yes|no]', `scripts/Configure.sh --enable--{asm|long-long}[=yes|no]', `make config', `make menuconfig', `make gconfig'. * Added proper error messages reporting to ~/.twinrc parser and to twdm code that starts twin server. * Modified tty mouse driver not to close the display upon libgpm fatal error. * Enhanced tty keyboard driver code to better detect cursors, function keys and other special keys. * Enhanced caching in CONF__ALLOC custom malloc()/free() routines. * Bumped libTw major version to 4 due to incompatible changes. * Removed `time_t' and `frac_t' types from libTw. They are now replaced by `tany'. * Removed unused parameters from Tw_CreateMsgPort(). * Rationalized and completed TTGet* and TTSet* libTT methods. * Added java-like ttfield and ttmethod classes. TT{Get,Set,Change}Field_ttobj are now wrappers for ttfield methods. Also rewrote TTCall*_ttmethod. * Started writing libTT tunneling and detunneling drivers on top of libTw. Implemented both sides (libTw client and twin server) of server extensions. * Started writing libTT tt*layout classes. * Rewrote and cleaned up libTT m4 scripts. From 0.4.5 to 0.4.6: (Massimiliano Ghilardi, 26 Mar 2003) * Fixed buffer overrun in twdisplay startup code. Patch contributed by Marco Bodrato. * Fixed memory leak in `Reload RC' if ~/.twinrc parser is a module: shm.lo is now in `wm' module instead of `rcparse' module. * Fixed missing #include in libTw headers causing build errors with gcc-3.2. * Fixed compile errors in server/hw_tty.c if CONF__UNICODE is disabled. * Fixed cut-n-paste not to paste when clicking on a window border. * Added getpt() support and error reporting to pseudo-tty allocation code, both in twin server and in twterm. * Added ShinyMetal_6x13.xpm theme, contributed by Adam Olsen. * Added `make uninstall'. * Tweaked makefiles so that 'make install DEBUG=y' does not strip installed binaries and libraries. * Changed `twdisplay' startup logic to mimic server: if started without `-hw=[...]' twdisplay now autoprobes all HW drivers: compiled-in ones and also drivers built as modules. Updated `twstart' to use autodetection in both twin server and `twdisplay'. * Updated scripts and binaries to invoke programs with double hyphens long options like `--help' * Added utf8 support to Linux console HW driver * Added more charsets to libTutf. From 0.4.4 to 0.4.5: (Massimiliano Ghilardi, 25 Oct 2002) * Relaxed option parsing for all programs to also accept double hyphens long options like `--hw' if corresponding single hyphen long options like `-hw' is accepted. * Changed server startup logic: if started without `-hw=[...]' twin now autoprobes also HW drivers built as modules, not only compiled-in ones. * Added new `kde2', `goldenblue' and `mac' themes for `-hw=gfx' with 9x19 font size. * Added new `9x19u' X11 unicode font, derived from public domain `10x20' XFree86 unicode font. * Added a lot of libTT code: buttons prelight, `field value change' events, TT{Set,Get,Unset}KeyData_ttcomponent() methods to store and retrieve arbitrary user data in ttcomponents indexed by strings, lots of methods for: ttbitmask, tteventmask, ttdata, ttbuttongroup, ttbutton, ttcheckbutton, ttradiobutton, ttscrollbar, ttscrollpane, ttslider, ttprogressbar, ttlabel, ttscroller, tttheme. * Rewrote libTT event firing logic to allow blocking events, and added logic to set event blocking criteria. Also rewrote mutex locking logic to let clients safely call TTClose*() functions even from inside listeners. * Added two more demo clients for libTT: ttdemo2 and ttdemo3. * Added libTw WIDGET_AUTO_FOCUS attribute for focus-under-mouse subwidgets policy (the subwidget and all its parents must have this attribute set for autofocus to work). Top-level widgets are still click-to-focus though. Also rewrote code sending mouse messages to clients. * Changed twin server semantics in mouse event reporting: in PRESS_* events, the button being pressed is no longer reported as held (i.e. the corresponding bit in (Code & HOLD_ANY) is not set). * Fixed missing libtool support in 0.4.4 (due to a broken autogenerated ./configure script, recreating it fixed the bug). * Fixed crashy bug in avl.c:AVLRemove(), exposed by new libTT code. * Fixed partially non-working numeric keypad on `-hw=X' and `-hw=gfx' drivers (bug introduced in 0.4.2). * Fixed broken `-hw=tty' options `mouse={xterm,twterm}' * Fixed non-working `-hw=gfx' options `{bg|root}-as-root'; changed default settings for `{bg|root}-as-*' from `{bg|root}-as-theme' to `{bg|root}-as-none' to reduce CPU usage. * Renamed SUPPORT_SHLIBS to SYS_SHLIBS in configure and makefiles. * Fixed server-side bug affecting Tw_Draw*Widget*(). * Fixed this Changelog: to manually disable i386 assembler code you need to run `ac_cv_prog_gcc_i386_asm=no ./configure [...]' * Fixed this Changelog: you can manually set how to create shared libraries with: `ac_cv_sys_shlibs={native|libtool|no} ./configure [...]' or with `make SYS_SHLIBS={native|libtool}' From 0.4.3 to 0.4.4: (Massimiliano Ghilardi, 06 Jul 2002) * Fixed out-of-date Tw/Tw++.h header causing errors in twutils build. * Fixed makefiles and Mkdep for build errors in some configurations. * Fixed a few missing `include $(TOPDIR)/makeautoconf' in makefiles. * Fixed random SEGFAULT on client menu rows activation. * Hardened twdisplay and the various HW display drivers against buffer overruns on maliciously long command line arguments. (if your system has vsnprintf(), everything is already safe and this is not necessary). * Added lt_dlopen() support for runtime module loading (unfinished). * Added more charsets to libTutf. * Added `-twin@' option to twsendmsg. * Added more options to `-hw=tty': `,mouse={xterm|twterm}' and `,utf8'. Also renamed option `,xterm' to `,mouse=xterm' and added Eterm to the list of xterm-style mouse reporting terminals. Still on `-hw=tty', added `charset=UTF-16' as an alias for `charset=ISO-8859-1,utf8'. * Changed `-hw=tty,termcap[,charset=ibm437]' driver to use alternate font ("\033[11m" or equivalent) * Added option to silence down messages echoed during `make'; to actually silence them, run `make QUIET=y [..]' * Added human-readable configuration summary at the end of './configure' execution * Added user contributed sample twin.spec file (to build RPMs) in contrib/twin.spec * Added new HW driver `-hw=gfx' : it is based on `-hw=X' and adds graphical themes for window borders, buttons, scrollbars, etc., all stored in a single .xpm file for each theme. The driver first looks for themes in user's directory ~/.twin/themes/hw_gfx/*.xpm, then in ${prefix}/share/twin/themes/hw_gfx/*.xpm, where system-wide themes get installed, finally tries to open given file without any extra prefix, so that you can specify an arbitrary file. HW driver options are the same as `-hw=X', plus: `,mono' `,color' `,theme=' (theme pixmap) `,root=' (screen root pixmap) `,bg=' (widget background pixmap) `,{root|bg}-as-{none|theme|root|bg}' (specify how to draw root or bg) Background and root pixmaps are not available if `,mono' (monochrome) is used. Option `drag' is not available if background or root pixmaps are used. If you use option `root=', you should consider running echo " " | twsetroot or, more permanently, putting Background 1 White On Black ( " " ) in your ~/.twinrc, so that screen contents does not interfere with the root pixmap. * Restored native gcc shared library support as an alternative to libtool. If `./configure' detects Linux or FreeBSD with GNU gcc then it uses builtin rules to create shared libraries, else falls back on libtool. This was necessary because installing twin with DESTDIR != "/" (as used by `rpm') breaks libtool 1.4.1 inter-library dependencies (I do not like at all that implementation of inter-library dependencies, anyway). You can manually decide how to create shared libraries with: `make SUPPORT_SHLIBS={native|libtool} [...]' * To manually disable i386 assembler code you now need to run `make GCC_I386_ASM=no [...]' (actually, this changed in 0.4.3) * Renamed Tw_Expose* functions to Tw_Draw* and changed Tw_Row4Menu to return created row. Marked compatibility code with /* backward compatibility. will be removed */ * Made `.so' extension optional in user-visible module names; you are encouraged to update your .twinrc changing any Module ".so" On into Module "" On From 0.4.2 to 0.4.3: (Massimiliano Ghilardi, 09 Jun 2002) * Fixed various compile errors on non Linux/i386 architectures (Linux/, FreeBSD/i386, SunOS/sparc). * Fixed a bug in rcparse.y causing colors not to be read correctly from ~/.twinrc on big-endian machines. * Fixed compile error if hw_display was configured as built-in. * Fixed non-working twlsobj (bug introduced in 0.4.2). * Fixed twin not detecting resizes of controlling tty used as display (with `-hw=tty'; bug introduced in 0.4.1). * Added `libtool' support. Twin now uses GNU `libtool' to build shared libraries. A few portability issues remain due to incomplete inter-library dependency support in libtool 1.3.5. * Added detailed libTT error reporting about failed display targets. * Various libTT tweaks. * Changed twterm to default to latin1 charset after reset if unicode is enabled. * Changed ./configure to check for various gcc-compatible extensions and moved OS-specific settings from makerules.in -> makeosvalues to configure -> makeautoconf. * Changed twdm install path from ${exec_prefix}/bin to ${exec_prefix}/sbin From 0.4.1 to 0.4.2: (Massimiliano Ghilardi, 26 May 2002) * Finished nested menus support. * Continued libTT: it now begins being usable, even if not 100% complete yet. * Tweaked scripts/Configure* scripts to allow build without GNU bash. (GNU bash is still required to manually configure twin and to run `make Torture') * Tweaked Makefile's internal logic; added autoexpanding archives (*.lst) and added user hints about what to run after each build step. * Removed some GCC extensions lurking in the code (mostly, text after #endif and non-constant automatic aggregate initialization like:) void foo(int a, int b, int c) { int list[] = { a, b, c }; } * Fixed X11 keyboard support to allow non-ASCII keys (>= 128, found on non-US keyboards) to work. * Fixed buggy libTw TwStat(). * Changed libTw to use recursive pthread locks, in order to allow a listener to call (most) Tw* functions safely. * Cleaned up keyboard-based use of gadgets and buttons in some builtin windows. * Cleaned up `-hw=twin' selection handling. * Moved module version numbering from internal symbols to filename: renamed *.so to *.so.$(VERSION). * Added Unicode cut-n-paste, and fixed 8bit cut-n-paste. (twutils still needs to be updated to handle unicode cut-n-paste). * Redesigned libTw code logic to reduce size: libTw.so shrinked by 35%. Wrote hand-optimized i386 assembler functions to further reduce size. (you can disable them compiling with `make SYS_ARCH_I386=n [...]') * Added libTw caching of missing server functions. Made some minor incompatible changes to TWS_* defines in . Partially incompatible changes: merged TwWriteRowWindow() into TwWriteAsciiWindow(), renamed TwResizeWindow() to TwResizeWidget() (server side implementation of TwResizeWidget() still incomplete for gadgets). * Added more libTw functions, in particular TwFindRowByCodeWindow() and Tw[Raise|Lower|Circulate|Restack][Widget|Gadget|Window|Screen|Row|MenuItem]() Glitch warning: altering a menu the user is interacting with may cause some visual incoherencies like misplaced menu windows, which go away when you close the misplaced window. From 0.4.0 to 0.4.1: (Massimiliano Ghilardi, 30 Dec 2001) * Fixed window smart placement if screen is scrolled and not at (0,0). * Fixed math overflow causing `twcat' window not to show up. * Fixed button labels on "Buttons" window. * Fixed memory leak in re-reading .twinrc. * Fixed charset for non-ascii gadget contents. * Fixed an error message report in `-hw=tty' being sent to wrong file descriptor. * Fixed twin/twdisplay segfault when starting `-hw=X@' and broken option parsing when starting `-hw=X@,'. * Fixed display hang after the last ",slow" display was closed during video activity. * Fixed a few compile errors with gcc 3.0 (thanks to Debian people for this). * Fixed build errors when compiling without Unicode support. * Removed some gcc extensions lurking in the code, as arithmetic on (void *) and on casted pointers like this: int c; char *s; c = *((int *)s)++; * Worked around KDE `knotes' spamming requests for selection contents, which resulted in `-hw=X' internal error "hw_X11.c: X11_SelectionRequest_up(): too many nested X Selection Request events!" * Updated twsysmon to linux kernel 2.4 style disk activity report. * Added a few more long options to twdisplay and twattach. * Cleaned up namespace for libraries version-related #defines. * Cleaned up Makefiles to avoid unnecessary recompiling after configuration changed. * Cleaned up libTw error reporting when socket server module is not running: libTw now reports "connection lost (socket module may be not running on server)" instead of the generic "connection lost (explicit kill or server shutdown)" * Added option `,ctty' to -hw=tty display driver. It tries to grab given tty as the controlling terminal. Helps greatly in detecting tty resizes, but may cause other processes running on that tty to quit upon display detach (on Linux, it happens only if you are root and use this option for `twattach', or also for `twdisplay' but only if the given tty is not twdisplay's controlling tty). * Added `-envrc' option to twin and to twdm: if given, twin runs the script .twenvrc.sh and reads its output, setting environment variables accordingly. Useful if twin or twdm are started by init(8) and don't have a decent $PATH. If twin is started with both `-envrc' and `-secure' (twdm *always* starts twin with `-secure'), execution of .twenvrc.sh is delayed until SetServerUid() is called, i.e. when user logs in, so that *his* ~/.twenvrc.sh is executed. A possible use of twdm with this option is placing a line like this in /etc/inittab (supposing twdm is installed in /usr/local/bin) : 1:2345:respawn:/usr/local/bin/twdm -envrc -quiet -hw=tty@/dev/tty1,ctty,TERM=linux with it, users will log in with twdm instead of the usual getty (which must be removed from /etc/inittab) From 0.3.10 to 0.4.0: (Massimiliano Ghilardi, 31 Aug 2001) * Added some more options to twdm, also twdm now sets $HOME to `/root' if it exists and $HOME is either `/' or unset. * Added caching to Tutf_UTF_16_to_*() conversions. * Added keypad state restoring on detaching a -hw=tty[...] display. * Updated `twmapscrn' using kbd-1.06 sources. * Fixed libTw build on SunOS bombing out at #include . * Fixed server-side bug causing missing fields on twlsobj for non-i386 architectures. * Fixed broken user charset translation (ESC(K ) in terminals and a few related bugs in libTutf translation routines. This should fix problems with cyrillic and other charsets. * Added utf-8 support to tty emulator and to tty display driver to properly handle unicode. * Changed makefiles to do the right thing on `make CFLAGS=[...] LDFLAGS=[...]' * Hardened libTw against malicious server data. * Finally enabled `AddScreen' and `Background' commands in .twinrc . Also removed second virtual screen, since you can now create it with the above commands. From 0.3.9 to 0.3.10: (Massimiliano Ghilardi, 31 Jul 2001) * Added `twdm' client. You can now use `twdm' as login manager instead of the obsolete `getty', `login' or the bloated `xdm', `kdm', ... ! * Added `autoconf' support. Twin now uses GNU `./configure' script to detect OS features. * Added command-line driven configuration. Beyond running `make config' or `make menuconfig' interactively, twin can now be configured with `./configure --enable-=[yes|no|mod] ...' or with `scripts/Configure --enable-=[yes|no|mod] ...' * Added `-secure' option to twin, forbids starting external programs (used by `twdm' to stop users from opening root shells). * Merged include/sockprotolist.h and libs/libTw/listmacros.h into include/socklist_m4.h * Started writing libTT, `The Text Toolkit' library. * Fixed some more build problems on FreeBSD and SunOS. Disabled threads on FreeBSD since cause clients to segfault. Any *BSD expert willing to help? * Fixed server event reporting bug after clicking on a gadget. * Fixed AVL trees using uninitialized fields. * Added support for nested menus (can be created, but are not correctly rendered yet). * Fixed setting tty speed, was forced to 0 baud. From 0.3.8 to 0.3.9: (Massimiliano Ghilardi, 25 Jun 2001) * Added Unicode support. * New libTutf library to convert between Unicode and other charsets. * Added `charset=' option to -hw=X11 and -hw=tty. * Bumped libTw major version to 3 due to the following changes: * Added prototype checking to Tw_FindFunction. * Changed events from Window-centric to Widget-centric, to accommodate for corresponding changes in the server. * Changed prototype of some crucial functions: Tw_CreateMenu, Tw_CreateWidget, Tw_CreateGadget, Tw_CreateWindow, Tw_CreateGroup. * Updated all clients to libTw.so.3 API. * Fixed libTw segfaults upon receiving huge replies from server. * Fixed a lot of libTw pointer alignment problems on non-i386 architectures. Some unaligned pointer accesses still probably exist. * Added libTw sanity checks to avoid compiling a client against a libTw with certain data sizes and running it with another libTw with incompatible data sizes (i.e. if you changed Unicode support). * Added Tw_*Stat() functions to retrieve information on libTw objects. Also added `twlsobj' client to demonstrate Tw_*Stat() usage. * Added mouse motion reporting (with no buttons pressed). To enable it from a libTw client, set the TW_WINDOW_WANT_MOUSE_MOTION flag in twidget->Attrib. To enable it from within a terminal, send "\033[?999h", to disable send "\033[?999l" (or "\033[?9h" to return to `normal' mouse reporting). * Added cut-n-paste on "Execute" window. * Added keyboard shortcuts to navigate through gadgets on WINDOW_AUTO_KEYS windows: use Arrows, TAB, Return and Escape. * Added dummy support for xterm's change icon title escape sequence. * Started writing twdialog (UNFINISHED). * Fixed shadow drawing errors in mapping/unmapping rolled up windows. * Fixed scrolling and resizing of top window not to corrupt menu bar. * Fixed window mouse selection and cursor visibility when menubar is not on top of display. * Fixed two stupid server bugs introduced in 0.3.8 that made twsysmon and twcat non working. * Fixed off-by-two resize errors with -hw=twin and in twterm client, caused by 0.3.8 change to use given size as window INTERIOR size, not considering the border. * Fixed error recovery on parsing errors in ~/.twinrc file. * Started porting to SunOS (mostly contributed by Brian Witt), and substituted the bash/sed/grep script `MkDep' with a pure C implementation (grabbed and adapted from Linux kernel sources). * libTw optimization: AVL (Adelson-Velskii and Landis) trees used to speed up listener search (grabbed from Linux kernel sources too). * Rewrote server-side implementation of libTw using `m4' preprocessor. Design is now more complex, but resulting code is less than half of the original size if CONF_SOCKET_ALIEN is enabled. * Cleaned up Tw/Tw++.h wrapper: (tlistener) type is now opaque, so that C++ clients do not depend on libTw internals. * Decided and implemented sub-windows focus policy (sub-windows are windows contained or `mapped' inside other windows). * Added support for placing cursor in a sub-window. * Documented 0.3.8 last minute fix in Changelog (read below). From 0.3.7 to 0.3.8: (Massimiliano Ghilardi, 08 Mar 2001) * Last minute fix: added InitAlloc() call to twdisplay. * Added printing of window size on menu during Interactive Resize. * Fixed ~/.twinrc "Resize" command to work correctly when given absolute numbers (i.e. "Resize 92 31" results in a 92x31 window). * Fixed redrawing during press/unpress of gadgets on non-top windows. * Fixed TwCreateWindow() to use given size as window INTERIOR size, not considering the border. Old clients on new server will create slightly larger windows, new clients on old server will create slightly smaller windows... really not lethal. * Fixed TwResizeWindow() for the same problem, and allowed TwResizeWindow() also on non-user-resizeable windows. * Fixed libTw++.h using an uninitialized variable that randomly resulted in non-working listeners. * Fixed terminal emulator to work also as module. Noone noticed this!? * Added socket protocol translation to allow connections from clients with different data sizes and different endianity. Completely backward compatible, as socket protocol was designed for this, but I did not actually implement translation until now. Set CONF_SOCKET_ALIEN in configuration as `y' or `m' to enable it. Known problems still remain in libTw and socket.so on architectures not allowing unaligned pointers. * Added support for TW_WINFL_USEEXPOSE windows and corresponding expose messages (they have type == TW_MSG_WINDOW_CHANGE and code == TW_MSG_WINDOW_EXPOSE). * `twsendmsg Builtin quit' now forces twin to exit. Also changed the twsendmsg default message code from `quit' to `open' : more useful and less risky. * Renamed `DESTDIR' as `libdir' and used `DESTDIR' only for installation. * Applied twin-devfs, twin-ncurses and twin-optflags patches from PLD team (www.pld.org.pl). From 0.3.6 to 0.3.7: (Massimiliano Ghilardi, 19 Feb 2001) * Changed the terminal emulator to close window on shell logout even if there are background processes running (they keep running without a tty). * Also changed the terminal emulator code to set window title from the program name. * Changed hilight/selection on windows not to react to simple clicks: now you need to hold mouse button, drag, then release. * Fixed compile problems on non-(Linux,FreeBSD) systems: changed GNU `grep -E' into plain `grep' and fixed MakeRules to autodetect if "echo" or "echo -e" must to be used to interpret octal sequences. * Fixed an obscure bug with selection paste on a partially obscured window. * Fixed drawing error in Roll Toggle of Maximized windows when menu was not hidden. * Fixed non-working Interactive Drag,Resize if activated with mouse from the menu (broken in 0.3.6). * Fixed keyboard traversing of menus having ONLY the common part. * Fixed non-working virtual screen scrolling while doing Interactive Drag,Resize activated with mouse. * Fixed virtual screen problems: stale selected menubar was drawn when moving down all screens, and clicking on it resulted in a sefgault. Also, activity in a window on a non-top screen was drawn on display even if the window was obscured by another screen. * Further X11 keyboard support cleanups: made arrows and other special keys work also with NumLock/CapsLock active. * Simplified menu windows handling, renamed all object types to use pointers (*) implicitly (no user visible changes). * Optimized display redrawing during heavy activity. * Finished borderless windows support (use Flag TW_WINFL_BORDERLESS). * Added GADGET_TOGGLE flag to use gadgets as checkable buttons, and new `group' object to use gadgets as radio buttons. * Added new ~/.twinrc command to load/unload modules: Module [On|Off] * Added configuration option to log twin messages in "Messages" window. * Updated twin to correctly configure display flags like bell duration/pitch, application keypad, alternate cursor keys. * Updated twevent to print human-readable key names. * Finished client-to-client messages, upgraded twevent and twterm to support them. New tiny client `twsendmsg' to send client-to-client messages: useful to open a new shell window (or any other program running in a tty) from command line: try something like twsendmsg "Builtin" open or twsendmsg "Remote Twin Term" open * Fixed non-reentrant libTw problems. * Added configuration option to make libTw thread-safe (requires POSIX pthread.h). Warning: calling libTw functions asynchronously (i.e. from signal handler) will very often cause a deadlock! Also fixed a semantic issue about blocking in Tw_Flush() and Tw_ReadMsg(). * Added stupid demo client `twthreadtest' to try libTw with threads. * Added more detailed libTw error reporting (Tw_StrErrorDetail()). * Added some more libTw functions. * Added C++ libTw wrapper (libTw++.h). Also wrote the first "serious" client: `twkalc', derived from `kcalc' of the KDE suite. Anyway `twkalc' is distributed separately, in the package `twutils'. * Rationalized and removed some redundant libTw functions. Source, binary and socket protocol compatibility preserved, with two exceptions: using libTw from 0.3.7 with older servers may result in "libTw error: function not supported by server: Tw_MapWidget" or similar errors; Also, you must now explicitly #include to access TwErrno, TwStrError() and related stuff like TW_E* error codes. * Added libTw prototypes to use with Linux ltrace(1) in docs/ltrace.conf From 0.3.5 to 0.3.6: (Massimiliano Ghilardi, 14 Jan 2001) * Added limited ShiftFlags reporting on keyboard events. * Added ShiftFlags support to Key bindings in ~/.twinrc and a commented out example for using Alt-Tab to cycle through windows. * Added Menu -> File -> Execute to run arbitrary programs without having to open a terminal. * Started adding borderless windows (still incomplete). * Added option ",slow" to all display drivers. * Added support for xterm's change window title escape sequence. * Added support for nested windows. For example, the "Remove" and "This" buttons in Menu -> ð -> Display window now are actually inside a sub-window. This was a much bigger work than what it may seem. * Updated twterm and twin server to correctly allow choosing which xterm-style protocol to send to applications. * Changed signedness of all libTw function parameters used for coordinates and sizes... for consistency they are now signed integers (`dat' or `ldat'). No need to recompile the clients. This allows to place windows (and sub-windows) at negative coords with respect to their parent. * Changed some libTw functions not yet used by any client to take advantage of the new general `widget' type. * Fixed missing setting TERM=linux in twterm. * Fixed RC Virtual Machine to use the window you clicked upon instead of the currently focused window. * Fixed SEGFAULT on Menu -> Window -> Send HotKey and RC function `SyntheticKey' used by it. * Fixed Menu -> Window -> Next and RC function `Window 1' used by it. * Fixed SneakSetupMouse(): there were some glitches if you did Interactive [Menu,Scroll,...] with keyboard and then you pressed mouse (yeah, evil). * Fixed cursor positioning during Interactive Drag or Scroll of FullScreen first window on -hw=tty display if /dev/vcsa* output was used. * Some more tweaking in -hw=tty display driver. * Fixed an old bug on backward window text selection. * Fixed another bug concerning selection on WINFL_USEROWS windows. * Fixed a compile bug in methods.c when modules are disabled. * Fixed a compile problem with X11 display driver on some platforms. * Fixed display corruption when running "mutt" inside "screen" inside "twterm"... I wrote absolute/relative coords the wrong way. Thanks to the helpful guy that reported this bug but never sent strace logs of it *grin*. * Fixed redrawing of rolled-up out-of-screen windows. * Changed selection color and tty display driver mouse pointer color. * Fixed server and socket protocol versioning. * New `make Torture' target: it compiles every possible source file under every possible configuration. Use to help me find bugs! You can torture a specific set of source files with `make torture..c torture.c ...' Example: `cd server; make torture.wm.c torture.methods.c' * Fixed another pair of compile bugs found with `make Torture'. From 0.3.4 to 0.3.5: (Massimiliano Ghilardi, 20 Dec 2000) * Compatibility break: fixed heavily sick mouse event protocol (it swapped middle/right buttons in Drag and Release, both on server and client side). This means that mouse-aware clients compiled against pre-0.3.5 libTw will not work properly with twin 0.3.5 and vice-versa. Sorry. * Removed suid-root or sgid-tty privileges to twin. You will need to manually add such privileges, as you do it AT YOUR OWN RISK. * Made the builtin window manager configurable and added RC parser for ~/.twinrc configuration file. In addition to creating the bison/yacc and lex files for RC parser and the RC Virtual Machine (it runs mouse/keyboard binds and menu functions), I had to completely rewrite the window manager :-( * Internal changes to accommodate for on-the-fly reload of ~/.twinrc The common part of the menu is not anymore a private copy: all menus access the same shared entry, which can change without having to adjust each menu (no user-visible effects). * Renamed twattach/twdisplay `-s' (silent) option to `-q' (quiet). Also changed silent/quiet option implementation to avoid race conditions. Mixing twin, twattach or twdisplay from version 0.3.5 with older ones will not work if you specify `-q' (or `-s' for older versions). * Added exclusive displays: started using option `-x' from twin, twattach or twdisplay. Option `-s' now means "shared" and is opposite of `-x' "exclusive". * New mini-client `twfindtwin' to find the TWDISPLAY of a running twin and mini-script `twstart' to attach to a running twin or start it. * Added sanity version checking on all modules. Twin now refuses to load a module of different version. * Cleaned up X11 driver shutdown in case of errors. Now closing an X window used by twin only detaches that display, without killing twin. * Removed panic shutdown when getting SIGHUP. Now SIGHUP just closes the display attached to the controlling tty, if any. In practice: closing the tty where twin is running in no longer causes twin to quit, but just to detach from the tty. To quit, ALWAYS use Menu -> File -> Quit. * Fixed a compile bug in hw_tty.c when termcap/ncurses driver was not enabled. * Fixed drawing errors when scrolling text in a rolled up window. * Added stricter compile checks using `const' attribute. * Updated the README and started writing other documentation in docs/ subdirectory (still incomplete). * Renamed Menu -> ð -> Borders window as Menu -> ð -> Buttons. From 0.3.3 to 0.3.4: (Massimiliano Ghilardi, 11 Sep 2000) * FreeBSD support added by Andreas Schweitzer. Thanks! * Fixed SEGFAULT when doing cut-n-paste on -hw=tty,stdout. * twdisplay did not react correctly to resize denials. Fixed. * Option `-nohw' added to twin: starts in the background without display. * Options `-h', `-help', `-V' and `-version' added to twin and twterm. * Termcap/ncurses driver added to -hw=tty. Now twin can run on almost any text terminal. * Options ",termcap", ",colorbug" and ",xterm" added to -hw=tty. * RollUp button "><" added on all windows. Can reduce the window to its titlebar and restore it to normal size. * Support for "floating" shadows added (i.e. so displaced to be separated from the window). * Menu -> ð -> Borders window added to tweak window borders look. Currently allows to move buttons. From 0.3.2 to 0.3.3: (Massimiliano Ghilardi, 12 Jul 2000) * Ported to AIX 3.2. I only had to fix minor problems like #includes and a few functions not available on it. Twin still does not compile out-of-the-box on AIX 3.2 and you need to work a little manually, see README.porting. * Added twin <-> libTw protocol handshaking. Tweaked internal libTw protocol to allow passing NULL instead of arrays where it makes sense; WARNING: don't mix twin or libTw from 0.3.3 and up with older twin or libTw... it will not work. * Cleaned up and modularized the window manager. Now you can write your own twin window manager! * Fixed SEGFAULT on video activity while running detached. * Fixed two socket-related bugs that could send libTw initialization data to the wrong client, freezing both who gets the unexpected data and who was waiting for it. This happened more often if twdisplay was in use. * Optimized custom malloc/free with memory blocks > PAGE_SIZE. * Added mouse support and `This' button to Display Window. * X11 keyboard support cleanups. From 0.3.1 to 0.3.2: (Massimiliano Ghilardi, 08 Jun 2000) * Fixed internal FdWQueued bookkeeping. * Fixed mouse redrawing problems with `-hw=tty'. * Fixed libTw to let twattach and twdisplay work also on compressed connections. * Fixed a few SEGFAULTs on exit. * Fixed a buffer overrun in twterm which sometimes made it completely non-working. * Fixed 1x1 display detection after Menu -> ð -> Detach * New option `,noinput' common to all display HW : starts the display as view-only, ignoring all mouse/keyboard input coming from it. * Added `make menuconfig': it uses "dialog" as user interface. Of course, let me know if your version of dialog gives problems on `make menuconfig'. * Fixed palette support on Linux console. * Completely rewritten cut-and-paste code to make it non-blocking on the server. Updated all clients, display drivers and twdisplay for the new Selection API: now twdisplay supports Selection too. Selection support on hw_tty and hw_ggi is still missing since underlying HW does not have an usable Selection mechanism. People, the code I had to write for cut-and-paste is a nightmare! From 0.3.0 to 0.3.1: (Massimiliano Ghilardi, 16 May 2000) * Updated README for the changes in twattach and for multiple display support. * Fixed autoloading consolemap translation from kernel, which got broken in 0.3.0 * Fixed `disable blink/high background' option, which got broken in 0.3.0 * Fixed small redraw glitches on X11 display when window gets unobscured. * Added option `drag' to X11 display driver. The driver will try to use XCopyArea to speedup redrawing only if you explicitly specify `-hw=X[@...],drag...' Previously this was enabled by default, but I noticed many X servers eat more CPU with XCopyArea than with a redraw. Your mileage may vary. * Optimized expose events on X11 display not to cause redraws also on other displays. * Optimized attach/detach in multi-display scenario if no resize happens: draw only on the new display HW. * Finished smart display resizing. Try attaching/detaching/resizing one of the displays when multiple ones are used... * Finished twdisplay (required adding some new libTw functions). Actually a pair of small things are still missing in twdisplay: cut-and-paste compatibility with the real display (X11, etc..) and palette changing support, but it is equally *VERY* usable. Please take a few minutes to carefully (re)read section 8. Attach/Detach of the README as twdisplay adds noticeable power to twin's attach/detach capabilities! From 0.2.8 to 0.3.0: (Massimiliano Ghilardi, 10 May 2000) * Added VNC-style multiple simultaneous displays support and updated twattach to manage them. Now you can have twin:0 display on X and on twin:1 which displays on twin:0 ... Also fixed a few deadlocks related to such a setup. * (UNFINISHED) Added VNC-style client-implemented displays: `twdisplay' starts a display driver then connects to twin and registers it. This allows any kind of setups, including attaching twin on a console of another machine, or having twin:0 display both on X and on twin:0 itself (!), and also protects twin from deadlocks and crashes of libX11 and other libraries used for the various displays. * Due to the two changes above, NEVER assume twin quitted just because you closed all its displays. Even killing a server (X, another twin, ...) where twin was displaying may not kill it; To be sure twin actually exits, either use Menu -> File -> Quit from the default menu or, if you really feel brutal, send it a fatal signal (SIGTERM, SIGSEGV, ...). Sending SIGKILL is not advised, as tty displays will be left messed up and you will get a stale /tmp/.Twin: socket. * Modified HW display drivers to allow multi-head. * Modified libTw to allow multi-head, and bumped version number to libTw.so.2. Clients will need to be recompiled to use the new library. * Added Menu -> ð -> Display to list / detach displays. * Added Menu -> ð -> Refresh. * Continued libggi display. Still INCOMPLETE (keyboard doesn't work), but I feel more and more unsatisfied by libggi and lost enthusiasm about it. * Fixed memory and file descriptor leaks in Tw_Close() * Added option `-hw=tty@-' to twattach: tells twin to attach to its own controlling tty. (`-hw=tty' instead uses the controlling tty of twattach) From 0.2.7 to 0.2.8: (Massimiliano Ghilardi, 02 May 2000) * Added options `stdout' and `TERM=' to display `-hw=tty' The first is to force twin to use stdout as display method on Linux console even if vcsa is available. The second option makes possible for twattach to specify the terminal type. Usage: `-hw=tty[@device],TERM=' or `-hw=tty[@device],stdout' * Added option `font=' to display `-hw=X'. * Added INCOMPLETE support for libggi display, use with `-hw=ggi' * Added `-padx ' and `-pady ' options to twsetroot. * Added option `-e cmd [args ...]' to twterm. Example: twterm -e pine * Cleaned up mixing Menu -> File -> Suspend and Menu -> File -> Detach * Cleaned up core dumping: core now correctly spots where fatal signals were received. * Added consolemap translation support, in a way that is independent from the underlying display (the one in 0.2.7 worked only on Linux console with -hw=tty,stdout) Created `twmapscrn', the twin-equivalent of `mapscrn'. When started from Linux console, twin will already load the current consolemap translation, so twmapscrn is often not necessary. This will hopefully make a certain russian user happy *GRIN*. From 0.2.6 to 0.2.7: (Massimiliano Ghilardi, 17 Apr 2000) * Added configurable screen background, and the external program `twsetroot' to customize it. * Top window and Focused window are no longer the same thing: now you can focus a non-top window too. * Also changed the effect of the BACK button on the window top-right corner: now it acts as Raise+Focus on non-top windows, and as Lower+UnFocus on top window. * Left-clicking on a window no longer Raises it, only Focuses it: try dragging or resizing a non-top window ;) * Left-clicking on the screen background UnFocuses all windows and pops up the Default Menu. * Added Menu -> Window -> Raise/Lower * Added WM Smart Window Placement. Coders note: Just don't specify where you want to Map the window, and the WM will (try to) choose a good place. * Added X11 selection compatibility: you can now cut-n-paste from X11 to twin and vice-versa. * Hopefully fixed non-english (russian, ...) translation table support when running on Linux console (i.e. mapscrn(8); feedback welcome). On other displays, it is just not supported yet :( * Fixed a memory leak in twsysmon. * Fixed a SEGFAULT when moving windows out-of-screen. From 0.2.5 to 0.2.6: (Massimiliano Ghilardi, 04 Apr 2000) * Fixed random SEGFAULT on Menu -> Window -> Send HotKey * Fixed an insidious bug: after twin was detached-and-reattached, the tty of the next opened shell window was becoming the controlling tty of twin; instead a reattached twin should run with no controlling tty at all. This had the nasty side effect of killing twin when closing the ! * Added configure option to disable blink / high intensity background on textmode terminals. This should fix headaches of people too lazy to use SVGATextMode that keep looking at blinking focused window ;) * Finished Window List. It pops up by middle-click on the desktop, and it also gets automatically updated when you open/close/reorder windows :) * Added Menu -> Window -> Scroll for keyboard-based window scrolling. * `twattach -v ' now reports any error message generated during the attach attempt (`-v' stands for `verbose'). Unluckily, this change makes version 0.2.6 of twin and twattach incompatible with older versions. Always use twin and twattach of the same version and you will be fine. * Added Menu -> ð -> Option window to change runtime options: shadows displacement, cursor visibility, tty blink/high background, auto-hide menu, custom font (the latter requires running on a Linux console and loading the VGA font file fonts/vgafont.raw) Side effect: When the Menu is auto-hidden, Menu -> Window -> gives a real fullscreen window. From 0.2.4 to 0.2.5: (Massimiliano Ghilardi, 27 Mar 2000) * Made display size persistant (if HW allows twin to choose size). * Fixed `twattach -hw=tty' to correctly react to window size change, and fixed `Twin, native' display method for the same problem. * Cleaned up copyright: libTw is now LGPLed. * Added KeyCode support on X11 and Linux console drivers: keyboard event also report a meaningful TW_* code for direct keyboard recognition. This allows keyboard shortcuts for menu/window/screen actions like resizing a window or transversing a menu. Infact next change is... * Rebuilt hotkey support for menu/window/screen actions. * Started adding Window List and Menu `Common Items'. * Modularized HW display drivers. If you compiled some HW support as module, twin will NOT autoprobe for it and you will need to use `twin -hw=' to load and use a modularized HW driver. From 0.2.3 to 0.2.4: (Massimiliano Ghilardi, 20 Mar 2000) * Fixed a SEGFAULT at startup when compiled without "Use custom malloc/free routines (EXPERIMENTAL)". * Fixed build problems when compiling without X11 support. From 0.2.2 to 0.2.3: (Massimiliano Ghilardi, 14 Mar 2000) * Fixed a bunch of SEGFAULTs when displaying a screen without windows. * Added a second screen, just to show twin handles it. * Added a default menu when no windows are on screen... so I can omit showing the clock at startup without making twin useless :) * Added libTw support: twin can now directly connect to another twin, open a window there and display on it. * Twin can now runtime attach/detach to any supported display; look README, section "8) Attach/Detach" for details. * Added twin_wrapper to have twin append its TWDISPLAY on command line. From 0.2.1 to 0.2.2: (Massimiliano Ghilardi, 06 Mar 2000) * Fixed a SEGFAULT when switching to X11 display method after a Suspend. * Added gzip (compressed) socket support. From 0.2 to 0.2.1: (Massimiliano Ghilardi, 22 Feb 2000) * Optimized main loop by reordering MsgPort checks; Result: removed two extra loops across the whole main loop for each external event (keyboard,mouse,clients) received. * Tweaked socket protocol to decrease bandwidth usage.