3.6.12 - Sat Mar 29, 2008 I added a build.conf.ubuntu. I updated TkXext.record.c to use volatile sig_atomic_t with the signal handler doExit for safety and correctness. 3.6.11 - Tue Jun 6, 2006 I updated the build.SunOS.conf with an APP_CFLAGS example for the Sun C compiler. I removed TkXext.make.window.exist from the TUTORIAL and demo.tcl. [winfo id] does its job for the cases in the TUTORIAL and the demo. The demo is going to need some more work in the future. I noticed today that the xterm doesn't resize properly. I updated the LICENSE with the year 2006. 3.6.10 - Fri Jun 2, 2006 I have added support for SunOS/Solaris thanks to Nick Matthews. I have changed all build configuration files and tickmakefile, so that LD_RPATH is no longer hardcoded to use -rpath with ld. Apparently that is a GNU convention. 3.6.9 - Tue Apr 11, 2006 I added TkXext.delete.or.kill for sending the WM_DELETE_WINDOW message if the client supports it, or calling XKillClient if it doesn't. I made TkXext use Tk's X error handler. I cleaned up and improved the window find.c code. It now finds windows properly in Whim always. I also tested it in TWM. I improved the embed_firefox.tcl example a great deal. I upgraded the version number in all 3 places. We need a better mechanism for doing this I think. 3.6.8 - Mon Apr 10, 2006 I added "root" string handling to TkXext_StringToWindow. Now all of the TkXext commands understand root. I fixed a minor bug (proactively) that I noticed in init.c. - Tcl_InitStubs (interp, TCL_VERSION, 0); + if (NULL == Tcl_InitStubs (interp, TCL_VERSION, 0)) + return TCL_ERROR; and so on. Tcl_InitStubs turns into a Tk_PkgRequire when -USE_TCL_STUBS is not present during a build. Tk is similar in this regard. I fixed a tickmakefile bug that resulted in TkXext.so always building. The solution was to use concat rather than list. I fixed the pkgIndex.tcl version for the more pedantic 8.5a4 package mechanism. I updated the package revision in the build.conf and build.conf8.5 examples. 3.6.7 - Thu Mar 24, 2006 I added a demo script for embedding Firefox or any window with Google* in its wm title. Steve Landers tested 3.6.6 in Linux, and inspired the demo script. I tested in 8.4 for the first time in a long time. TkXext works fine with 8.4 or 8.5. 3.6.6 - Thu Jan 26 10:35:30 MST 2006 I removed some old files that are no longer used. I fixed a typo in the TkXext.unmap.window's OBJ_CMD creation. I removed -Wl,-rpath that could cause a build failure for some people that don't use the GNU toolchain. The build.conf already has the necessary options to replace this. I made the isxdigit() test in TkXext_StringToWindow use an int, rather than subscripting a char *. This may fix a bug. EXT_VERSION in the default build.conf was updated to 3.6.6. 3.6.5 - Fri Nov 4 14:25:08 MST 2005 I added information in the README about how to load the "record" extension into an X server. A SIGINT handler was added based on some feedback from mmc. Now Ctrl-c should not break an output script. I added error checking for XGetWMNormalHints as part of an audit. I sure have learned a lot over the years... I added error checking for XKeysymToKeycode in TkXext_SendKeyPress, and TkXext_SendKeyRelease. sscanf usage was changed to Tcl_GetLongFromObj (cast to (long *)). We now use a separate variable and assign the "unsigned long" value to the KeySym. This may prevent problems in the future if the sizeof a KeySym changes or isn't the same as in XFree86. 3.6.4 - Wed Nov 2 18:40:05 MST 2005 XTestGrabControl is now used in init.c, so that TkXext playback scripts work properly when they cause a grab indirectly. The following were adding: build.tcl build.conf tickmakefile I removed the old build systems, because they were too painful to maintain, and I think tickmake is better. This fixes a missing -DUSE_TCL_STUBS and -DUSE_TK_STUBS. I removed the #ifdefs for stubs too. 3.6.2 - Thu Jul 21 02:38:24 MDT 2005 I fixed a memory leak in TkXext.record.c. XRecordFreeData is now used to free the event for reuse. I fixed a potential bug in find.c and cleaned up the code a bit. 3.6 - Sun Oct 19 02:15:00 GMT 2003 I have added TkXext.focus code and refactored several files. There is an X error that seems to occur sometimes initially. I suspect a race condition between xterm and TkXext. This doesn't seem to cause any bugs, but it could potentially. 3.5.1-WIP-1 - Thu Oct 2 01:58:48 2003 I fixed some simple memory leaks that occured because I didn't add Tcl_DecrRefCount calls. This should all be fixed now. I updated the README to have the proper information about what is needed and how it works. I added quite a bit to the TUTORIAL, and it now covers 3 topics. I added tickmake-7 and I have started building default.mk 3.5 - Thu Sep 4 14:32:53 MDT 2003 I fixed the configure script to compile and link properly in NetBSD. I created the TUTORIAL, and added to the PLAN. It now builds and runs properly in NetBSD without any problems. 3.4 WIP 6 - ~Fri Jun 13 00:50:21 GMT 2003 TOO MANY CHANGES TO LIST 3.0 - Wed May 7 19:49:04 GMT 2003 Almost the entire project has been rewritten. TODO: make sending work. See if there is a pattern between iso-8859-1 chars and X KeySyms. 2.1.5 - Wed Jan 2 17:21:44 MST 2002 TkXext I replaced the calls to strcmp with strncmp for security reasons. I removed the ifStrMatch macro. I replaced calls to var++ with ++var (I'm still learning). The test.tcl had the same change as erxvt. erxvt The long trick to find the latest wish was changed. 2.1.4 - Mon Oct 15 19:50:19 MDT 2001 TkXext The embed command was improved to fix problems with embedding into the root window. The findWindowViaTitle was improved to use a better method of handling timeouts. sendEvent is now sendString, and the C function calls/name use that name now too. automatedTests.tcl now passes all tests in Panache, because of the changes I made. erxvt (1) If the session was not embedded properly, click the empty window to re-embed it. (2) Changed [info procs embed] to [info commands embed] to avoid loading the extension twice. 2.1.3 - Thu Sep 20 17:11:58 MDT 2001 This release has build changes and now you can run make install. So, you can now use 'package require TkXext' in your scripts instead of using load. The test.tcl and erxvt I decided should continue to use load because I want new users to be able to try it out without installing the package. Perhaps I could test for the package and if it isn't there do load. --prefix is an option in the configure script. I updated the README with info about package require TkXext and the new build option. Thanks to Dave for more erxvt changes. erxvt: Logging out a session (e.g. through Ctrl/D), automatically switches to the button on the right, instead of arbitrarily picking the first one. 2.1.2 - Wed Sep 12 17:04:58 MDT 2001 I've removed DoesWindowExist. I renamed the functions that are called by Tcl commands, so that they now use a lower case beginning letter. I fixed a bug in embed being called with 0 arguments, which was pointed out by EE. I added a timeout to findWindowViaTitle that waits until 10 user seconds have passed while searching for the window until returning None. Various functions were updated to return TCL_ERROR when None is returned from findWindowViaTitle, and I added error messages too. Todo: The SendButtonPress command needs to be extended, so that it supports sending -to .path or -to root. erxvt Changes: title dialog not transient first time; call wm transient *before* tkwait visibility, and remove from Erxvt:Switch. 2.1.1 - Sat Sep 8 03:39:44 MDT 2001 I've saved a few lines of code with a macro named CMD_ARGS. It basically saves me from reading and typing out the standard Obj command arguments. I also did the same in the command creation section of main, with the macro OBJ_CMD. I added an ifStrMatch macro to cleanup some of the code. The end result of all these macro additions is more readable and concise code 675 LOC vs. 700. Erxvt changes for the previous release: - Avoid the 3000K+ memory overhead associated with a wish process, by getting an already running erxvt to spawn a window for us. - Make the 'Set Title' dialog box transient for the current frame, so it doesn't get buried underneath the main window (auto-raising windows). - Fix various problems associated with a session being logged out while changing the title (that is, the modal dialog box cannot prevent you from using the current session -or logging it out- because the rxvt session is a separate application, so it falls outside the grab). - Resource: Erxvt*geometry. Format x in pixels. - Resource: Erxvt*emulator. Format [rxvt|xterm]. - Remove the 'rxvt -geometry' hack. - Remove the 'rxvt -fn ofCourseYouCant' hack. - Keep track of the currently active session for better task management. - Insert formfeeds, for 'paging around'. 2.1 - Sat Sep 1 20:41:36 MDT 2001 George This release made changes to embed (formerly embed2) and erxvt. I've removed embedId and the old embed, and replaced embed2 as embed. Dave sent me a bunch of changes to embed2, and a new erxvt. I've modified his code slightly to fit my style, and added one more error check. A new automatedTest.tcl file has been added by me, and it works well, as long as make debug isn't used to build the library. I'm not sure what changes were made to erxvt but it works well. Please view automatedTest.tcl and tell me if you find anything that may be problematic. I want to enhance it to test other command as well, but that will have to wait until I add more error checking to other commands. Todo: I should probably write a script to automate building with Tcl/Tk 8.0.5 because I have to manually build and test for both 8.0.5 and 8.3.3 Thanks to Dave for this release. Dave Additional error checking (for missing arguments to options, etc.). The malloc-and-copy seems unnecessary; in any case, the data wasn't being freed. Removed Tcl_AppendResult where Tcl_SetResult will do. If the window is reparented out to root, don't store the id in the hash table (although I should probably remove the hash table entry at that point, as well as when the window is destroyed). This assumes of course that there will only be one embedded window in a widget (I haven't tried, but I'd imagine they might start fighting with each other). The empty #define for dout needs the parameters. I've added some comments, nasty habit... 2.0.10 - Fri Aug 31 00:06:33 MDT 2001 George I added hash table handling to embed2. embed2 is now used in test.tcl Dave sent me a great screenshot of Erxvt using TkXext, which will now appear on the TkXext home page. I really like Dave's new stretchWindow command (see below under Dave). It solves a problem I wasn't sure how to go about fixing. I've used the stretchWindow command in test.tcl too. I updated the README. I would like people to test the embed2 command, because eventually I want to replace embed and embedId with it, and then rename it to embed. I'm also thinking about renaming sendEvent to sendString. Maybe while I'm at it I will make sendEvent able to send almost any kind of event. I'm thinking about implementing a new focus command, or possibly an overloaded Tk focus command, that would allow changing the input focus to an embedded window. Lots of thanks to David Wijnants for this release. Dave - New procedure: stretchWindow. Stretches or shrinks an embedded window to fit inside its parent. - sendKeyPress: check hash before anything else, see next. - sendKeyPress: possibly remove all but final syncs. - Erxvt is now resizable. - Erxvt starts up centered on the display, rather than at the default location (i.e. random, probably half off-screen). - Erxvt now seems to work fine on FreeBSD and Red Hat 6.2 (xfwm, mwm and kde on both platforms), except for still occasional reparenting glitches - about 2/50 ? - Missing scrollbar problem under Red Hat seems to have sorted itself out - as a side-effect of resizing. 2.0.9 - Wed Aug 29 22:54:35 MDT 2001 George I added a dout macro to cleanup #ifdef DEBUG for fprintf (stderr, ...) I changed around the code to use Tcl_AppendResult instead of using snprintf with a string and Tcl_SetResult. I'm not sure why rxvt loses the scrollbar at times. I think it's a bug in rxvt. It can be worked around by pressing shift-up or shift-down to scroll the rxvt window. I think that Dave's Erxvt is coming along nicely, see the changes below. Dave Lots of improvements to erxvt : - Better process/window housekeeping. - Cleanup when a session is exited. - Removed 'grimreaper', cleanup zombie when session exits. - Added a 'new' button - for creating new sessions. - Show session title on title bar and sticky-in buttons. - Change session titles by right-clicking the session's button. - Support multiple windows and instances. - Prefix all procedures (should use namespace really). TkXext.c : - FindWindowViaTitle: free QueryTree children. - Embed: cleaned up 'hashptr' local block/variables (cf. EE). - Embed: error if .new_parent doesn't exist (EE). - SendKeyPress: additional error checking. Still to do : - Erxvt: now works fine on FreeBSD 4.2 and Red Hat 7.1, but why does the scrollbar nearly always disappear on Red Hat 6.2 ? - Send window resize messages. 2.0.8 This release features a new command called embed2, which may eventually replace the current embed and embedId commands. It works like this: embed2 -name "My Title" -into .f or embed2 -id 0x123456 -into .f It works well on my system. It has a lot of error checking relative to the other commands. Now I just need people to test it and tell me how well it works. 2.0.7 EE sent me a bug fix for WM_STATE handling, and added debugging messages. I changed configure to output -DDEBUG to the makefile for the debug target. EE also added XAddToSaveSet() for the embedded window. EE cleaned up some of the blocks that I put within the embed functions, because he found them annoying, and they probably decrease the clarity. A few minor changes to the names of things. Added a space2tab.tcl script (not useful to users) I really need to do more error checking in future releases, as EE pointed out. 2.0.6 This release has great bug fixes and improvements from David Wijnants and EE. Dave was kind enough to provide a log of his changes. - *BUGFIX* isupper() returns nonzero for uppercase chars, so I've removed the '== 1' - this caused SendEvent to incorrectly send commands in all lowercase. [GPS This bug was due to my ignorance of isupper.] - Wrinkle: replaced the hard-coded specialCharsSize definition with a more general expression, to make adding elements to the specialChars array if necessary a little easier. [GPS This was a great idea.] - New: added an error handler because I still get random X errors. These seem to be mostly harmless, but the default action (being killed !) is a bit harsh, because it doesn't give me any chance to clean up my invisible rxvts. [GPS I've renamed his error handler to TkXextErrorHandler] - *BUG* FindWindowViaTitle can loop indefinitely when sending events to a window that has been reparented (embedded). I think this is because different window managers reparent windows in different ways, so the one we're trying to find might be two or three levels down the query tree. I experience his problem when using vim in an rxvt session embedded in a Tk widget in xfwm under FreeBSD 4.2, but I've avoided the problem in the new SendKeyPress procedure. The existing SendEvent and SendButtonPress procedures might also be affected. - New: added a SendKeyPress procedure that handles non-alphanumeric keypresses. The keycode is the value given by the %k substitution in Tk, but the shift state has to be handed explicitly (see the bind commands in the erxvt script). bind .f$n "sendKeyPress .f$n Shift %k ; break" bind .f$n "sendKeyPress .f$n Control %k ; break" bind .f$n "sendKeyPress .f$n {} %k ; break" [GPS Dave allowed me to include his erxvt script with the TkXext distribution.] I received some bug fixes from EE. He solved a problem with some window managers. I've modified his code slightly to accomodate my window manager, which doesn't set the state as soon as others. I'm hoping it will still work on his system with an old Enlightenment WM. I was tired when I worked on it, so maybe tomorrow it won't look as good. I increased the version from 2.0.2 to 2.0.6 in the package provide command, which is something I should have been doing in previous releases. 2.0.5 This release should fix the embed twice problem. You can now use string match type of characters for title matching. This way you can do something like embed "Netscape*Google*" .win from: if (titleFound && strcmp (titleFound, titleToFind) == 0) to: if (titleFound && Tcl_StringMatch (titleFound, titleToFind) == 1) from: XReparentWindow (dis, win, newParent, 1, 1); to: /*workaround buggy window managers*/ for (i = 0; i < 3; i++) { XReparentWindow (dis, win, newParent, 1, 1); } added to file test.tcl: #You can also use string match type of characters #embed "Netscape*Teoma*Search" .t.f 2.0.4 LICENSE file added, and license changed to BSD style 2.0.3 changed: if (doesWindowExist (dis, parent, win, 0) == 1) { to: if (doesWindowExist (dis, children[i], win) == 1) performance++. 2.0.2 embedId 0xc00002 . finally works I removed the root window call and variable from doesWindowExist, because it isn't needed anymore. 2.0.1 This release features bug fixes by EE. Changes to doesWindowExist if (win == parent) { return 1; } children[i] == win was changed to doesWindowExist (dis, children[i], win) New command embedId. configure now builds a Makefile with a debug target that provides -ansi -Wall -pedantic and -pedantic-errors.