1 // Copyright (c) 1999-2012 OPEN CASCADE SAS
3 // The content of this file is subject to the Open CASCADE Technology Public
4 // License Version 6.5 (the "License"). You may not use the content of this file
5 // except in compliance with the License. Please obtain a copy of the License
6 // at http://www.opencascade.org and read it completely before using this file.
8 // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
9 // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
11 // The Original Code and all software distributed under the License is
12 // distributed on an "AS IS" basis, without warranty of any kind, and the
13 // Initial Developer hereby disclaims all such warranties, including without
14 // limitation, any warranties of merchantability, fitness for a particular
15 // purpose or non-infringement. Please see the License for the specific terms
16 // and conditions governing the rights and limitations under the License.
19 #include <Xw_Extension.h>
21 /* ifdef then trace on */
23 #define TRACE_SET_EVENT
27 XW_STATUS Xw_set_event (awindow,eventtype,acallback,auserdata)
28 XW_EXT_WINDOW *awindow
29 EVENTTYPE eventtype must be one of :
48 XW_CALLBACK acallback CallBack Routine Address (Can be NULL)
49 XW_USERDATA auserdata Associated UserData Address (Can be NULL)
51 Associate an CallBack routine to the window
52 This Routine is call when any Event of type EVENTTYPE is
53 received at Xw_wait_event time
54 NOTE than if callback is NULL ,this remove the corresponding
55 event of type EVENTTYPE .
57 Callback programming example :
59 static XW_CALLBACK any_callback(event,data)
63 printf(" This trap ANY Xw_event of type %d from Ext_window %x\n",
64 event->type,event->any.awindow);
67 Xw_set_event(ext_window,XW_ALLEVENT,any_callback,user_data) ;
71 Returns XW_ERROR if Extended Window address is undefined
72 Returns XW_SUCCESS if successful
77 XW_STATUS Xw_set_event (void *awindow,
78 XW_EVENTTYPE eventtype,
79 XW_CALLBACK acallback,
80 XW_USERDATA *auserdata)
82 XW_STATUS Xw_set_event (awindow,eventtype,acallback,auserdata)
84 XW_EVENTTYPE eventtype ;
85 XW_CALLBACK acallback ;
86 XW_USERDATA *auserdata ;
87 #endif /*XW_PROTOTYPE*/
89 XW_EXT_WINDOW *pwindow = (XW_EXT_WINDOW*)awindow ;
90 int i,function = False ;
93 if( !Xw_isdefine_window(pwindow) ) {
94 /*ERROR*Bad EXT_WINDOW Address*/
95 Xw_set_error(24,"Xw_set_event",pwindow) ;
100 case XW_MOUSEBUTTON :
101 pwindow->ecbk[XW_MOUSEBUTTON1].function = acallback ;
102 pwindow->ecbk[XW_MOUSEBUTTON1].userdata = auserdata ;
103 pwindow->ecbk[XW_MOUSEBUTTON2].function = acallback ;
104 pwindow->ecbk[XW_MOUSEBUTTON2].userdata = auserdata ;
105 pwindow->ecbk[XW_MOUSEBUTTON3].function = acallback ;
106 pwindow->ecbk[XW_MOUSEBUTTON3].userdata = auserdata ;
107 function = pwindow->icbk[XW_MOUSEBUTTON1].function ||
108 pwindow->icbk[XW_MOUSEBUTTON2].function ||
109 pwindow->icbk[XW_MOUSEBUTTON3].function ||
110 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON1].function ||
111 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON2].function ||
112 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON3].function ||
113 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON1].function ||
114 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON2].function ||
115 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON3].function ;
116 if( !function ) mask = ButtonPressMask | ButtonReleaseMask ;
118 case XW_MOUSEBUTTON1 :
119 pwindow->ecbk[XW_MOUSEBUTTON1].function = acallback ;
120 pwindow->ecbk[XW_MOUSEBUTTON1].userdata = auserdata ;
121 function = pwindow->ecbk[XW_MOUSEBUTTON2].function ||
122 pwindow->ecbk[XW_MOUSEBUTTON3].function ||
123 pwindow->icbk[XW_MOUSEBUTTON2].function ||
124 pwindow->icbk[XW_MOUSEBUTTON3].function ||
125 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON2].function ||
126 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON3].function ||
127 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON2].function ||
128 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON3].function ;
129 if( !function ) mask = ButtonPressMask | ButtonReleaseMask ;
131 case XW_MOUSEBUTTON2 :
132 pwindow->ecbk[XW_MOUSEBUTTON2].function = acallback ;
133 pwindow->ecbk[XW_MOUSEBUTTON2].userdata = auserdata ;
134 function = pwindow->ecbk[XW_MOUSEBUTTON1].function ||
135 pwindow->ecbk[XW_MOUSEBUTTON3].function ||
136 pwindow->icbk[XW_MOUSEBUTTON1].function ||
137 pwindow->icbk[XW_MOUSEBUTTON3].function ||
138 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON1].function ||
139 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON3].function ||
140 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON1].function ||
141 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON3].function ;
142 if( !function ) mask = ButtonPressMask | ButtonReleaseMask ;
144 case XW_MOUSEBUTTON3 :
145 pwindow->ecbk[XW_MOUSEBUTTON3].function = acallback ;
146 pwindow->ecbk[XW_MOUSEBUTTON3].userdata = auserdata ;
147 function = pwindow->ecbk[XW_MOUSEBUTTON1].function ||
148 pwindow->ecbk[XW_MOUSEBUTTON2].function ||
149 pwindow->icbk[XW_MOUSEBUTTON1].function ||
150 pwindow->icbk[XW_MOUSEBUTTON2].function ||
151 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON1].function ||
152 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON2].function ||
153 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON1].function ||
154 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON2].function ;
155 if( !function ) mask = ButtonPressMask | ButtonReleaseMask ;
158 pwindow->ecbk[XW_MOUSEMOVE].function = acallback ;
159 pwindow->ecbk[XW_MOUSEMOVE].userdata = auserdata ;
160 function = pwindow->icbk[XW_MOUSEMOVE].function ||
161 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON1].function ||
162 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON2].function ||
163 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON3].function ||
164 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON1].function ||
165 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON2].function ||
166 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON3].function ;
167 if( !function ) mask = PointerMotionMask ;
169 case XW_MOUSEMOVEWITHBUTTON :
170 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON1].function = acallback ;
171 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON1].userdata = auserdata ;
172 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON2].function = acallback ;
173 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON2].userdata = auserdata ;
174 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON3].function = acallback ;
175 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON3].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 if( !function ) mask = ButtonPressMask | ButtonReleaseMask ;
183 function = pwindow->icbk[XW_MOUSEMOVEWITHBUTTON1].function ||
184 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON2].function ||
185 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON3].function ||
186 pwindow->ecbk[XW_MOUSEMOVE].function ||
187 pwindow->icbk[XW_MOUSEMOVE].function ;
188 if( !function ) mask |= ButtonMotionMask ;
190 case XW_MOUSEMOVEWITHBUTTON1 :
191 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON1].function = acallback ;
192 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON1].userdata = auserdata ;
193 function = pwindow->ecbk[XW_MOUSEBUTTON1].function ||
194 pwindow->ecbk[XW_MOUSEBUTTON2].function ||
195 pwindow->ecbk[XW_MOUSEBUTTON3].function ||
196 pwindow->icbk[XW_MOUSEBUTTON1].function ||
197 pwindow->icbk[XW_MOUSEBUTTON2].function ||
198 pwindow->icbk[XW_MOUSEBUTTON3].function ||
199 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON2].function ||
200 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON2].function ||
201 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON3].function ||
202 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON3].function ;
203 if( !function ) mask = ButtonPressMask | ButtonReleaseMask ;
204 function = pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON2].function ||
205 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON3].function ||
206 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON1].function ||
207 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON2].function ||
208 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON3].function ||
209 pwindow->ecbk[XW_MOUSEMOVE].function ||
210 pwindow->icbk[XW_MOUSEMOVE].function ;
211 if( !function ) mask |= ButtonMotionMask ;
213 case XW_MOUSEMOVEWITHBUTTON2 :
214 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON2].function = acallback ;
215 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON2].userdata = auserdata ;
216 function = pwindow->ecbk[XW_MOUSEBUTTON1].function ||
217 pwindow->ecbk[XW_MOUSEBUTTON2].function ||
218 pwindow->ecbk[XW_MOUSEBUTTON3].function ||
219 pwindow->icbk[XW_MOUSEBUTTON1].function ||
220 pwindow->icbk[XW_MOUSEBUTTON2].function ||
221 pwindow->icbk[XW_MOUSEBUTTON3].function ||
222 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON1].function ||
223 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON1].function ||
224 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON3].function ||
225 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON3].function ;
226 if( !function ) mask = ButtonPressMask | ButtonReleaseMask ;
227 function = pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON1].function ||
228 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON3].function ||
229 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON1].function ||
230 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON2].function ||
231 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON3].function ||
232 pwindow->ecbk[XW_MOUSEMOVE].function ||
233 pwindow->icbk[XW_MOUSEMOVE].function ;
234 if( !function ) mask |= ButtonMotionMask ;
236 case XW_MOUSEMOVEWITHBUTTON3 :
237 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON3].function = acallback ;
238 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON3].userdata = auserdata ;
239 function = pwindow->ecbk[XW_MOUSEBUTTON1].function ||
240 pwindow->ecbk[XW_MOUSEBUTTON2].function ||
241 pwindow->ecbk[XW_MOUSEBUTTON3].function ||
242 pwindow->icbk[XW_MOUSEBUTTON1].function ||
243 pwindow->icbk[XW_MOUSEBUTTON2].function ||
244 pwindow->icbk[XW_MOUSEBUTTON3].function ||
245 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON2].function ||
246 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON2].function ||
247 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON3].function ||
248 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON3].function ;
249 if( !function ) mask = ButtonPressMask | ButtonReleaseMask ;
250 function = pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON1].function ||
251 pwindow->ecbk[XW_MOUSEMOVEWITHBUTTON2].function ||
252 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON1].function ||
253 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON2].function ||
254 pwindow->icbk[XW_MOUSEMOVEWITHBUTTON3].function ||
255 pwindow->ecbk[XW_MOUSEMOVE].function ||
256 pwindow->icbk[XW_MOUSEMOVE].function ;
257 if( !function ) mask |= ButtonMotionMask ;
260 pwindow->ecbk[XW_KEYBOARD].function = acallback ;
261 pwindow->ecbk[XW_KEYBOARD].userdata = auserdata ;
262 mask = KeyPressMask | KeyReleaseMask ;
264 case XW_ENTERWINDOW :
265 pwindow->ecbk[XW_ENTERWINDOW].function = acallback ;
266 pwindow->ecbk[XW_ENTERWINDOW].userdata = auserdata ;
267 mask = EnterWindowMask ;
270 pwindow->ecbk[XW_MOVEWINDOW].function = acallback ;
271 pwindow->ecbk[XW_MOVEWINDOW].userdata = auserdata ;
272 if( !pwindow->ecbk[XW_RESIZEWINDOW].function )
273 mask = StructureNotifyMask ;
275 case XW_RESIZEWINDOW :
276 pwindow->ecbk[XW_RESIZEWINDOW].function = acallback ;
277 pwindow->ecbk[XW_RESIZEWINDOW].userdata = auserdata ;
278 if( !pwindow->ecbk[XW_MOVEWINDOW].function )
279 mask = StructureNotifyMask ;
281 case XW_ICONIFYWINDOW :
282 pwindow->ecbk[XW_ICONIFYWINDOW].function = acallback ;
283 pwindow->ecbk[XW_ICONIFYWINDOW].userdata = auserdata ;
285 case XW_EXPOSEWINDOW :
286 pwindow->ecbk[XW_EXPOSEWINDOW].function = acallback ;
287 pwindow->ecbk[XW_EXPOSEWINDOW].userdata = auserdata ;
288 mask = ExposureMask ;
292 for( i=0 ; i<MAXEVENT ; i++ ) {
293 pwindow->ecbk[i].function = acallback ;
294 pwindow->ecbk[i].userdata = auserdata ;
296 pwindow->ecbk[XW_ALLEVENT].function = NULL ;
297 pwindow->ecbk[XW_ALLEVENT].userdata = NULL ;
298 mask = ButtonPressMask | ButtonReleaseMask ;
299 mask |= PointerMotionMask | ButtonMotionMask ;
300 mask |= KeyPressMask | KeyReleaseMask ;
301 mask |= EnterWindowMask ;
302 mask |= StructureNotifyMask ;
303 mask |= ExposureMask ;
308 if( acallback ) _EVENT_MASK |= mask;
309 else _EVENT_MASK &= ~mask ;
310 XSelectInput(_DISPLAY,_WINDOW,_EVENT_MASK) ;
313 #ifdef TRACE_SET_EVENT
314 if( Xw_get_trace() ) {
315 printf (" Xw_set_event(%lx,%d,%lx,%lx)\n",
316 (long ) pwindow,eventtype,(long ) acallback,(long ) auserdata) ;