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