Git init
[framework/uifw/xorg/lib/libxaw.git] / old-doc / Changelog
1 Patch 1 (#1655) 15 April 1998
2
3   Description of the actions system:
4 --------------------------------------------------------------------
5   All the actions have the syntax:
6
7 action-name(boolean-expression, args)
8
9   Where:
10 action-name:
11         Any string with a translation binding in the binary for the widget.
12
13 boolean-expression:
14         [{~}]variable-name|resource-name|constant-name[{&|^}[[{~}]variable-name|resource-name|constant-name]]...
15
16 variable-name:
17         Any string starting with a '$' character (actually it's not possible
18         to mask this character; I'll fix it). Variables are actually created
19         with the translations 'declare' and 'get-values'. Example:
20         get-values(1, $x, x)
21         declare(1, $armed, true)
22
23 resource-name:
24         Any resource name of the widget. Note that it requires a <TYPE> to
25         string converter in the code (I added some on the patches), since
26         all variables values are stored in a 'String' format. Example:
27         borderWidth
28         height
29         font
30         background
31
32 constant-name:
33         Especial values. They aren't normally contants, but a special state
34         not triggered with resources or variables (They have the highest
35         precedence, so, to allow these strings as resource names I'll need
36         to allow some sort of escape sequences). Examples:
37         mine    # event->xany.window == XtWindow(widget)
38         faked   # event->xany.send_event != 0
39         true    # you know
40         false   # "   "
41
42 args:
43         Special strings values interpreted by the translation binding.
44
45 The operators (currently) understood are:
46         ~ - NOT
47         & - AND
48         | - OR
49         ^ - XOR
50         ( - RP
51         ) - LP
52         The final result value is and'ed with 1.
53
54 Sample translation to make a label widget behave like a button:
55 <Map>:\
56         get-values(1, $fg, foreground, $bg, background)\n\
57 <Btn1Down>:\
58         set-values(1, foreground, yellow, background, gray30)\n\
59 <Btn1Up>:\
60         set-values(1, foreground, $fg, background, $bg)\n
61
62
63   Description of the displayList system:
64 --------------------------------------------------------------------
65   The display list has the syntax:
66
67 [class-name:]function-name      args[{;|\n}]...
68
69   Where:
70 class-name:
71         Any registered set of functions. The code registers the class 'xlib',
72         and if the class name is not specified, this class is assumed.
73
74 function-name:
75         A string binding to the correct function to be called.
76
77 args:
78         A set of converted and shareable arguments, to the function. The
79         positioning/sizing arguments currently implemented have the syntax:
80 {+-}<integer> or <integer>/<integer>. Examples:
81         +0,+0  top, left
82         -0,-0  bottom, right
83         -+10,-+10  bottom+10, right+10
84         +0,1/2    left, vcenter
85
86   All displayLists are shared by:
87         widget->core.screen
88         widget->core.colormap
89         widget->core.depth
90   I have added only partial code for handling non-windowed widgets (gadgets).
91 I'll fix it.
92
93   Example for drawing two lines crossing the widget:
94 foreground      black;\
95 line            +0,+0,-0,-0;\
96 line            +0,-0,-0,+0
97
98
99
100 Patch 2 (#1660) 19 April 1998
101
102   + More functions for displayList's
103   + Fixes for simpleMenuWidget, xfontsel should work very better now. Try
104     this with the newer patches to verify the changes:
105     xfontsel -xrm '*XFontSel*SimpleMenu*font:
106 -*-helvetica-medium-r-*-*-16-*-*-*-*-*-*-1'
107   + Small bug fix to boxWidget, viewres should work better now. Try this
108     to verify the changes:
109     viewres -xrm '*Viewres*Box.borderWidth: 1'
110   + Small bug fix to panedWidget, when pressing in a gripWidget but not
111     moving the pointer, or releasing at the same coordinates.
112
113 Patch 3 (#1673) 25 April 1998
114
115  + Changes in layout code for the Form widget. To see the changes, run xcalc
116    and resize it several times (try giving it a very small size and the
117    restore the size). The new code uses a 'known' reference size/position
118    to avoid integer rounding problems.
119  + A optimization for the Form widget. Now it unmaps itself before resizing
120    the child widgets. This way the layout process is very faster.
121  + The List widget will try to fit in a 32767x32767 window size. It checks
122    if the width or height will become bigger than 32767 and if will, changes
123    the number of columns. This fixes xman (at least for me, that have several
124    entries in the section 3 of the manpages).
125  + New functions to displayList's and fixes to some bad bugs (I'm yet working
126    on that file).
127  + Change in the Scrollbar functionality. It was redrawing the thumb when
128    triggering the MoveThumb action. This is bad because several programs
129    choose to recalculate the thumb position with XawScrollbarSetThumb, causing
130    screen flickering. Now it redraws the thumb when triggering the NotifyThumb
131    action. To verify the changes, run xfm or xman and try to scroll past the
132    end of a window; it will keep erasing and redrawing the thumb.
133  + Other change in the Scrollbar is that it will only draw in the rectangle:
134    1, 1, core.width - 1, core.height - 1. It is better when creatting a 3d
135    effect with displayList's.
136
137
138 Patch 4 (#1678) 3 May 1998
139
140 Included the patches for the recent problems with libXaw.
141 Several 'gratuitous' small changes, to compile cleanly with gcc -Wall.
142 Some bug fixes for DisplayList.c.
143 Colored pixmaps support. I'm building a abstraction layer for the colored
144   pixmaps, so that it should be easy to support more pixmap formats
145   (actually, only X bitmaps).
146
147
148 Patch 5 (#1686) 11 May 1998
149
150  + Patch to libXmu, so that the StringToCursor converter will understand the
151    string 'None', that means not to use a cursor. This is useful when
152    overriding resource settings, and the user wants to use the parent window
153    cursor, or the root window cursor. Any unrecognized name will generate
154    a 'None' cursor, but then with a warning message.
155  + SimpleWidget was modified to allow setting the cursor to none, when it
156    was a valid cursor.
157  + Modification in the Actions.c,
158    from:
159         typedef struct _XawActionVar {
160           XrmQuark qname;
161           String value;
162         } XawActionVar;
163    to:
164         typedef struct _XawActionVar {
165           XrmQuark qname;
166           XrmQuark qvalue;
167         } XawActionVar;
168    This does not cause any problems, since the exported interface remains
169    the same. This is required to avoid to much copies of the same string.
170  + Values of action variables can start with '$'.
171  + If a resource name clashes with a special constant name when evaluating
172    a boolean expression (in the translations code), it's enough
173    start the resource name with '\\' (it can always be used, but is
174    only useful if there is a name clash :).
175  + The only code that loads data files actually is the pixmap code. To avoid
176    security problems, the code only loads files that are group readable,
177    regular file, non suid and non sgid.
178  + If the code to load a pixmap does not find a match, and the pixmap name
179    has a extension, try without the extension.
180  + Function 'line-with' added to displayList code.
181  + Added DisplayListToString and PixmapToString converters.
182  + Bug fixes in the pixmap name interpretation.
183
184
185 Patch 6 (#1701) 24 May 1998
186
187   Xaw
188  ------
189  + Allows setting the resources label_x and label_y inherited from labelWidget.
190    This is useful for moving the contents of a button when it is pressed
191    ( I included a simple test for it )
192  + Added OS/2 patchs
193  + The buffer overflow problems were resolved in a different way. I added
194    a function XmuSnprintf, that is used by Xaw and Xmu.
195  + Correction of a problem in SimpleMenu, when it tries to optimize the
196    space used by the menu.
197
198   Xmu
199  -----
200  + Function XmuNCopyISOLatin1Lowered, defined in <X11/Xmu/CharSet.h>
201  + Function XmuSnprintf, defined in <X11/Xmu/SysUtil.h>
202  + All ocurrences of sprintf were replaced by XmuSnprintf and all ocurrences
203    of XmuCopyISOLatin1Lowered were replaced by XmuNCopyISOLation1Lowered.
204
205
206 Patch 7 (#1738) 21 June 1998
207
208   + Corrected problem with the Command widget, when it was made insensitive
209     without calling the 'reset' action.
210   + Rework of the SimpleMenu code for optimizing the space used. Now it
211     really works as intended.
212   + Fixed portability problems with my previous patches.
213   + Corrected problem pointed by 'grano@cs.Helsinki.FI'. He have followed up
214     a bug report to the devel mailing list. While the problem exist, his
215     patch was not complete, so I did a rework of the AsciiSrc.c:Scan() and
216     MultiSrc.c:Scan() functions.
217   + I added clipping code to the {Ascii,Multi}Sink widgets, to allow use of
218     displayList's as decoration. The best solution I found to avoid too much
219     server requests, and keep full binary compatability was to use the resize
220     method of these widgets, to tell them to the parent widget have changed
221     it's size.
222   + Now the TextWidget has a xterm/emacs like cursor. And it is possible to
223     especify a cursor color.
224   + Fixed several problems caused by code assuming a line of text will be
225     shown as one line in the TextWidget. This is not always true when
226     it uses XawtextWrapLine or XawTextWrapWord, the most common problem was
227     the cursor becomming invisible, after calling the function
228     Text.c:_XawTextShowPosition() that is called to make sure it is visible ;)
229   + Added code that it will not forget the cursor distance from the left of
230     the window while moving the cursor one line up or down.
231   + Ansification of the text code (not yet complete). Private routines now
232     uses prototypes and wide parameters. External routines were kept
233     as before (but with prototypes not masked by NeedFunctionPrototypes),
234     to avoid binary compatability problems. The bigger problem I found in the
235     ansification was a function with 6 parameters being called with only 5.
236   + Several routines were rewritten, sometimes from scratch.
237   + The cursor navigation of the TextWidget was completely reviewed. It
238     should be very familiar to Emacs users. The most Emacs like behaviour is
239     when the cursor in move one line up or down and becomes invisible; the
240     text will be scrolled so that the line with the cursor will be centered
241     in the screen. Also, when doing page up, the cursor will be positioned
242     in the bottom-left, instead of allways in the top-left.
243
244 Patch 8 (#1752) 27 June 1998
245
246   + There was a problem with the previous patch regarding to portability.
247     The problem was strcasecmp. I was planning to provide the funcionality
248     in libXmu, and forgot when creating the previous patch :(. There is
249     already a strcasecmp equivalent in libXmu, that is
250     Lower.c:XmuCompareISOLatin1(), so I used that function.
251   + The previous patch was working correctly for viewing text, but there were
252     some cases the text window could end not displaying correctly the text.
253     This problem was fixed.
254   + Now, the only real need of scrollbars is when doing long jumps on the
255     text, because the cursor will be always visible since this new patch
256     does horizontal scrolling automatically.
257
258
259 Patch 9 (#1755) 28 June 1998
260
261   + Removed all my RCS idents in the files.
262   + Declared functions as static in the prototype and in the definition
263     (this basically reverts a previous patch, but should help when applying
264      the patches sequentially).
265   + Changed the code in Pixmap.c to use strtok instead of strsep, that is
266     not portable.
267   + Corrected problem with previous patch that would cause trouble when
268     a text widget had more than 32K bytes, and would also cause offset
269     mismatches if a program access private structures (AsciiSinkP.h).
270
271
272 #1776 6 July 1998
273
274 Corrected problem when moving the cursor over a non-printing character,
275   i.e. ^Q ^X
276 Does not allow anymore scrolling of the text width Ctrl+Z if the text has
277   only one line, or only one line of text.
278 Several changes in the TextWidget. I did not gratuitously break binary
279   compatability. Source compatability is only granted to programs that
280   do not access private structures. This is required because there are
281   several changes in the behaviour of the TextWidget, and if a program
282   becomes non compilable, it is because it will not work properly with
283   the changes in the text widget (please read bellow for a explanation)
284 Better cursor navigation when moving line-up or line-down over a tab:
285                 cursor
286                 |
287                 v
288     spaces   | |#| | | |text
289     tab      |         |text
290    Move one line down:
291         before:
292     tab      |#        |text
293         now:
294     tab      |         |#ext
295 There were several problems in the Text.c:_XawTextReplace(), when deleting
296   a character and the cursor (shoud be) moved to the previous line. This
297   problem was corrected.
298 The text code was doing too much redrawing! When typping text, it would
299   redraw all the current line at each character typped, and also redraw the
300   entire window till the bottom. Now it only redraws the minimum necessary
301   (and makes a minimum of requests for the Xserver, when clearing areas),
302   most of these problems were related to Text.c:_XawTextReplace() (rewritten
303   from scratch), Text.c:_BuildLineTable() (mostly rewritten) and
304   Text.c:DisplayText() (mostly rewritten).
305 Now, when selecting text, with: button1-down, button1-move, the window will
306   be scrolled automatically, if the mouse is moved to the top or bottom of
307   the text window, making it easier to extend selections.
308 Added a set-keyboard-focus translation to the text code, and in the
309   default translation, it is called when pressing the left mouse button over
310   a text widget (so that the mouse does not need to be over the text window
311   when typping)
312
313 These are the changes to Xaw that made it not fully source compatable (I'm
314 open to comments, to make it source compatable, but as I said above, if
315 a program does not compile anymore, it is because it is not granted it will
316 work properly):
317 scrollMode set to WhenNeeded is not supported anymore. I spent several
318   hours fighting side-effects caused when a scrollbar is created or destroyed
319   'on demand', and have (after tired of long debug sessions) choosed that
320   it is not required (it saves a lot of potencial unespected conditions
321   being found by a user). I changed the 'type' of the scroll mode to Boolean,
322   so, to have a scrollbar, is enough to say: *Text.scrollVertical: True.
323   Since the type now is Boolean, Xt will print warning messages when the
324   scroll is set to 'Always', 'Never' or 'WhenNeeded'
325 automatic resize is nonsense since the text does automatic horizontal
326   scrolling. IMHO, to be useful, automatic resize should also shrink the
327   text window when needed, anyway, it's not required anymore
328
329 Comments:
330 auto-fill mode does not work properly (never did)
331 wrap-mode set to line may not work properly
332 wrap-mode set to word does not work properly always (never did)
333 the multiply should be setable to a variable value; the default value
334   is 4, i.e. Ctrl+U <text+action>
335 I will work on the itens listed above, and I'm also planning:
336 one level undo, for text actions
337 C style indentation and 'jumping' the cursor to show matching '(', '['
338   and '{'
339 other things that I don't remember now :)
340
341
342 -- XMU --
343 Moved the code clipping code I have put in Text.c in my previous patch to
344   Xmu/Clip.c. There was a bug in the code I have put in Text.c (this is what
345   I get by cutting and pasting code under a #if 0 :(), but it was corrected.
346   The code in the new file 'Clip.c' is very useful for creating clipiing lists
347   and thus, avoiding too much server requests, or code for the same
348   functionality (poorly) repeteated in several places around the libary. This
349   code is now heavily used by the TextWidget.
350
351
352 -- XEDIT -- 
353 Removed a XDefineCursor in xedit.c:main(). There are several ways to specify
354   a cursor for a program (most times inherited from the wm decoration window),
355   so, it is better to let the user choose one.
356 Before starting the main loop, now xedit sets the keyboard focus to the
357   text window if a file was loaded, or to the prompt for a file name if
358   none was especified in the command line (do not use the new xedit without
359   the new Xaw library, or you will not be able to change the keyboard focus).
360 Updated the Scrollbar configurations in Xedit.ad
361   
362
363 #1788 12 July 1998
364
365 -- TextWidget --
366  + Corrected problem whem moving the cursor over a non-printing character
367  + Now, does not allow scroll with ^Z when there is only one line of text
368  + Automatic resize was removed, it is not required with automatic horizontal
369    scroll, but I will look for programs that rely on it; the only program
370    affected (that I know) is xmh, because it popups dialogs of a small size,
371    and expects that the text widget (with a warning message) do a geometry  
372    request.
373  + Scroll mode set to "WhenNeeded" was removed. It generates several unespected
374    conditions when editing text, and the new feature of automatic scrolling
375    the text widget while typping is more useful.
376  + Removed a leak in TextAction.c:AutoFill(), generated by the code
377         text.ptr =  (char *)XtMalloc(sizeof(wchar_t) * 2);
378    that memory was never released, but the fix was simple, since the amount
379    of memory requested is fixed.
380  + Several optimizations in the redisplay of the text.
381  + Now, wrap mode set to word or line is expected to work, while typping text.
382  + AutoFill will only break lines in word boundaries now.
383  + Added a set-keyboard-focus action to TextAction.c, so that when pressing
384    the left button over a text widget, it will receive the keyboard focus.
385    This behaviour is the default, but can be disabled, with something like:
386         *Text.translations: #override\n<Btn1Down>: select-start()\n
387    in your .Xdefaults.
388  + Corrected several cases that would left the text widget showing incorrect
389    data. All the problems should have been fixed, but in case you find one,
390    a quick fix is:
391         *Text.backgroundPixmap: black?foreground=<some-color>
392    because it does not try to optimize the redrawing when using a background
393    pixmap, and thus, avoid several possible problems.
394
395
396 -- XAW --
397  + I had added a XawStackAlloc definition to "Private.h", to avoid a XtMalloc
398    request for every character typped in TextAction.c:InsertChar(), but
399    when syncing with 3.9Aj, saw that the file "XawAlloc.h" is no longer
400    required. Please, remove XawAlloc.h from 3.9Aj.
401
402
403 -- XMU --
404  + Added the file Clip.c, with clipping code, that, now is being used by
405    the text widget, but can be used by other widgets.
406
407 -- xedit --
408  + Removed a XDefineCursor from xedit.c:main()
409  + I have added a XtSetKeyboardFocus in xedit.c:main(), but comented it
410    because it would make xedit unusable with previous versions of Xaw,
411    or with the Xaw replacements (Xaw3d, Xaw95 ...)
412
413 Comments:
414   I wrote a lot of code to work properly with italic fonts in the text widget,
415 that code made the cursor do not erase portions of the text while moving the
416 it, but it was failing at some places that would need that the TextWidget,
417 and not only the {Ascii,Multi}SinkObject had access to the fonts, so I
418 choosed to left it to the future (and keep the sources simple, by now).
419 The text widget is useable with italic fonts, but fonts with:
420         f->per_char[<char> - f->min_char_or_byte2].rbearing
421           > f->per_char[<char> - f->min_char_or_byte2].width
422 or
423         f->per_char[<char> - f->min_char_or_byte2].lbearing < 0
424 will not allways be displayed correctly.
425
426   I haved also added a xedit configuration file to this mail.
427
428
429 #1842 27 July 1998
430
431 Fixed problem with the default macro for type conversion, where it was
432   possible to the code tell the wrong size of a string, since it was
433   returning the string size with 'strlen' but making the copy with strcpy.
434 Complete ansification of Xaw (and Xmu).
435 Corrected some problems caused due to an alteration in the text code, to 
436   make the cursor always visible when the wrap mode is 'line' or 'word'.
437 Text.c:VJump() was made a bit smarter and a problem that would cause it
438   to jump incorrectly was also corrected so that now the jumping should be
439   very smooth.
440 Corrected problem that would cause a coredump due to the
441   Text.c:_XawTextReplace() deferencing a NULL pointer. Now ctx->text.lt.info
442   is initialized when the text widget is created, solving this problem.
443 All the variables with name 'new' and 'class' where renamed to 'cnew' and
444   'cclass'. This allows even building Xaw with 'gcc -x c++'.
445 Variables shadowing other variables or functions where also renamed.
446 Static functions were changed to use wide parameters, where applicable.
447 (Almost) every time a StringTo<Type> converter is installed in the class
448   initialization of a widget, the code also installs a <Type>ToString converter
449   since now editres seens to work better.
450 Complete reestilization of the indentation. See the files Template*.{c,h}.
451 Corrected problem with the 'virtual' function Layout of the Form widget. That
452   function requires 4 parameters, but the Viewport widget (a Form subclass) was
453   calling that function with only 3 parameters; the ansification flagred that
454   error.
455 TextTr.c was modified to have only one string. I believe that that weird
456   thing was due to the inheritance of compatability with some very old and
457   probably buggy ld.
458 Xaw is expected to be binary compatable with R6.3; there are some
459   preprocessor macros that keeps binary compatability, and unless the gains
460   of breaking binary compatability show worth enough (and people think) it
461   is good that code would be made default, otherwise it will be forgotten.
462 I have also added a XFree86 copyright notice to Text.c, since there is
463   a very large amount of work in that file (and it is not yet ready).
464 ---------------------
465
466 -------- Xmu --------
467 Complete ansification of Xmu.
468 Rework of EditresCom.c to allow editres working correctly. It was also
469   added a new feature, that allows editres finding some extra child widgets,
470   i.e. widgets that aren't a child of a subclass of composite and aren't in
471   the popup list. This modification is not enough, since it does not find
472   child widgets that don't a XtRWidget resource in the parent widget.
473 Rework of ShapeWidg.c, so that it will give the correct feeling to the
474   ellipse shape, and inversion of the oval, if shape is oval and
475   height > width. To see these changes, run a program with:
476   <prog> -xrm '*shapeStyle: ellipse'
477   and/or
478   <prog> -xrm '*shapeStyle: oval'
479 Revision of DrRndRect.c to make the widget looks 'more correct' when using:
480   <prog> -xrm '*shapeStyle: roundedRectangle'
481 ---------------------
482
483 ------ editres ------
484 Added small patch to bug in handler.c so that editres will correctly now.
485 ---------------------
486
487 ------- xedit -------
488 Changed the resources file, to avoid a problem when resizing xedit to a
489   very small size and than restoring it's size. Probably the culprit is the
490   Paned widget, but the new resource file is at least a good workaround for
491   the problem.
492 The resource file was also modified so that the default xedit size will
493   give a 80x25 rows/columns when using the default font.
494 ---------------------
495
496 -------- xgc --------
497 Small patch to clear correctly the status text window, when pressing the
498   'Clear window' button. Note that this patch showed a bug in
499   Xaw/{Ascii,Multi}Src.c; only apply this patch with the latest Xaw, or
500   be sure that Xaw/{Ascii,Multi}Src.c:*SetValues() has something like:
501   if (old_src->ascii_src.ascii_length != src->ascii_src.ascii_length)
502       src->ascii_src.piece_size = src->ascii_src.ascii_length + 1;
503   instead of:
504   if (old_src->ascii_src.ascii_length != src->ascii_src.ascii_length)
505       src->ascii_src.piece_size = src->ascii_src.ascii_length;
506   or it will enter a infinite XtMalloc(0) loop :(
507 also fixed a possible buffer overflow while searching the source of the
508   bug described above.
509 ---------------------
510
511 #1945, 31 Aug 1998
512
513 -- XAW -- 
514  + Corrected bug in Viewport.c:ComputeLayout(), that would put the scrollbar
515    in the incorrect position, if w->viewport.useright == True
516  + Corrected bug in Converters.c:_XawCvtCARD32ToString(), so that now it
517    will correctly format the converted value.
518  + Corrected problem in {Ascii,Multi}Src.c:Search(), that would cause a
519    incorrect offset to be returned, if the searched text (or a substring of
520    it) were in a 'Piece' boundary.
521  + Some small patches to other sections of the code, to reduce the number
522    of warnings generated by gcc, when using more restrictive warning options.
523
524 -- XMU --
525  + Corrected a problem in Atoms.c:GetAtomName(), to return a NULL pointer,
526    instead of a const if the given atom is 0.
527  + Corrected a typo in Xmu.h
528  + Several 'ansification' patches, to get function definitions and avoid
529    unecessary definitions.
530
531
532 #2028, 2033, 7 Oct 1998
533
534 -- Xaw -- 
535 Added a delete translation to the text widget, that deletes the current
536   selection if any, else the backwards char.
537 Corrected bug that would not update correctly the screen if page-up or
538   page-down was pressed while there was an selection.
539 Added a ^Q<any-char> translation to the text widget, to be able to insert
540   any char in the text.
541 Changed TextAction.c:Move() to set ctx->text.showposition, so that even
542   if the cursor did not change the position, it will become visible.
543 Corrected problem with the 'form-paragraph' translation, so that the
544   text will be always correclty shown.
545 Modified the automatic scrolling of the text to one line at a time, to
546   make it easier to see what is being selected.
547 Added a 'hack' to be able to type ^U<any-numeric-sequence> to be able
548   set the multiply of the text widget. Since it is a hack (besides seens
549   to work very well) it can be disabled with -DNO_NUMERIC_HACK
550 Corrected a nasty bug in Text.c:CvtStringToScrollMode(); XtConvertAndStore
551   can't be called from a type converter!
552 added UNDO/REDO to the text widget. Please try it, I think it is very nice.
553   Undo is enabled by the new resource 'enableUndo', and, by default is  
554   triggered with 'Ctrl+_'.
555
556 -- editres --
557 Resubmitting a patch to editres/handler.c, to make editres work properly.
558
559 -- xedit -- 
560 NOTE that with this patch, xedit probably will not work with Xaw3d, neXtaw...
561   this surelly can be fixed, or in the xedit side or the *Xaw* side, but
562   the patch seens to be necessary.
563 Changed the defaults file to be more user friendly and previsible.
564   Added some 'Emacs like' binding translations.
565 Added file completion in the filename prompt. This is a very nice
566   feature, but I'm not sure if the code is portable to all the XFree86  
567   supported platforms (surely it will not work 'as is' with OS/2).
568
569
570 #2083 18 Oct 1998
571
572 -- XAW --
573 Changed the functions {Ascii,Multi}Sink.c:CharWidth and PaintText, to
574   improve speed, and avoid too much recalculations. On normal files, it
575   becames about 5:1 faster, but can go up to 20:1 when editting files with
576   very large lines. Besides this speed improvement, I believe it can
577   surely be made faster (based on comparition with some popular X editors).
578 Changed the way the AsciiSink prints characters with value bigger than
579   126 decimal. Now it prints DEL as ^?, and the other characters as \XXX
580   where 'X' is an octal digit. The MultiSink widget was unchanged in this  
581   respect, i.e. when calling xedit with something like:
582   xedit -xrm '*international: true'
583 Converted all calls to strncpy, in AsciiSrc.c to memcpy, so that the (ascii)
584   text widget will work properly with data containing nulls.
585 Added a experimental 'Xaw Scan Type' XawstAlphaNumeric, that shoud make
586   edition of C (or any other language) easier in xedit (i.e. the text widget).
587   It can be tested with Ctrl-Left and Ctrl-Right, by now.
588 Changed the TextWidget to handle text lines that would result in more than
589   32767 pixels. Besides the text widget is not meant to be used in the
590   edition of binary files, this change allows it.
591 Changed Text.c:TextScroll() to be smarter when calculating the offset of
592   the line table on scroll up.
593 Added a nice feature, to show the matching '(', '[' or '{', when a ')',
594   ']' or '}' is typped.
595 Changed TextAction.c:FormParagraph() to generate only one undo/redo step.
596   
597 -- xedit --
598 Changed the defaults file to enable backups and made the backup suffix
599   the character '~'.
600 Replaced all instances of sprintf by XmuSnprintf.
601 Changed xedit to set the label when saving a file also, to reflect what
602   is being edited correctly.
603 Corrected a bug in the new action 'file-completion', to replace correctly  
604   the home directory, and keep correctly whatever was after the '~'. This
605   isn't the correct place to this code (xedit/commands.c), since there are
606   several other file name prompt windows in Xaw, but since it is required
607   another window to show the possible matches, I'll study a better way to
608   implement it.
609 Added a 'hints' feature to xedit. Instead of a 'dead'
610   "Use Control-S and Control-R to Search." label, now it allows the label
611   string being changed at user settable intervals.
612
613
614 #2205 10 Nov 1998
615
616 -- xaw --
617  + Fixed some 16 bit overflows in AsciiSink.c and some cases where it would draw
618    past the end of the text window (a no-op), the overflows were not a
619    problem, but could left the text window with incorrect data.
620  + Moved the undo/redo code to TextSrc.c, and some code/data from
621    {Ascii,Multi}Src.c to TextSrc.c. The callback now is called when the
622    source is changed, or becames unchanged due to an undo/redo. Also
623    changed the Scan procedure to be a bit faster.
624  + The asciiTextWidget will now accept a source or sink object being set at
625    creation time.
626  + Fixed the 'struct XawDisplayList' being redefined when compiling Xaw under
627    SunOS.
628  + Several changes to the SimpleMenuWidget to make the geometry management
629    work correctly when adding/removing/changing menu entries at run-time.
630  + Added a 'kill-ring' feature to the TextWidget. The behaviour is identical
631    to Emacs. Pressing C-K repeteadely will merge the lines being killed, so
632    that a C-Y latter will paste all the killed lines.
633  + Added the enough glue code (and as backwards compatible as possible) to
634    allow the *src object be shared between several TextWidgets. My initial idea
635    was to make the TextWidget be able to have more than one source, but, to
636    be backwards compatible, I did the reverse (the source can have more than
637    one TextWidget).
638  + Fixed a automatic wrap bug (TextWidget) that could eat non white space
639    characters (my previous patch to this problem was completely wrong).
640
641 -- xedit --
642  + Added a split-window feature to xedit. To keep xedit simple, it only allows
643    two windows at the same time: or subdivides in the vertical or horizontal.
644  + Added more some key-bindings, that should do the same as Emacs.
645
646 #2291 5 Dec 1998
647
648 -- Xaw (only changes to the 'text' code) --
649  + Changed the default 'piece size' from BUFSIZ to the value returned by
650    the getpagesize() function (or keep BUFSIZ if that value is smaller).
651  + Added a case sensitive option to the search popup. This is a 'hack' by
652    now, but should not cause trouble to anybody.
653  + Fixed a bug inserted when changing the code for the search, the only side
654    effect I saw was that the jumping cursor to show the matching '(', '[' or '{'
655    stopped working in my last patch.
656  + Moved back my change to the function XawTextSetSource. The 'correct' function
657    is _XawTextSetSource. This is only to make sure old code should compile
658    cleanly.
659  + Added line and column number calculation code (and a callback to tell when
660    that information changed) to the TextWidget. This was not an easy task,
661    because I tried to optimize as much as possible the code, and do relative
662    calculations, instead of scanning the entire file to count the number of
663    lines (there are several special cases, when removing/inserting text).
664  + Added the selection type XawselectAlphaNumeric. This adds one step in
665    the sequence word-line-all when doing multiclick in the text.
666  + Fixed some bugs in the 'kill ring' feature added in the last patch. Now
667    it is expected to never fail.
668  + Corrected the indentation of TextP.h, and changed more some fields. The
669    internal data of the TextWidget changed a lot, so it is not expected that
670    program code read directly the private data, at the price of requiring the
671    correct library version.
672  + Fixed a small bug in the undo code, that would 'think' the file was unchanged
673    in the incorrect position in the undo buffer.
674  + Changed the default key bindings for delete/kill word functions to use the
675    alpha numeric versions (this is better for coding, and more compatible with
676    other text editors).
677
678 -- xedit --
679  + Changed the labelWindow, to show the current line number (but it is also
680    possible to show the current column number, offset or file size).
681  + Fixed bug when saving the *scratch* buffer with a new name.
682  + The 'changedBitmap' is now correctly displayed on all the windows showing a
683    changed file.
684  + Small changes to the xedit man page.
685
686
687
688 #2371 8 Jan 1999
689
690 --- Xaw ---
691  + More some changes to AsciiSrc.c:Scan(). This improves a bit the speed when
692    scanning text.
693  + Added sanity checking for AsciiSrc.c:Search(), to avoid the risk of
694    deferecing a null pointer (or reading memory out of the text piece) if the
695    searched text happens to be larger than a "piece size".
696  + Fixed bug when trying to optimize line number calculation, due to a typo,
697    while meaning XawTextWrapNever I wrote XawTextWrapLine.
698  + Fixed a problem shown by xclipboard, when setting the "string" resource
699    of the text source, the sink object was keeping the insertPosition in the
700    old text contents, and then, when showing the cursor, it was incorrectly
701    'erasing' the old cursor position.
702  + Fixed problem in XawTextReplace, that would not update correctly all the
703    TextWidget's sharing the same source.
704  + Added a kill ring list to the text code. This works like the emacs feature,
705    but, unlike emacs, it is not required to press C-Y before M-Y, to start
706    looping through the kill ring list. To use it, just press M-Y repeteadly,
707    and all the text that was killed will be inserted, one at a time, so that
708    you can choose one. Note that the text inserted from the kill ring list
709    will also enter in the undo list.
710  + Changed the Move{Backward,Forward}Paragraph actions to make the cursor always
711    stop in a blank line. This makes only one step moving from a paragragh to
712    another, instead of two.
713  + Added code to check for overflows in the C-U<number> sequence.
714  + Changed the FormParagraph action to keep the cursor at the correct position.
715  + Changed the default translations in TextTr.c to get a more emacs like
716    behaviour with the kill ring list.
717
718 --- xedit ---
719  + Added a few more resource settings to the Xedit-sample file.
720  + Added some sanity checkings when trying to save a file. This avoids the
721    case of saving a file with the name of a directory (but moving the directoy
722    to other name before). A possible case is: have a directory named 'dir',
723    saves a file as 'dir', but before saving, renames the directory as 'dir~'.
724  + Allows saving a file that xedit thinks is not changed (the file may have
725    changed on the disk, but the user really wants to rewrite it).
726  + Corrected several bugs in the FileCompletion action, and added a new
727    feature, that is to complete the partial names, when there is a '/' or '.'
728    after the cursor position.
729
730
731 #2479 19 Feb 1999
732
733 -- Xaw --
734  + Fixed bug in the line numbering code, when removing lines before the
735    top position.
736  + Changed code to form regions to always show the cursor after formatting the
737    text.
738
739 -- xedit --
740  + Added code to keep the file mode, after saving. This is useful when editting
741    scripts, so that the executable flag will not be lost after edition.
742
743
744 #2544 12 Mar 1999
745   
746 -- Xaw --
747   Mostly changes to add support to latin-* languages in the text code, when not
748   using the international resource.
749 Actions.c:
750  + Corrected some bugs in the boolean expression parser. The old version would
751    not parse correclty parenthized expressions, and was giving equal precedence
752    to AND, OR and XOR (what is incorrect).
753 AsciiSink.c:
754  + Changed to display characters in the range 0x32-0x7e and 0xa0-0xff literally.
755    The other characters are represented as control-codes, as before. This is
756    better for edition of Latin-* text files.
757 AsciiText.c:
758  + Changed the code, so that even if the *international resource is not set,
759    _XawImRegister and _XawImUnregister are called for the text widget. This is
760    useful for latin-* locales, that use one byte wide characters, and makes Xaw
761    more compatable with modern toolkits, like qt and gtk.
762 List.c:
763  + Added code to work correctly with a background pixmap.
764  + Added a smarter code for list window size calculation, that is used if the
765    number of columns is especified to be zero (automatic).
766 MultiSink.c:
767  + Fixed a core-dump problem caused when passing a null pointer to
768    XwcTextEscapement.
769 Text.c:
770  + Removed the resource adjustScrollbars. This resource was not used, and its
771    funcionality was not finished, and by now, it is not required.
772 TextAction.c:
773  + Does not call XLookpupString in InsertChar any more, but the new function
774    _XawLookupString (in XawIm.c) to work correclty with composed characters.
775 XawIm.c:
776  + Added the private function _XawLookupString, that just calls XmbLookupString,
777    or in case of any initialization error, XLookupString.
778
779 -- xedit --
780   The most important change is the addition of a new functionality, that allows
781   the user to navigate the file system, in a 'ls -a' like list widget, if
782   the file is not a directory it is loaded for edition, else, the list widget
783   is rebuilt with the contents of the selected directory. To test it, just
784   type:  C-X d, or tab when 'finding a file'. To exit the dirwindow without
785   loading a file, type C-G or Escape.
786 Xedit-sample:
787  + Added more some resource entries, to use the new 'emacs dired like' feature.
788 Xedit.ad:
789  + Same as for Xedit-sample, but more important resource settings.
790 commands.c:
791  + The code now checks if the filename is a directory and calls the dirwindow
792    code in that case, when trying to open a file.
793  + Changed the function IsDir from static to global, to use it from xedit.c.
794  + Most of the code for the filesystem navigation window was added to this file.
795 util.c:
796  + Fixed a bug that was causing core dump due to passing garbage to XtGetValues
797    as the widget address.
798  + Added the code for managing the dirwindow and its relationship with the
799    text windows to this file.
800 xedit.c:
801  + Added the code for creation the dirwindow to this file.
802
803
804 #2638 2 Apr 1999
805 -- Xaw --
806  + Added xpm pixmaps support to the library. This time, it is required to
807    compile Xaw with -DUSE_XPM.
808  + If the xpm image has a mask, the widget will be automatically reshaped
809    to the pixmap mask.
810  + Changed the kill_ring code in TextAction.c to always end in a text block
811    of zero length, this way, it is easier to know when one traversed the
812    entire kill ring (it may be interesting to forget the undo sequences
813    while traversing the kill ring list).
814
815 -- xedit --
816  + Changed the Xedit.ad file to avoid overriding a translation that would
817    make the search window do not respond to WM_DELETE_WINODW messages.
818  + Fixed a core dump condition in the new code for listing files and
819    directories, due to deferencing a null pointer.
820
821
822 #2662 10 Apr 1999
823 -- Xaw --
824  + Corrected the problems gererated in my last patch. I was compiling with
825    -DUSE_XPM defined, and did'nt realize that the patch would not compile
826    without it. Just ifdef'ed again the code to avoid warnings or dead code.
827
828 -- xedit --
829  + Added a ispell interface to xedit. Sorry for not documenting enough about it 
830    the man page, but here is a small explanation of the new funcionality:
831     Replace:    Replace's the selected word.
832     All (right side of Replace button): Replaces all occurrences of the selected
833                                         word.
834     Undo:       When this button is sensitive, allow undoing the last replace,
835                 this is useful when doing a incorrect "Replace All" action.
836     Ignore:     Ignore this word, and continues spell checking.
837     All (right side of Ignore button): Ignore any further ocurrences of the
838                                        selected word.
839     Add:        Add's the selected word to the user's private dictionary.
840     Suspend:    Go back to text edition, but does not kill the ispell process,
841                 This is useful if you have a really big dictionary or slow
842                 machine. I believe it is mostly useful to keep in memory
843                 the words selected to be ignored, but that you don't want to
844                 add to your private dictionary.
845     Close:      Kill the ispell process, and go back to text edition.
846                 Automatically saves the user's private dictionary.
847    When pressing the Add button, the word in the "Mispelled word:" field is
848    added to the user private dictionary (normally ~/.ispell_*). When pressing
849    the Replace button, the text in the "Replace with:" field is used.
850    If no word is selected in the "Suggestions:" field, this mean that the
851    selected word was not found in the ispell dictionary.
852
853
854 #2716 24 Apr 1999
855 -- Xaw --
856  + Minor changes to AsciiSrc.c to try to get more speed in the FindPiece
857    function. Xedit may become very slow when editing files bigger than 1M,
858    and I'm studing ways to get more speed in the Scan and FindPiece functions.
859    The FindPosition function in *Sink.c also can consume a lot of cpu time,
860    and may need some rework.
861  + Added submenus support to the SimpleMenuWidget. This is something essencial
862    to a widget toolkit. Just plugged in the code of a menu widget I wrote some
863    time ago. Xedit uses submenus now. To use it, set the resource menuName
864    of a SmeBSBObject to the name of the submenu.
865  + Added code for text justification to the TextWidget. To use the justification,
866    set the resources autoFill, leftColumn and rightColumn. If autoFill is set,
867    and leftColumn is smaller than rightColumn, an alternate code will be
868    used in the form-paragrpah action, normally triggered with M-Q. The values
869    for justification can be left, right, center and full.
870  + Added a overwrite mode to the TextWidget. The default translation is to
871    press the Insert key, that will toggle the overwrite mode.
872  + Made the TextWidget understand negative values for the multiply. This is
873    like the emacs feature, to indent text to the left. To set a negative value
874    to the multiply, just start the numeric sequence with a '-'. Like  C-U -1.
875  + The code for justification added several new functions to TextAction.c.
876    Functions to tabify, untabify, get block boundaries, verify if a line
877    is completely blank, and strip excess of spaces.
878  + Added a indent action to the TextWidget. The default translation, only
879    used by xedit, is C-X Tab, did this way, to make it fully compatable with
880    emacs, but other translations can be used. The multiply value is used to
881    calculate the amount of spaces to move to the left or right.
882  + Corrected a very hard to find (and reproduce) bug in the undo code, that
883    would easily cause core dumps. The problem would happen when starting
884    editing exactly in the moment the redo automatically reverts to undo.
885  + Added translations for toggling the overwriting mode with the Insert key,
886    and to paste the selection with S-Insert.
887
888 -- xedit --
889  + Corrected all the known bugs in the ispell code (including a memory leak).
890    And added a compile time limit of 16 levels of undo, for all the actions,
891    that include Add, Ignore and Replace. 16 levels is more than enough, but
892    more than this can be done with the undo action, but then, only to revert
893    replaced text, to remove added words that the undo code forgot, it is
894    required to edit the personal dictionary file. The code now also understands
895    root/affix combinations, that ispell normally returns when using the
896    -m option. The ispell code should now also work when using the international
897    resource of the edit window.
898  + Added a new file, called options.c, that holds the code for the editMenu,
899    to enabling setting the wrap, autoFill, justify, leftColumn, rightColumn,
900    verticalScroll and horizontalScroll resources of the current edit window.
901
902
903 #2746 1 May 1999
904 -- Xaw --
905  + Reverted most of the #if NeedWidePrototypes definitions, only two
906    functions were kept, to not break some of the new features, but these
907    functions aren't called by any program: XawTextSinkDisplayText and
908    XawTextSinkClearToBackground.
909  + Rewrite of the functions *Sink.c:FindPosition() and FindDistance() to
910    try to get more speed.
911  + Reworked the function Text.c:_BuildLineTable, to correct some strange
912    code, and to avoid unecessary recalculations.
913  + Made negative values of the multiply work for all the actions, not only
914    for negative indentations. This makes the TextWidget behaviour more
915    compatable with emacs.
916  + Optimization of the new code for text justification, to avoid a call to
917    malloc on every char typped, when undo is enabled.
918  + Reorganized the offsets of the fields of the TextWidget, trying to make
919    xxgdb work again with the new Xaw code, but, unfortunately, the SimpleWidget
920    (a subclass of the TextWidget) have growed by 4 bytes (a XawDisplayList*)
921    added at the end of the structure, and xxgdb incorrectly reads the text.sink
922    field. Old xxgdb binaries dont work with the current code.
923  + Removed several XtIsSubclass checks in TextSrc.c. While those checks could
924    be useful for debugging, the functions are called so frequently that it is
925    a big waste of time for running programs.
926
927 -- xedit --
928  + Added/Changed some translations to work correctly when CapsLock and/or NumLock
929    are pressed.
930  + Fixed some bugs in the ispell code. The biggest bug was that it was not
931    correctly saving the Add'ed words in the user dictionary when pressing the
932    Close button.
933
934
935 #2764 8 May 1999
936 -- Xaw --
937  + Create two new private functions, to replace internally the public interfaces.
938    These two functions are XawTextSinkClearToBackground and
939    XawTextSinkDisplayText. These two functions use wide prototypes, and
940    are required to support text lines that are represented by more than
941    32767 pixels. This was done to make sure that the public interfaces remain
942    100% backwards compatible.
943  + Fixed the deferencing of a null pointer when the source object of a text
944    widget is not initialized. I noticed this problem when recompiling xcolorsel.
945  + Added a new type converter to Converters.c, that is Short -> String.
946  + Added a new compile time option, called NO_BIN_COMPAT_HACK. If defined,
947    it will break some programs that access private data. It only works with
948    programs that access private data structures, but don't subclassify any
949    widget. It fixed old binaries of chimera1, the Offix editor and xxgdb.
950    There is no way to fix old binaries of chimera2, xcolorsel and xmh, these
951    programs need to be recompiled. I would like to know of other programs that
952    became broken, to try to fix them with the NO_BIN_COMPAT_HACK option.
953  + Fixed some compile warnings, with shadowed, uninitialized and unused
954    variables.
955  + Fixed a inifite loop problem that could happen when the text widget window
956    was resized to a very small width.
957  + Reverted some of the text widget translations, to avoid conflicts when
958    setting the input focus and programs that do so.
959
960 -- xedit --
961  + Fixed a problem in the file-completion code, that would insert the partial
962    match in the incorrect position, if the cursor was not at the end of the
963    string.
964  + Changed ispell.c to use only one hash for ignored and added words. Also
965    changed the IspellSend function to not call itself recursively, what is
966    a big problem when spell checking big files that are correct or have too
967    few errors.
968
969 -- editres --
970  + Changed Editres.ad in several places, to try to avoid resource setting
971    problems. Most of them were changed to address more directly the resource,
972    and avoid confusion. Also, added some new resource settings to configure
973    the code I added to widgets.c.
974  + Changed widgets.c to make sure the resource setting dialog is allways
975    entirely in the screen, and if it does not fit, scrollbars will be created.
976
977
978 #2793 15 May 1999
979 -- Xaw --
980  + Changed AsciiSrc.c:LoadPieces to load the file incrementally, instead of
981    allocating a big buffer.
982  + Added several new functions to DisplayList.c. Almost all gc and painting
983    related functions were mapped to displayList functions. There are
984    several optimizations that can yet be done to the displayList code, and
985    I'm working on it. That code is clearly not finished yet, but is stable.
986    Also, changed some functions to be more exigent with it's parameters,
987    because it is better to receive a warning message than see the program
988    core dumping. The functions are documented in Xaw.man.
989  + Corrected a problem in the SimpleMenu code, to make the sub menus popup
990    more 'visually' correct, when popping up in the left side.
991  + Added a optimization in Text.c, to avoid unnecessarily recalculating
992    the line and column number when scrolling text. A big speed up should
993    be seen when scrolling large files.
994  + Modified all code that expected TAB_SIZE to be equal to 8, to read the
995    TextSink resources, and work properly with whatever value the program
996    had set to the tab stops.
997  + Fixed a very bad bug in the form-paragraph function. It was very hard
998    to find because I was looking at the wrong places. If the text was
999    allready formatted, or did not need formatting, the code was not
1000    reenabling undo, making the undo/redo behaviour imprevisible.
1001
1002 -- xedit --
1003  + Added Xedit-color.ad file, to show some of the new features of Xaw.
1004    Tried to keep it simple, but since it uses gradients, maybe it should
1005    better be called Xedit-TrueColor. The better way to see the functionality
1006    of this file is (if you don't have it already) add to your .Xdefaults:
1007 #ifdef COLOR
1008 *customization: -color
1009 #endif
1010    and make sure xrdb parses it.
1011  + Changed a bit Xedit.ad, to work properly when Caps Lock is pressed.
1012  + Several changes to ispell.c. It should run very faster now, because
1013    the code keeps information about words already ignored or correct
1014    in the xedit side, instead of asking ispell every time. Added also
1015    a terseMode resource, and made the interface ask for user interaction
1016    allways ispell does not say the word is completely correct; the
1017    terseMode resource makes ispell itself decide what words are correct
1018    or not.
1019
1020 -- editres --
1021  + Small patch to Edit-col.ad, to use a default text cursor color of 'Azure'
1022    in text fields, instead of the default 'black'.
1023
1024
1025 #2811 22 May 1999
1026 -- Xaw --
1027  + Removed the 'NO_NUMERIC_HACK' preprocessor definition, and renamed the
1028    'doing_numeric_hack' field of the text widget to 'numeric'.
1029  + Changed the code to always create the horizontal scrollbar, if requested.
1030  + Small changes to TextPop.c, to automatically scroll horizontally the
1031    text window when the text found in a search/replace action is not visible.
1032  + Added a optimization when editting large files, to rebuild the line table
1033    if the region containing the text being added/replaced overlaps the lt.top
1034    field of the text widget.
1035  + Changed the undo code to also merge text typed when overwrite mode is
1036    active. The new behaviour is not like emacs (that generates a undo step
1037    for every character), but uses less memory, making only one undo/redo step.
1038
1039 -- xedit --
1040  + Added a new file, hook.c that is intended to be used for the addition of
1041    some new features to xedit, like auto indentation of program files. The
1042    first feature added is the 'autoReplace' resource, described in the xedit
1043    man page.
1044  + Corrected a bug in ispell.c, that would make the code alocate lots of
1045    memory unnecessarily, due to an uninitialized variable. Thanks to David
1046    Dawes that found the bug. The bug was not in 3.9Pn, but the solution in
1047    the later release was not completely correct.
1048
1049
1050 #2834 29 May 1999
1051 -- Xaw --
1052  + Added a ChangeSensitive function to Command.c, to avoid it creating an
1053    incorrect insensitive border if the button is set. This is a side effect of
1054    the function XawCommandToggle I added some time ago. The solution for the
1055    problem is not very elegant, since it copies almost verbatim the code from
1056    Simple.c, but it works as expected.
1057  + Moved some calls to _XawTextSetLineAndColumnNumber in Text.c to other places,
1058    to make sure it is safe to change the text when the positionCallback is
1059    called (like what is done by the new xedit file hook.c).
1060  + Another optimization was added to the undo/redo code. Now it also merge
1061    erases, needing yet less memory for undo, and this way, generating less
1062    undo/redo steps.
1063  + Removed the default translation to call the toggle-overwrite action from
1064    TextTr.c. Only the xedit edit windows calls this translation now, instead of
1065    every text widget.
1066
1067 -- xedit --
1068  + Changed the auto replace feature to be a bit more easier to use. The new
1069    behaviour is almost identical, but if the user types some text, and it is
1070    auto replaced, only one undo step is enough to correct it. Example:
1071    1) user types 'nto.'
1072    2) text is auto replaced by 'not.'
1073    3) user call undo action
1074    4) text is converted to 'nto.'
1075    It should be a very infrequent problem, but makes the xedit behaviour
1076    identical to a "well known text editor", from where this feature was borrowed.
1077  + Added a 'Check' button to the ispell interface. This button allows
1078    checking the word in the text field. This feature was borrowed from the spell
1079    checking interface of the Netscape html editor.
1080  + The ispell checking interface now also asks for user interaction if there are
1081    two identical words togheter.
1082  + Added a status bar to the ispell interface, to give feedback to the user
1083    about what is happening.
1084  + Added some new resources, to let easier customization of the ispell status
1085    bar strings. The new resources are documented in xedit.man.
1086
1087 #2849 5 Jun 1999
1088 -- Xaw --
1089  + Add a OLDXAW define, to enable building a binary compatible version with
1090    6.1, and changes to the Imakefile, to try to keep the changes only in Xaw.
1091    I hope it can be removed in the future.
1092  + Add a XawVendor define, with the value "XFree86". If this is not a good
1093    idea, please correct it an let me know.
1094  + Add a XawVersion define. The value for the new xaw is 7000L, and for the
1095    compatible one is 6700L (same comments as for the XawVendor define).
1096  + Bug fixes to the undo/redo code, and code to merge erases generated by
1097    ^H and ^D. Also, if the cursor is moved, it stops merging the text typped
1098    in the undo buffer.
1099  + Bug fixes to the Form widget geometry management code, to work correctly
1100    when child widgets are removed or added at run time.
1101  + Xaw now links with XPM by default, and the config files where changed to
1102    enable newly compiled programs to do so.
1103  + Added 16 pad bytes to every widget, to try to avoid binary compatability
1104    problems in the future.
1105  + Added a displayList resource to the Tree Widget.
1106  + Added the functions XawTextGetSink and XawTextLastPosition, to enable a
1107    public way to get the <TextWidget>->text.sink and <TextWidget>->text.lastPos,
1108    since these are the most commonly private fields the programs access in
1109    the text widget.
1110  + Added the actions 'capitalize-word', 'donwcase-word' and 'upcase-word' to
1111    TextAction.c. The bindings are the same as of Emacs (and the way it works).
1112  + Corrected some problems with negative values of the <TextWidget>->text.mult.
1113
1114 -- xedit --
1115  + Correct possible problem in the file hook.c, when interpreting the auto
1116    replace list, that is, it was not checking the buffer size when finding
1117    the '\' character.
1118  + Updates for the configuration files.
1119  + Added a 'Look' button the the ispell interface, that will by default run
1120    "/usr/bin/bin/egrep -i '^<VALUE OF TEXT FIELD>.*$' /usr/share/dict/words"
1121    and put up to 256 returned words in the ispell list. The behavior is
1122    almost identical to the one in the terminal interface of ispell.
1123  + The ispell interface works correctly with aspell now.
1124  + Added some resources and a popup to enable changing the dictionaries in
1125    run time.
1126  + Added a toggle button to the ispell interface to allow changing the terse
1127    mode in run-time.
1128  + Added a 'Uncap' button, to allow adding an uncapitalized word to the
1129    private dictionary, and enough code to do the capitalization checks inside
1130    of xedit (to enable undo actions).
1131  + Added a "text mode" and a "html mode". The html mode is not yet completely
1132    finished. It must work correctly with some html specific things like
1133    converting internally "&aacute;" to "á" and so on. I'm planning also, at
1134    least a nroff mode too.
1135  + The wordChars resource is set by dictionary now.
1136    To set the word chars for the br dictionary, write something like:
1137    *ispell*options.dictionaries.br.wordChars: <VALUE>
1138   or
1139    *ispell*br.wordChars: <VALUE>
1140   or simply
1141    *ispell*wordChars: <VALUE>
1142  + The skipLines resource is set only for the text mode now.
1143    To set it, write something like:
1144    *ispell*options.formats.text.skipLines: <VALUE>
1145   or
1146    *ispell*options*text.skipLines: <VALUE>
1147   or simply
1148    *ispell*skipLines: <VALUE>
1149
1150
1151 #2877 12 Jun 1999
1152 -- Xaw --
1153  + Note: The compatible old version of Xaw is not fully compatible. There
1154    a few things that are not equal to the standard old Xaw. These are:
1155         + The cursor code in the *Sink.c files is not identical, and the
1156           field insertCursorOn (type Pixmap) was replaced by the field
1157           cursor_position (type XawTextPosition).
1158         + There are some changes in TextP.h, that include changes to the fields:
1159           options               ->      left_margin
1160           unrealize_callbacks   ->      pad1
1161           updateFrom            ->      update
1162           updateTo              ->      pad2
1163           numranges             ->      pad3
1164           maxranges             ->      from_left
1165           copy_area_offsets     ->      pad4
1166         + The text window does not increase its size when text is typed past
1167           the end of the window, instead of it, it is automatically scrolled
1168           horizontally, but this may not be enough to every usage of this
1169           feature; xmh uses that code to make the text widget auto resize
1170           warning popup widgets. I dont know what is better in this case,
1171           if re-enabling the auto resize code of changing xmh to use label
1172           widgets in the warning popups.
1173    It is very unlikely that exists code that will have problems with these
1174    changes in the fields of the TextWidget and the *SinkObject, but if any
1175    code that has trouble with it exists, I will promptly make the required
1176    changes to correct it (at least for the compatible version of Xaw).
1177  + Several optimizations for the code to redisplay the text window in the
1178    TextWidget. Including fixes for bugs in the XawTextScroll function, and
1179    making it really works. Previous versions of the library have made this
1180    function ineffective, because it was always redrawing everything when
1181    the text window was scrolled. The optimizations should be more noticeable
1182    when running some application that uses the TextWidget (like xedit) on
1183    slow hardware, or over slow connections.
1184  + Corrections for the FormWidget geometry management code, to work correctly
1185    in the old version of Xaw, and some bug fixes for the new Xaw. Also added
1186    8 pad bytes to the FormConstraintsPart structure, to have space for extra
1187    information on possible future optimizations for the FormWidget geometry
1188    management code.
1189  + Some fixes for the OLDXAW define in the SimpleMenuWidget code, that was
1190    not hiding some of the new fields introduced in the new Xaw code.
1191  + Some corrections for the code handling the necessity of having scrollbars
1192    in the text widget, and bug fixes for cases where the scrollbars were not
1193    being updated when the text window contents were changed.
1194  + Re-enabled code to also process GraphicsExpose events in the text code. It
1195    became required due to the optimizations in the text redisplay code.
1196  + Several fixes in TextAction.c, for symbols that were not being included
1197    in the compatible version of the library, and for symbols that were being
1198    included with no need.
1199  + Fixes for the form-paragraph action, in the old Xaw code.
1200
1201 -- xedit --
1202  + Some bug fixes for the ispell undo code, to avoid deferencing a NULL pointer
1203    in the function IspellCheckUndo.
1204  + Added code to handle correctly &<VALUE>; in ispell.c, when using the html
1205    mode.
1206  + Fixed some compile time warnings, and updated the code for setting the
1207    scrollbars in options.c.
1208
1209
1210 #2899 19 Jun 1999
1211 -- Xaw --
1212  + Changed all the 'char pad[<number>]' to 'XtPointer pad[<number>/4]' to
1213    make sure 64 bit machines will not have binary compatibility problems before
1214    the 32 bit ones.
1215  + Added a new static function 'WritePiecesToFile' to AsciiSrc.c, to avoid
1216    allocation of temporary memory. This is useful when editing very large
1217    files (I have some people using xedit on text files that can have up to
1218    80,000 lines).
1219  + Added more some optimizations to AsciiSrc.c:Scan, to try to get the maximum
1220    speed of this function.
1221  + Added a new function to the displayList's, called 'image', that will tile
1222    pixmaps on the widget. It is documented in Xaw.man.
1223  + Several widget classes did not have a 'extension' field. I added it to them.
1224    The first usage of this field that I'm planning is to extend the *Src and
1225    *Sink objects to handle formatted text, and add text properties, like
1226    foreground, background, font and so on.
1227  + Fixed a bug in MultiSrc.c, that was crashing Xaw after the first character
1228    was typed, or if text was removed.
1229  + Some minor changes to SimpleMenu.c, to work properly with very large menus.
1230  + Fixed some bugs that were caused by my previous optimizations of the text
1231    redisplay code.
1232  + Bug fixes and optimizations to TextPop.c, there were some cases that the
1233    function XawTextDisableRediplay was being called, but XawTextEnableRedisplay
1234    was not being called later because of a error condition (the error
1235    conditions were only warnings).
1236 +  Updates to Xaw.man.
1237
1238 -- xedit --
1239  + Fixed a memory leak when freeing list widget strings. The code was not
1240    releasing the memory of the string at offset 0, in the list.
1241  + Changed the way the ispell undo code handles the terse mode, to not need
1242    to make the toggle button insensitive.
1243  + Updated xedit.man.
1244
1245
1246 #2932 26 Jun 1999
1247 -- Xaw --
1248  + Added a new tip resource to the SimpleWidget. This may also be seen as
1249    a test of the binary compatibility issues. Besides of being a new feature,
1250    it cannot cause problems with old binaries, because the code is only
1251    called if the tip resource is set to any SimpleWidget subclass. If the
1252    tip resource is set or reset, the SimpleWidget code will call one of the
1253    two new functions XawTipEnable or XawTipDisable.
1254  + Added 3 new files: Tip.c, Tip.h and TipP.h. These files are used only
1255    by the new Xaw.
1256  + Updates to Xaw.man, including a problem with accented characters on SunOS.
1257
1258 -- xedit --
1259  + Added resource configurations to show the new tip code in Xaw.
1260  + Some fixes to ispell.c, to make it more previsible/user-friendly.
1261  + Fixes xedit.man to avoid problems with accented characters.
1262
1263
1264 #2964 3 Jul 1999
1265 -- Xaw --
1266  + Fix for problem found in the search/replace dialog when using splitted
1267    windows in xedit.
1268  + Added initialization for the display_list field of the Tree widget.
1269
1270 -- xedit --
1271  + Fixed some problems in the undo code of ispell interface.
1272
1273
1274 #2999 10 Jul 1999
1275 -- Xaw --
1276  + Added code to check the return value of XAllocColor and XAllocNamedColor in
1277    Pixmap.c.
1278  + Reverted back some code, and did a carefull review of the code in TextPop.c
1279    to avoid the possibility of calling XawTextDisableRedisplay, and not calling
1280    XawTextEnableRedisplay later (due to errors or end of file reached).
1281  + Added code to TextSrc.c, to use two static variables, that represent a new
1282    line in 8 bits and wchar_t, to avoid allocating memory in the undo buffers
1283    to store only a new line.
1284  + Small change in the behavior of the Tip widget, to not unmap the tip window
1285    when the cursor is moved.
1286
1287 -- Xmu --
1288  + Fixed a bug and a typo in the XmuToupper macro.
1289
1290 -- xedit --
1291  + Small update to the Xedit-sample file.
1292  + Fixed a bug in the ispell code that checks for repeated words.
1293
1294
1295 #3122 14 Aug 1999
1296 -- Xaw --
1297  + Mixed fonts and colors can be used in the text widget (currently only
1298    in the Ascii*Object).
1299  + Added the XawTextAnchor, XawTextEntity, XawTextProperty, XawTextPropertyList,
1300    XawTextPaintStruct, XawTextPaintList and XawTextPropertyInfo structures to
1301    Xaw, to be used in the new text code.
1302  + Added the functions XawTextSourceAddAnchor, XawTextSourceNextAnchor,
1303    XawTextSourcePrevAnchor, XawTextSourceRemoveAnchor and
1304    XawTextSinkConvertPropertyList, that probably should not be used outside of
1305    Xaw.
1306  + Added the functions XawTextSourceFindAnchor, XawTextSourceAnchorAndEntity,
1307    XawTextSourceAddEntity, XawTextSourceClearEntities and XawTextSinkGetProperty
1308    that are probably the ones that should be most used in programs.
1309  + Italic fonts should be always displayed correctly.
1310  + The text widget cursor is now displayed with a gc with the Xor function, to
1311    avoid unnecessary computation/redrawing.
1312  + Most changes were done in the {Ascii,Text}{Src,Sink}Object, but the text
1313    widget was also a bit modified for things like automatically changing the
1314    number of lines in the line table when needed.
1315
1316 -- Xmu --
1317  + Fixed bug in Clip.c, that could cause a SEGV.
1318
1319 -- xedit --
1320  + Added the file c-mode.c, to interface with the new Xaw text code, and show
1321    what can be done when interfacing that new code.
1322  + Added the necessary code to util.c and options.c to let the user select
1323    if he or she wants to use the color/font syntax highlight in the C/C++ mode.
1324
1325
1326 # 26 Aug 1999
1327
1328 --Xaw--
1329  + Added initial support for two new XawTextEntity attributes, that enable
1330    hidden text and replaced text. This initial support was the minimum
1331    required to get the new html mode in xedit working. A lot of code does
1332    math with text positions, and became broken with the addition of these
1333    two attributes. Since only code that knows about these two attributes
1334    should use it, it is only a question to fix the remaining code in
1335    Xaw/xedit.
1336  + Bug fixes to AsciiSink.c:PreparePaint to work correctly with tabs and
1337    the two new entity attributes.
1338  + Disabled the translation "c<Key>q,<Key>Tab" of the search/replace popup.
1339    This action is already done by the translation "<Ctrl>Q,<Key>" that I added
1340    to TextTr.c. Disabling that translation has the advantage that now it
1341    is possible to replace ^Ms by nothing.
1342  + Added some new functions to TextSink.c. The functions XawTextSinkCopyProperty,
1343    XawTextSinkAddProperty and XawTextSinkCombineProperty are candidates to being
1344    public in the future, but, there is a problem when using
1345    XawTextSinkCombineProperty, that requires the AsciiSinkObject having the
1346    correct XawTextPropertyList, what can generate a "chicken and egg" like
1347    problem (I did some hacks in xedit to have the first html-mode version
1348    working).
1349  + Added several new flags to the XawTextProperty attributes, and a new field,
1350    called xlfd_mask.
1351  + Some bug fixes to XawTextSourceReplace and to the code to manage the
1352    XawTextAnchor e XawTextEntity structures. The form-paragraph, called with
1353    M-Q does several consecutive text changes, and was very useful to find bugs.
1354  + The flag XAW_TENTF_REPLACE is a hack for XawTextSourceAddEntity currently.
1355    The function XawTextSourceAddEntity will probably change its parameters
1356    to receive a structure pointer, or a pointer parameter.
1357
1358 --xedit--
1359  + Fixed some bugs in c-mode.c. Again, this patch fixes all the bugs I have
1360    found.
1361  + Added the html-mode.c file to xedit. The html-mode is in its initial steps.
1362    It is not usable yet, but should not core-dump or leak memory (unless you
1363    try to edit the file, then, I cannot say what will happen). The html mode
1364    should be used only to see a rendered version of the file, but, there are
1365    several markups not implemented. To be usable, it must yet understand at
1366    least <ul>, <ol>, <li>, <dl>, <dd>, <hr> and the table tags.
1367
1368
1369
1370 $XFree86: xc/lib/Xaw/Changelog,v 3.31 1999/08/15 13:00:31 dawes Exp $