0022627: Change OCCT memory management defaults
[occt.git] / src / Xw / Xw_set_event.cxx
CommitLineData
7fd59977 1
2#include <Xw_Extension.h>
3
4 /* ifdef then trace on */
5#ifdef TRACE
6#define TRACE_SET_EVENT
7#endif
8
9/*
10 XW_STATUS Xw_set_event (awindow,eventtype,acallback,auserdata)
11 XW_EXT_WINDOW *awindow
12 EVENTTYPE eventtype must be one of :
13
14 MOUSEBUTTON
15 MOUSEBUTTON1
16 MOUSEBUTTON2
17 MOUSEBUTTON3
18 MOUSEMOVE
19 MOUSEMOVEWITHBUTTON
20 MOUSEMOVEWITHBUTTON1
21 MOUSEMOVEWITHBUTTON2
22 MOUSEMOVEWITHBUTTON3
23 KEYBOARD
24 ENTERWINDOW
25 RESIZEWINDOW
26 MOVEWINDOW
27 ICONIFYWINDOW
28 EXPOSEWINDOW
29 ALLEVENT
30
31 XW_CALLBACK acallback CallBack Routine Address (Can be NULL)
32 XW_USERDATA auserdata Associated UserData Address (Can be NULL)
33
34 Associate an CallBack routine to the window
35 This Routine is call when any Event of type EVENTTYPE is
36 received at Xw_wait_event time
37 NOTE than if callback is NULL ,this remove the corresponding
38 event of type EVENTTYPE .
39
40 Callback programming example :
41 {
42 static XW_CALLBACK any_callback(event,data)
43 XW_EVENT *event ;
44 XW_USERDATA *data ;
45 {
46 printf(" This trap ANY Xw_event of type %d from Ext_window %x\n",
47 event->type,event->any.awindow);
48 }
49
50 Xw_set_event(ext_window,XW_ALLEVENT,any_callback,user_data) ;
51
52 }
53
54 Returns XW_ERROR if Extended Window address is undefined
55 Returns XW_SUCCESS if successful
56
57*/
58
59#ifdef XW_PROTOTYPE
60XW_STATUS Xw_set_event (void *awindow,
61 XW_EVENTTYPE eventtype,
62 XW_CALLBACK acallback,
63 XW_USERDATA *auserdata)
64#else
65XW_STATUS Xw_set_event (awindow,eventtype,acallback,auserdata)
66void *awindow ;
67XW_EVENTTYPE eventtype ;
68XW_CALLBACK acallback ;
69XW_USERDATA *auserdata ;
70#endif /*XW_PROTOTYPE*/
71{
72XW_EXT_WINDOW *pwindow = (XW_EXT_WINDOW*)awindow ;
73int i,function = False ;
74long mask = 0 ;
75
76 if( !Xw_isdefine_window(pwindow) ) {
77 /*ERROR*Bad EXT_WINDOW Address*/
78 Xw_set_error(24,"Xw_set_event",pwindow) ;
79 return (XW_ERROR) ;
80 }
81
82 switch (eventtype) {
83 case XW_MOUSEBUTTON :
84 pwindow->ecbk[XW_MOUSEBUTTON1].function = acallback ;
85 pwindow->ecbk[XW_MOUSEBUTTON1].userdata = auserdata ;
86 pwindow->ecbk[XW_MOUSEBUTTON2].function = acallback ;
87 pwindow->ecbk[XW_MOUSEBUTTON2].userdata = auserdata ;
88 pwindow->ecbk[XW_MOUSEBUTTON3].function = acallback ;
89 pwindow->ecbk[XW_MOUSEBUTTON3].userdata = auserdata ;
90 function = pwindow->icbk[XW_MOUSEBUTTON1].function ||
91 pwindow->icbk[XW_MOUSEBUTTON2].function ||
92 pwindow->icbk[XW_MOUSEBUTTON3].function ||
93 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON1].function ||
94 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON2].function ||
95 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON3].function ||
96 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON1].function ||
97 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON2].function ||
98 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON3].function ;
99 if( !function ) mask = ButtonPressMask | ButtonReleaseMask ;
100 break ;
101 case XW_MOUSEBUTTON1 :
102 pwindow->ecbk[XW_MOUSEBUTTON1].function = acallback ;
103 pwindow->ecbk[XW_MOUSEBUTTON1].userdata = auserdata ;
104 function = pwindow->ecbk[XW_MOUSEBUTTON2].function ||
105 pwindow->ecbk[XW_MOUSEBUTTON3].function ||
106 pwindow->icbk[XW_MOUSEBUTTON2].function ||
107 pwindow->icbk[XW_MOUSEBUTTON3].function ||
108 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON2].function ||
109 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON3].function ||
110 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON2].function ||
111 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON3].function ;
112 if( !function ) mask = ButtonPressMask | ButtonReleaseMask ;
113 break ;
114 case XW_MOUSEBUTTON2 :
115 pwindow->ecbk[XW_MOUSEBUTTON2].function = acallback ;
116 pwindow->ecbk[XW_MOUSEBUTTON2].userdata = auserdata ;
117 function = pwindow->ecbk[XW_MOUSEBUTTON1].function ||
118 pwindow->ecbk[XW_MOUSEBUTTON3].function ||
119 pwindow->icbk[XW_MOUSEBUTTON1].function ||
120 pwindow->icbk[XW_MOUSEBUTTON3].function ||
121 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON1].function ||
122 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON3].function ||
123 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON1].function ||
124 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON3].function ;
125 if( !function ) mask = ButtonPressMask | ButtonReleaseMask ;
126 break ;
127 case XW_MOUSEBUTTON3 :
128 pwindow->ecbk[XW_MOUSEBUTTON3].function = acallback ;
129 pwindow->ecbk[XW_MOUSEBUTTON3].userdata = auserdata ;
130 function = pwindow->ecbk[XW_MOUSEBUTTON1].function ||
131 pwindow->ecbk[XW_MOUSEBUTTON2].function ||
132 pwindow->icbk[XW_MOUSEBUTTON1].function ||
133 pwindow->icbk[XW_MOUSEBUTTON2].function ||
134 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON1].function ||
135 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON2].function ||
136 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON1].function ||
137 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON2].function ;
138 if( !function ) mask = ButtonPressMask | ButtonReleaseMask ;
139 break ;
140 case XW_MOUSEMOVE :
141 pwindow->ecbk[XW_MOUSEMOVE].function = acallback ;
142 pwindow->ecbk[XW_MOUSEMOVE].userdata = auserdata ;
143 function = pwindow->icbk[XW_MOUSEMOVE].function ||
144 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON1].function ||
145 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON2].function ||
146 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON3].function ||
147 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON1].function ||
148 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON2].function ||
149 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON3].function ;
150 if( !function ) mask = PointerMotionMask ;
151 break ;
152 case XW_MOUSEMOVEWITHBUTTON :
153 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON1].function = acallback ;
154 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON1].userdata = auserdata ;
155 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON2].function = acallback ;
156 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON2].userdata = auserdata ;
157 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON3].function = acallback ;
158 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON3].userdata = auserdata ;
159 function = pwindow->ecbk[XW_MOUSEBUTTON1].function ||
160 pwindow->ecbk[XW_MOUSEBUTTON2].function ||
161 pwindow->ecbk[XW_MOUSEBUTTON3].function ||
162 pwindow->icbk[XW_MOUSEBUTTON1].function ||
163 pwindow->icbk[XW_MOUSEBUTTON2].function ||
164 pwindow->icbk[XW_MOUSEBUTTON3].function ;
165 if( !function ) mask = ButtonPressMask | ButtonReleaseMask ;
166 function = pwindow->icbk[XW_MOUSEMOVEWITHBUTTON1].function ||
167 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON2].function ||
168 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON3].function ||
169 pwindow->ecbk[XW_MOUSEMOVE].function ||
170 pwindow->icbk[XW_MOUSEMOVE].function ;
171 if( !function ) mask |= ButtonMotionMask ;
172 break ;
173 case XW_MOUSEMOVEWITHBUTTON1 :
174 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON1].function = acallback ;
175 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON1].userdata = auserdata ;
176 function = pwindow->ecbk[XW_MOUSEBUTTON1].function ||
177 pwindow->ecbk[XW_MOUSEBUTTON2].function ||
178 pwindow->ecbk[XW_MOUSEBUTTON3].function ||
179 pwindow->icbk[XW_MOUSEBUTTON1].function ||
180 pwindow->icbk[XW_MOUSEBUTTON2].function ||
181 pwindow->icbk[XW_MOUSEBUTTON3].function ||
182 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON2].function ||
183 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON2].function ||
184 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON3].function ||
185 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON3].function ;
186 if( !function ) mask = ButtonPressMask | ButtonReleaseMask ;
187 function = pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON2].function ||
188 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON3].function ||
189 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON1].function ||
190 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON2].function ||
191 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON3].function ||
192 pwindow->ecbk[XW_MOUSEMOVE].function ||
193 pwindow->icbk[XW_MOUSEMOVE].function ;
194 if( !function ) mask |= ButtonMotionMask ;
195 break ;
196 case XW_MOUSEMOVEWITHBUTTON2 :
197 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON2].function = acallback ;
198 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON2].userdata = auserdata ;
199 function = pwindow->ecbk[XW_MOUSEBUTTON1].function ||
200 pwindow->ecbk[XW_MOUSEBUTTON2].function ||
201 pwindow->ecbk[XW_MOUSEBUTTON3].function ||
202 pwindow->icbk[XW_MOUSEBUTTON1].function ||
203 pwindow->icbk[XW_MOUSEBUTTON2].function ||
204 pwindow->icbk[XW_MOUSEBUTTON3].function ||
205 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON1].function ||
206 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON1].function ||
207 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON3].function ||
208 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON3].function ;
209 if( !function ) mask = ButtonPressMask | ButtonReleaseMask ;
210 function = pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON1].function ||
211 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON3].function ||
212 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON1].function ||
213 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON2].function ||
214 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON3].function ||
215 pwindow->ecbk[XW_MOUSEMOVE].function ||
216 pwindow->icbk[XW_MOUSEMOVE].function ;
217 if( !function ) mask |= ButtonMotionMask ;
218 break ;
219 case XW_MOUSEMOVEWITHBUTTON3 :
220 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON3].function = acallback ;
221 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON3].userdata = auserdata ;
222 function = pwindow->ecbk[XW_MOUSEBUTTON1].function ||
223 pwindow->ecbk[XW_MOUSEBUTTON2].function ||
224 pwindow->ecbk[XW_MOUSEBUTTON3].function ||
225 pwindow->icbk[XW_MOUSEBUTTON1].function ||
226 pwindow->icbk[XW_MOUSEBUTTON2].function ||
227 pwindow->icbk[XW_MOUSEBUTTON3].function ||
228 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON2].function ||
229 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON2].function ||
230 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON3].function ||
231 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON3].function ;
232 if( !function ) mask = ButtonPressMask | ButtonReleaseMask ;
233 function = pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON1].function ||
234 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON2].function ||
235 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON1].function ||
236 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON2].function ||
237 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON3].function ||
238 pwindow->ecbk[XW_MOUSEMOVE].function ||
239 pwindow->icbk[XW_MOUSEMOVE].function ;
240 if( !function ) mask |= ButtonMotionMask ;
241 break ;
242 case XW_KEYBOARD :
243 pwindow->ecbk[XW_KEYBOARD].function = acallback ;
244 pwindow->ecbk[XW_KEYBOARD].userdata = auserdata ;
245 mask = KeyPressMask | KeyReleaseMask ;
246 break ;
247 case XW_ENTERWINDOW :
248 pwindow->ecbk[XW_ENTERWINDOW].function = acallback ;
249 pwindow->ecbk[XW_ENTERWINDOW].userdata = auserdata ;
250 mask = EnterWindowMask ;
251 break ;
252 case XW_MOVEWINDOW :
253 pwindow->ecbk[XW_MOVEWINDOW].function = acallback ;
254 pwindow->ecbk[XW_MOVEWINDOW].userdata = auserdata ;
255 if( !pwindow->ecbk[XW_RESIZEWINDOW].function )
256 mask = StructureNotifyMask ;
257 break ;
258 case XW_RESIZEWINDOW :
259 pwindow->ecbk[XW_RESIZEWINDOW].function = acallback ;
260 pwindow->ecbk[XW_RESIZEWINDOW].userdata = auserdata ;
261 if( !pwindow->ecbk[XW_MOVEWINDOW].function )
262 mask = StructureNotifyMask ;
263 break ;
264 case XW_ICONIFYWINDOW :
265 pwindow->ecbk[XW_ICONIFYWINDOW].function = acallback ;
266 pwindow->ecbk[XW_ICONIFYWINDOW].userdata = auserdata ;
267 break ;
268 case XW_EXPOSEWINDOW :
269 pwindow->ecbk[XW_EXPOSEWINDOW].function = acallback ;
270 pwindow->ecbk[XW_EXPOSEWINDOW].userdata = auserdata ;
271 mask = ExposureMask ;
272 break ;
273
274 case XW_ALLEVENT :
275 for( i=0 ; i<MAXEVENT ; i++ ) {
276 pwindow->ecbk[i].function = acallback ;
277 pwindow->ecbk[i].userdata = auserdata ;
278 }
279 pwindow->ecbk[XW_ALLEVENT].function = NULL ;
280 pwindow->ecbk[XW_ALLEVENT].userdata = NULL ;
281 mask = ButtonPressMask | ButtonReleaseMask ;
282 mask |= PointerMotionMask | ButtonMotionMask ;
283 mask |= KeyPressMask | KeyReleaseMask ;
284 mask |= EnterWindowMask ;
285 mask |= StructureNotifyMask ;
286 mask |= ExposureMask ;
287 break ;
288 }
289
290 if( mask ) {
291 if( acallback ) _EVENT_MASK |= mask;
292 else _EVENT_MASK &= ~mask ;
293 XSelectInput(_DISPLAY,_WINDOW,_EVENT_MASK) ;
294 }
295
296#ifdef TRACE_SET_EVENT
297if( Xw_get_trace() ) {
298 printf (" Xw_set_event(%lx,%d,%lx,%lx)\n",
299 (long ) pwindow,eventtype,(long ) acallback,(long ) auserdata) ;
300}
301#endif
302 return (XW_SUCCESS);
303
304}