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
|
obm/marker.c:markerGetVertices() MF001
When called without specifying the number of points the for loop
wouldn't execute and so no points were being returned. Changed to
loop over the ngot value to return all points found by the widget
code. (7/14/98)
obm/marker.c:markerGetVertices() MF002
Change the inner while loop to use *op to avoid infinite loop when
returning points. (7/14/98)
obm/marker.c:markerGetRegion() MF003
Change the inner while loop to use *op to avoid infinite loop
causing getRegion to hang for polygon markers. (7/29/98)
obm/ObmW/Gterm.c:GtRefreshMapping() MF004
obm/ObmW/Gterm.c:refresh_source()
obm/ObmW/Gterm.c:refresh_destination()
obm/ObmW/Gterm.c:GetCachedXImage() +
obm/ObmW/Gterm.c:DestroyCachedXImage() +
obm/ObmW/Gterm.c:NewCachedXImage() +
Merged in image cache code from SAORD for speeding up the magnifier
marker. This doesn't appear to have any major impact on the memory
requirements, but still it can be disabled via a #define CacheXImage
at the top of the file. Corresponds to SAOMOD_CACHE (7/31/98)
obm/ObmW/Gterm.c:GtExtractPixmap() MF005
Added a missing GtermWidget arg to GtDestroyRaster call (7/31/98)
obm/ObmW/Gterm.c:GtExtractPixmap() MF006
obm/ObmW/Gterm.c:GtInsertPixmap()
Added a missing RasterDepth arg to GtCreateRaster call (7/31/98)
obm/ObmW/Gterm.c:GtCopyRaster() MF007
Changed declaration for sv_mp, p_mp from Mapping to 'struct mapping'
so the agree with argument declaration type. Pre- viously routines
were being called with struct mapping ** instead of struct mapping *
(7/31/98)
obm/ObmW/Gterm.c:Destroy() MF008
Changed arg to GtRasterInit from 'gw' to 'w' so types agree.
(7/31/98)
obm/ObmW/Gterm.c:gm_refocus() MF009
Added an event type. This was the SAOMOD_PURIFY change, seemed
harmless.
obm/ObmW/Gterm.c:M_set() MF010
Removed XtArgVal cast of arg 2 for GmSetAttribute to agree with
function declaration.
obm/ObmW/Gterm.c:GtSetMapping() MF011
Not sure I should have changed this, but Eric claims it fixes a bug
although he can't remember the details. SAOMOD_BUG.
obm/ObmW/Gterm.c:Initialize() MF012
Added an initialization for gterm.n_wmWindows. According to Eric
this was done to fix a segvio that was never completely understood.
Even though the procedure doesn't initialize the variable it appears
to be properly set the first time the window gets a focus request so
the problem must be elsewhere, this seemed harmless so it was added
anyway. SAOMOD_MAYBE_FOCUS
obm/ObmW/Gterm.c:GmSetVertices() MF013
Changed the test to be an inequality rather than a greater than.
What would happen is that if a call was made with fewer points than
currently in the struct the gm->npoints value would be wrong. (e.g.
polygon markers are initialized with 4 points in a unit box, creating
a triangle marker causes a getVertices OBM call to return the wrong
number of points).
obm/ObmW/Gterm.c:gm_select() MF014
obm/ObmW/Gterm.c:gm_circ_init() MF015
obm/ObmW/Gterm.c:gm_circ_updatePolygon() MF015
obm/ObmW/Gterm.c:gm_elip_init() MF015
obm/ObmW/Gterm.c:gm_elip_updatePolygon() MF015
Two connected bugs: The symptom was that when changing a marker
back and forth between shapes, e.g. a rect and a circle, the marker
would lose the ability to determine focus when the mouse was moved
into it when going from a rect->circle->rect. The first bug was
that the value of ptop in gm_select() was pointing out of bounds
for the point array. Initially this would be a zero point and the
algorithm would coincidentally trap this and exit as expected, but
when you go from a circle back to a rect the point array still con-
tains the circle vertices so the algorithm was checking an invalid
line segment and finding a second crossing point and thus failing.
When ptop was set to point at the last element correctly the circle
marker suddenly lost focus: this was because the polygon points
computed for a circle is already closed, the updatePolygon and init
routines were defining an extra point to close the poly which wasn't
needed, in gm_select this produced another erroneous crossing
causing the selection to fail. Modified to use only GM_NPTSCIRCLE
points.
obm/widget.c:widgetGet() MF016
obm/widget.c:widgetGetFontName() + MF016
To help with finding portable font settings I added some new code
to return an XLFD font string allowing the user to now do a "get
font" on a widget and return a readable font string.
obm/ObmW/Gterm.c:gm_elip_updatePolygon() MF017
The ellipse vertices were being calculated with too few points
causing a "stray" line segment when drawing a rotated ellipse.
Connected to MF015
obm/ObmW/Gterm.c:GmSetVertices() MF018
When a polygon marker is created the pgon_points array is init-
ialized to a unit box, this array isn't updated with a setVertices
call later so when the marker visibility is turned on the marker
still appears as the unit box.
obm/ObmW/Gterm.c: MF019
Big change involving the rotation of markers: Previously when a
marker was rotated by grabbing a knot the rotation angle would
be the angle of the knot being used. This means that a square
marker with an initial zero rotation would suddenly have a rot-
angle of 45 if the user grabbed and then released the upper-right
corner, but the marker is still drawn at an angle that looks close
to zero. This could be corrected once the button is released but
not without adding another procedure (or by muddling up the markpos
procedure) and requiring it to be called on a BtnUp event. Rot-
ations were also defined in a clockwise direction and angles had
to be specified in radians.
The changes made are that 1) angles are now read/written by
the GUI in (a more natural) degrees, angles are converted inter-
nally for computation. 2) Rotation is now defined such that zero
degrees is to the right, 90 degrees is up. 3) Marker rotation is
done using the model that the user is dragging the zero axis about
the marker (x,y) pos. When the rotation is begun the marker rotates
so that the zero axis is pointing at the knot chosen, thereafter the
is set as before. This means that w/ a square marker selecting the
upper-right knot and releasing would leave the marker drawn at what
looks like the correct 45 degrees.
obm/ObmW/Gterm.h: MF020
obm/ObmW/GtermP.h: MF020
obm/ObmW/Gterm.c:gm_rotate_indicator() + MF020
Added a new 'rotIndicator' marker attribute as an option to draw
a little clock-hand indicator showing the previous and current
rotation angle. Added a gm_rotate_indicator() procedure.
obm/ObmW/HTML.c: MF021
Changed the declaration of the in_anchor_cursor so it's no longer
static. Previously repeated invocations of a GUI would cause the
cursor to not change shapes when entering an anchor because it was
not being initialized properly.
obm/ObmW/Gterm.c:GmSetAttribute() MF022
obm/ObmW/Gterm.c:GmGetAttribute()
Changed the rotangle input to automatically convert from degrees
to radians, which is what's used internally. Previously setting
any angle would be interpreted initially to be in radians and the
resulting display would be wrong. Similarly the output angle was
converted from radians to degrees for readability.
obm/ObmW/HTML.c:HTMLAnchorToId() MF023
Modified so that internal links can be of the form "name=foo" or
"name=#foo".
obm/html.c:htmlIdToPosition() MF024
obm/html.c:htmlAnchorToPosition()
obm/html.c:htmlGetHRefs()
obm/html.c:htmlGetImageSrcs()
obm/html.c:htmlGetLinks()
obm/html.c:htmlSearchText()
The Tcl_SetVar calls had arguments reversed preventing the result
from being returned correctly.
obm/Imakefile MF025
Typo was preventing libobm.a from being updated correctly when not
building form pure source.
obm/ObmW/HTML.c:setScrollbar() MF026
Changed the size of the 'topPosition' arg from Position to int.
Position is typedef'd as short and for very long HTML docs the
position exceeds the 32K short and you get a negative value which
incorrectly positions the scrollbar.
obm/ObmW/Gterm.c:Gm[SG]etVertices() MF027
The set/getVertices and getRegions functions were changed so that
in the case of a polygon the setVertices call will close the polygon
regardless of whether the user has alread done so. To be consitent
the 'get' routines will not return the closing point, i.e. N points
in and N points out.
obm/ObmW/Gterm.c:gm_circ_updatePolygon() MF028
The points array for a circle was being fully populated so when
searching through all points you would come across (0,0) values
while was throwing off the gm_select routine. Also added an abs()
call to the edge detection for safe measure.
obm/ObmW/Gterm.c:Initialize() MF029
Added a XSetGraphicsExposures() call to the exposeGC to disable
expose events. It was noticed in the CTIO guider project that
there was a memory leak in ximtool. The leak was traced to an
XCopyArea call in refresh_destination. This was noticed because
the application is displaying many thousands of images in an anim-
ation sequence. With each refresh an Expose/NoExpose event was being
generated which was building up in the event queue (which was never
read) at a cost of ~100 bytes each. Adding the call disables the
events which are normally on by default.
obm/ObmW/Gterm.c:Initialize() MF030
Commented out the XRecolorCursor calls for the idle and busy cursors.
There was a problem with xgterm blowing itself away when doing many
gflushes in a short time span. This was traced to a buildup of
BadCursor errors that eventually hit the limit in xerror() and the
program died. It's not clear why this is happening but the benefits
of these calls were minimal ....
obm/html.c:htmlSetSelection() MF031
obm/html.c:htmlSearchText()
obm/ObmW/HTML.c:HTMLSearchText()
Minor bug fixes to the HTML text search code. The searchText routine
now will incrementally find the next occurrence of the pattern in the
text and wrap around the page if necessary. The start location
automatically resets if the pattern changes.
obm/ObmW/Gterm.c MF032
Added a return to the blink_cursor() procedure so that when not in
ginmode no new timer would be started. This was necessary to avoid
having multiple timers running which would apparently make the cursor
blink faster and gradually put an increasing load on the process.
obm/ObmP.h MF033
Added definitions for the MenuBar widget which was defined but not
recognized as an object for receiving messages.
obm/ObmP.h MF034
obm/obmres.c
obm/obmres.dat
obm/widget.c
obm/ObmW/Tabs.c +
obm/ObmW/Tabs.h +
obm/ObmW/TabsP.h +
obm/ObmW/Gcs.c +
obm/ObmW/Gcs.h +
obm/ObmW/Imakefile
obm/listres/AllWidgets.c
guidemos/tabs.gui
Added a new Tabs widget which creates index tabs on widgets similar to
what's seen on many PC configuration panels. Basically each child
widget would be something like a Layout/Group or Frame and as each index
tab is selected that child is brought to the top and displayed. Each
child defines a new 'tabLabel' resource string to give the label to be
written to the Tab for that widget. See tabs.gui for an example in the
x11iraf$guidemo directory.
obm/ObmW/Gterm.c MF035
Added an initialize_mapping for the sv_mp struct in various routines.
This was first noticed as a failure in the GtCopyRaster routine which
would fail with a "cannot malloc" error because the sv_mp->datalen and
sv_mp->update elemets contained garbage. Once the struct was saved
GtCopyRaster would subsequently call get_pixel_mapping() which then
did the fatal alloc. It was only in GtCopyRaster that the update flag
was explicitly set where this would be a problem. (2/29/00)
obm/geom.c MF036
Commented out a call to XGetVisualInfo. The results weren't being used
and the pointer returned was never freed causing a small memory leak.
(3/2/00)
obm/server.c MF037
obm/ObmW/icon.c
Added an XtFree() to free the resource list. Another memory leak.
(3/2/00)
obm/ObmW/Label.c MF038
Added an XDestroyRegion to free space allocated in the expose call.
(3/2/00)
xaw3d/Text.c MF039
xaw3d/TextTr.c
Modified the code to make _XawDefaultTextTranslations a static array
rather than one allocated and never freed. Required changes to the
array declaration in TextTr.c, and textClassRec definition and
ClassInitialize() procedure. (3/2/00)
obm/ObmW/Gterm.c MF040
Added an XFree for the visual info struct in get_colormap. (3/2/00)
obm/ObmW/Gterm.c MF041
Added a check for raster=0 when setting the logical resolution. This
is the fix for the cursor positioning bug where the frame buffer is
larger than the screen image. (3/2/00)
obm/Tcl/Imakefile MF042
Removed some warning flags requested for Linux. (3/3/00)
obm/ObmW/Gterm.c
Removed the comment chars for XRecolorCursor first done for MF030.
While these do trigger BadCursor errors these will now be ignored by
the xgterm error handler. (4/7/00)
obm/server.c
Changed a malloc to a calloc call for the timer struct. Also deleted
an XtFree for the callback in serverTimedProc() which would corrupt
memory if the timer callback were later deleted. (7/28/00)
obm/ObmP.h
obm/Obm.c
Added support for a new environent variable OBMOBJECTS which will help
restrict the messages printed during debugging. For example, it can be
set as
setenv OBMOBJECTS "client imagewin"
to have OBMDEBUG print only messages for the 'client' and 'imagewin'
objects. (8/3/00)
obm/widget.c
Added a new 'setTop' command for the Tabs widget that can be used to
raise a particular tab from within the GUI. (8/29/00)
obm/server.c
Commented out an XtFree() on a static array ('table') (03/05/01)
obm/ObmP.h MF043
obm/obmres.c
obm/obmres.dat
obm/widget.c
obm/ObmW/ListTree.c +
obm/ObmW/ListTree.h +
obm/ObmW/ListTree.h +
obm/ObmW/Imakefile
obm/listres/AllWidgets.c
Added a new ListTree widget which creates an indented list of items
in a user defined hierarchy. Selecting an item "opens" it to reveal
lower level lists. The selection callback returns the selected item
label, it's level, and a full path of all parent items. The widget
can used for things like directory browsers, or organizing documentation
into sections, subsections, etc. (8/26/02)
obm/ObmP.h
obm/obmres.c
obm/obmres.dat
obm/widget.c
obm/OBMW/Table.c
obm/OBMW/Table.h
obm/OBMW/color.c
obm/OBMW/TableP.h
obm/OBMW/Table3d.c
obm/OBMW/Table3d.h
obm/OBMW/TableUtil.c
obm/OBMW/TableUtil.h
Added a new Table widget and support code. The Table widget supports a
grid layout of data items with col/row selection and cell editing. It
is a bit primitive so additional code was added to improve functionality.
(09/10/02)
|