XWorkstation.st
changeset 8368 03bf464aa8c8
parent 8367 e0d6816f072b
child 8386 184439a867ee
equal deleted inserted replaced
8367:e0d6816f072b 8368:03bf464aa8c8
  6094      This method may block - so you better check for pending events
  6094      This method may block - so you better check for pending events
  6095      before calling for it.
  6095      before calling for it.
  6096 
  6096 
  6097      The event fields are placed into anEventArray (must be at least size 13):
  6097      The event fields are placed into anEventArray (must be at least size 13):
  6098      the fields are:
  6098      the fields are:
  6099 	1:      windowID
  6099         1:      windowID
  6100 	2:      eventType-ID
  6100         2:      eventType-ID
  6101 	3:      eventTypeSymbol
  6101         3:      eventTypeSymbol
  6102 
  6102 
  6103 	4..     args
  6103         4..     args
  6104 
  6104 
  6105      Sorry I had to split dispatch into this fetch method and a separate
  6105      Sorry I had to split dispatch into this fetch method and a separate
  6106      handler method to allow UNLIMITEDSTACK here.
  6106      handler method to allow UNLIMITEDSTACK here.
  6107      (some Xlibs do a big alloca there which cannot be done in
  6107      (some Xlibs do a big alloca there which cannot be done in
  6108       #dispatchEvent:, since it dispatches out into ST-methods).
  6108       #dispatchEvent:, since it dispatches out into ST-methods).
  6110 
  6110 
  6111 %{  /* UNLIMITEDSTACK */
  6111 %{  /* UNLIMITEDSTACK */
  6112 
  6112 
  6113     Display *dpy;
  6113     Display *dpy;
  6114     Window win, wWanted;
  6114     Window win, wWanted;
  6115     int evMask, returnValue;
  6115     long evMask;
       
  6116     int returnValue;
  6116     XEvent ev;
  6117     XEvent ev;
  6117     OBJ eB;
  6118     OBJ eB;
  6118     KeySym keySym;
  6119     KeySym keySym;
  6119     unsigned char buffer[64];
  6120     unsigned char buffer[64];
  6120     int i, nchars;
  6121     int i, nchars;
  6121     char *keySymString;
  6122     char *keySymString;
  6122     OBJ arg, sym, t, windowID;
  6123     OBJ arg, sym, t, windowID;
  6123 
  6124 
  6124     if (! ISCONNECTED) {
  6125     if (! ISCONNECTED) {
  6125 	RETURN (false);
  6126         RETURN (false);
  6126     }
  6127     }
  6127 
  6128 
  6128     dpy = myDpy;
  6129     dpy = myDpy;
  6129 
  6130 
  6130     ev.type = 0;
  6131     ev.type = 0;
  6131 
  6132 
  6132     if (__isSmallInteger(eventMask)) {
  6133     if (__isSmallInteger(eventMask)) {
  6133 	evMask = __intVal(eventMask);
  6134         evMask = __intVal(eventMask);
  6134     } else {
  6135     } else {
  6135 	evMask = ~0;
  6136         evMask = ~0;
  6136     }
  6137     }
  6137 
  6138 
  6138     if (__isExternalAddress(aViewIdOrNil)) {
  6139     if (__isExternalAddress(aViewIdOrNil)) {
  6139 	wWanted = __WindowVal(aViewIdOrNil);
  6140         wWanted = __WindowVal(aViewIdOrNil);
  6140 	returnValue = XCheckWindowEvent(dpy, wWanted, evMask, &ev);
  6141         returnValue = XCheckWindowEvent(dpy, wWanted, evMask, &ev);
  6141     } else {
  6142     } else {
  6142 	if (evMask == ~0) {
  6143         if (evMask == ~0) {
  6143 	    XNextEvent(dpy, &ev);
  6144             XNextEvent(dpy, &ev);
  6144 	    returnValue = 1;
  6145             returnValue = 1;
  6145 	} else {
  6146         } else {
  6146 	    returnValue = XCheckMaskEvent(dpy, evMask, &ev);
  6147             returnValue = XCheckMaskEvent(dpy, evMask, &ev);
  6147 	}
  6148         }
  6148     }
  6149     }
  6149     if (!returnValue) {
  6150     if (!returnValue) {
  6150 	/* there is no event */
  6151         /* there is no event */
  6151 	RETURN (false);
  6152         RETURN (false);
  6152     }
  6153     }
  6153 
  6154 
  6154     if (anEventArray == nil) {
  6155     if (anEventArray == nil) {
  6155 	/* sender is not interested in the event */
  6156         /* sender is not interested in the event */
  6156 	RETURN(true);
  6157         RETURN(true);
  6157     }
  6158     }
  6158 
  6159 
  6159     if (!__isArray(anEventArray)) {
  6160     if (!__isArray(anEventArray)) {
  6160 	console_fprintf(stderr, "XWorkstation: bad argument [%d]\n", __LINE__);
  6161         console_fprintf(stderr, "XWorkstation: bad argument [%d]\n", __LINE__);
  6161 	RETURN (false);
  6162         RETURN (false);
  6162     }
  6163     }
  6163     if (__arraySize(anEventArray) < 11) {
  6164     if (__arraySize(anEventArray) < 11) {
  6164 	console_fprintf(stderr, "XWorkstation: bad argument [%d]\n", __LINE__);
  6165         console_fprintf(stderr, "XWorkstation: bad argument [%d]\n", __LINE__);
  6165 	RETURN (false);
  6166         RETURN (false);
  6166     }
  6167     }
  6167 
  6168 
  6168 #   define ANYBUTTON   (Button1MotionMask | Button2MotionMask | Button3MotionMask)
  6169 #   define ANYBUTTON   (Button1MotionMask | Button2MotionMask | Button3MotionMask)
  6169 
  6170 
  6170 #   define ae ((XAnyEvent *)&ev)
  6171 #   define ae ((XAnyEvent *)&ev)
  6187 #   define pe ((XPropertyEvent *)&ev)
  6188 #   define pe ((XPropertyEvent *)&ev)
  6188 #   define sce ((XSelectionClearEvent *)&ev)
  6189 #   define sce ((XSelectionClearEvent *)&ev)
  6189 #   define cme ((XColormapEvent *)&ev)
  6190 #   define cme ((XColormapEvent *)&ev)
  6190 
  6191 
  6191     if (((t = __INST(lastId)) != nil)
  6192     if (((t = __INST(lastId)) != nil)
  6192 	 && __isExternalAddress(t)
  6193          && __isExternalAddress(t)
  6193 	 && (__WindowVal(t) == ae->window)) {
  6194          && (__WindowVal(t) == ae->window)) {
  6194 	windowID = t;
  6195         windowID = t;
  6195     } else {
  6196     } else {
  6196 	windowID = __MKEXTERNALADDRESS(ae->window);
  6197         windowID = __MKEXTERNALADDRESS(ae->window);
  6197     }
  6198     }
  6198 
  6199 
  6199     __ArrayInstPtr(anEventArray)->a_element[0] = windowID; __STORE(anEventArray, windowID);
  6200     __ArrayInstPtr(anEventArray)->a_element[0] = windowID; __STORE(anEventArray, windowID);
  6200     __ArrayInstPtr(anEventArray)->a_element[1] = __MKSMALLINT(ev.type);
  6201     __ArrayInstPtr(anEventArray)->a_element[1] = __MKSMALLINT(ev.type);
  6201 
  6202 
  6202     switch (ev.type) {
  6203     switch (ev.type) {
  6203 	case KeyRelease:
  6204         case KeyRelease:
  6204 	    sym = @symbol(keyRelease:key:code:state:x:y:rootX:rootY:time:);
  6205             sym = @symbol(keyRelease:key:code:state:x:y:rootX:rootY:time:);
  6205 	    goto keyPressAndRelease;
  6206             goto keyPressAndRelease;
  6206 
  6207 
  6207 	case KeyPress:
  6208         case KeyPress:
  6208 	    sym = @symbol(keyPress:key:code:state:x:y:rootX:rootY:time:);
  6209             sym = @symbol(keyPress:key:code:state:x:y:rootX:rootY:time:);
  6209 	    /* FALL INTO */
  6210             /* FALL INTO */
  6210 
  6211 
  6211 	keyPressAndRelease:
  6212         keyPressAndRelease:
  6212 	    arg = nil;
  6213             arg = nil;
  6213 	    nchars = XLookupString(ke, (char *)buffer, sizeof(buffer), &keySym, NULL);
  6214             nchars = XLookupString(ke, (char *)buffer, sizeof(buffer), &keySym, NULL);
  6214 	    if (nchars == 1 && (((buffer[0] >= ' ') && (buffer[0] <= '~'))
  6215             if (nchars == 1 && (((buffer[0] >= ' ') && (buffer[0] <= '~'))
  6215 		|| (buffer[0] >= 0x80))) {
  6216                 || (buffer[0] >= 0x80))) {
  6216 		arg = __MKCHARACTER(buffer[0]);
  6217                 arg = __MKCHARACTER(buffer[0]);
  6217 //            } else if (nchars > 2) {
  6218 //            } else if (nchars > 2) {
  6218 //                arg = __MKSTRING_L(buffer, nchars);
  6219 //                arg = __MKSTRING_L(buffer, nchars);
  6219 	    } else {
  6220             } else {
  6220 		keySymString = XKeysymToString(keySym);
  6221                 keySymString = XKeysymToString(keySym);
  6221 		if (keySymString) {
  6222                 if (keySymString) {
  6222 		    arg = __MKSYMBOL(keySymString, 0);
  6223                     arg = __MKSYMBOL(keySymString, 0);
  6223 		}
  6224                 }
  6224 	    }
  6225             }
  6225 
  6226 
  6226 #ifdef IGNORE_UNKNOWN_KEYCODES
  6227 #ifdef IGNORE_UNKNOWN_KEYCODES
  6227 	    if (arg == nil) {
  6228             if (arg == nil) {
  6228 		/* happens sometimes (alt-graph on sun has no keysym) */
  6229                 /* happens sometimes (alt-graph on sun has no keysym) */
  6229 		RETURN (false);
  6230                 RETURN (false);
  6230 	    }
  6231             }
  6231 #endif
  6232 #endif
  6232 	    __ArrayInstPtr(anEventArray)->a_element[2] = sym;
  6233             __ArrayInstPtr(anEventArray)->a_element[2] = sym;
  6233 
  6234 
  6234 	    __ArrayInstPtr(anEventArray)->a_element[3] = arg; __STORE(anEventArray, arg);
  6235             __ArrayInstPtr(anEventArray)->a_element[3] = arg; __STORE(anEventArray, arg);
  6235 	    t = __MKUINT(ke->keycode); __ArrayInstPtr(anEventArray)->a_element[4] = t; __STORE(anEventArray, t);
  6236             t = __MKUINT(ke->keycode); __ArrayInstPtr(anEventArray)->a_element[4] = t; __STORE(anEventArray, t);
  6236 	    __ArrayInstPtr(anEventArray)->a_element[5] = __mkSmallInteger(ke->state);
  6237             __ArrayInstPtr(anEventArray)->a_element[5] = __mkSmallInteger(ke->state);
  6237 	    __ArrayInstPtr(anEventArray)->a_element[6] = __mkSmallInteger(ke->x);
  6238             __ArrayInstPtr(anEventArray)->a_element[6] = __mkSmallInteger(ke->x);
  6238 	    __ArrayInstPtr(anEventArray)->a_element[7] = __mkSmallInteger(ke->y);
  6239             __ArrayInstPtr(anEventArray)->a_element[7] = __mkSmallInteger(ke->y);
  6239 	    __ArrayInstPtr(anEventArray)->a_element[8] = __mkSmallInteger(ke->x_root);
  6240             __ArrayInstPtr(anEventArray)->a_element[8] = __mkSmallInteger(ke->x_root);
  6240 	    __ArrayInstPtr(anEventArray)->a_element[9] = __mkSmallInteger(ke->y_root);
  6241             __ArrayInstPtr(anEventArray)->a_element[9] = __mkSmallInteger(ke->y_root);
  6241 	    t = __MKUINT(ke->time); __ArrayInstPtr(anEventArray)->a_element[10] = t; __STORE(anEventArray, t);
  6242             t = __MKUINT(ke->time); __ArrayInstPtr(anEventArray)->a_element[10] = t; __STORE(anEventArray, t);
  6242 	    break;
  6243             break;
  6243 
  6244 
  6244 	case ButtonPress:
  6245         case ButtonPress:
  6245 	    sym = @symbol(buttonPress:button:state:x:y:rootX:rootY:time:);
  6246             sym = @symbol(buttonPress:button:state:x:y:rootX:rootY:time:);
  6246 	    goto buttonPressAndRelease;
  6247             goto buttonPressAndRelease;
  6247 
  6248 
  6248 	case ButtonRelease:
  6249         case ButtonRelease:
  6249 	    sym = @symbol(buttonRelease:button:state:x:y:rootX:rootY:time:);
  6250             sym = @symbol(buttonRelease:button:state:x:y:rootX:rootY:time:);
  6250 	    /* fall into */
  6251             /* fall into */
  6251 
  6252 
  6252 	buttonPressAndRelease:
  6253         buttonPressAndRelease:
  6253 	    __ArrayInstPtr(anEventArray)->a_element[2] = sym;
  6254             __ArrayInstPtr(anEventArray)->a_element[2] = sym;
  6254 	    __ArrayInstPtr(anEventArray)->a_element[3] = __mkSmallInteger(be->button);
  6255             __ArrayInstPtr(anEventArray)->a_element[3] = __mkSmallInteger(be->button);
  6255 	    __ArrayInstPtr(anEventArray)->a_element[4] = __mkSmallInteger(ke->state);
  6256             __ArrayInstPtr(anEventArray)->a_element[4] = __mkSmallInteger(ke->state);
  6256 	    __ArrayInstPtr(anEventArray)->a_element[5] = __mkSmallInteger(be->x);
  6257             __ArrayInstPtr(anEventArray)->a_element[5] = __mkSmallInteger(be->x);
  6257 	    __ArrayInstPtr(anEventArray)->a_element[6] = __mkSmallInteger(be->y);
  6258             __ArrayInstPtr(anEventArray)->a_element[6] = __mkSmallInteger(be->y);
  6258 	    __ArrayInstPtr(anEventArray)->a_element[7] = __mkSmallInteger(be->x_root);
  6259             __ArrayInstPtr(anEventArray)->a_element[7] = __mkSmallInteger(be->x_root);
  6259 	    __ArrayInstPtr(anEventArray)->a_element[8] = __mkSmallInteger(be->y_root);
  6260             __ArrayInstPtr(anEventArray)->a_element[8] = __mkSmallInteger(be->y_root);
  6260 	    t = __MKUINT(be->time); __ArrayInstPtr(anEventArray)->a_element[9] = t; __STORE(anEventArray, t);
  6261             t = __MKUINT(be->time); __ArrayInstPtr(anEventArray)->a_element[9] = t; __STORE(anEventArray, t);
  6261 	    break;
  6262             break;
  6262 
  6263 
  6263 	case MotionNotify:
  6264         case MotionNotify:
  6264 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(buttonMotion:state:x:y:rootX:rootY:time:);
  6265             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(buttonMotion:state:x:y:rootX:rootY:time:);
  6265 
  6266 
  6266 	    __ArrayInstPtr(anEventArray)->a_element[3] = __mkSmallInteger(me->state);
  6267             __ArrayInstPtr(anEventArray)->a_element[3] = __mkSmallInteger(me->state);
  6267 	    __ArrayInstPtr(anEventArray)->a_element[4] = __mkSmallInteger(me->x);
  6268             __ArrayInstPtr(anEventArray)->a_element[4] = __mkSmallInteger(me->x);
  6268 	    __ArrayInstPtr(anEventArray)->a_element[5] = __mkSmallInteger(me->y);
  6269             __ArrayInstPtr(anEventArray)->a_element[5] = __mkSmallInteger(me->y);
  6269 	    __ArrayInstPtr(anEventArray)->a_element[6] = __mkSmallInteger(me->x_root);
  6270             __ArrayInstPtr(anEventArray)->a_element[6] = __mkSmallInteger(me->x_root);
  6270 	    __ArrayInstPtr(anEventArray)->a_element[7] = __mkSmallInteger(me->y_root);
  6271             __ArrayInstPtr(anEventArray)->a_element[7] = __mkSmallInteger(me->y_root);
  6271 	    t = __MKUINT(me->time); __ArrayInstPtr(anEventArray)->a_element[8] = t; __STORE(anEventArray, t);
  6272             t = __MKUINT(me->time); __ArrayInstPtr(anEventArray)->a_element[8] = t; __STORE(anEventArray, t);
  6272 	    break;
  6273             break;
  6273 
  6274 
  6274 	case FocusIn:
  6275         case FocusIn:
  6275 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(focusIn:mode:detail:);
  6276             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(focusIn:mode:detail:);
  6276 	    goto focusInOut;
  6277             goto focusInOut;
  6277 
  6278 
  6278 	case FocusOut:
  6279         case FocusOut:
  6279 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(focusOut:mode:detail:);
  6280             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(focusOut:mode:detail:);
  6280 	    /* fall into */
  6281             /* fall into */
  6281 
  6282 
  6282 	focusInOut:
  6283         focusInOut:
  6283 	    __ArrayInstPtr(anEventArray)->a_element[3] = __mkSmallInteger(fe->mode);
  6284             __ArrayInstPtr(anEventArray)->a_element[3] = __mkSmallInteger(fe->mode);
  6284 	    __ArrayInstPtr(anEventArray)->a_element[4] = __mkSmallInteger(fe->detail);
  6285             __ArrayInstPtr(anEventArray)->a_element[4] = __mkSmallInteger(fe->detail);
  6285 	    break;
  6286             break;
  6286 
  6287 
  6287 	case EnterNotify:
  6288         case EnterNotify:
  6288 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(pointerEnter:x:y:rootX:rootY:state:mode:detail:time:);
  6289             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(pointerEnter:x:y:rootX:rootY:state:mode:detail:time:);
  6289 	    goto enterLeave;
  6290             goto enterLeave;
  6290 
  6291 
  6291 	case LeaveNotify:
  6292         case LeaveNotify:
  6292 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(pointerLeave:x:y:rootX:rootY:state:mode:detail:time:);
  6293             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(pointerLeave:x:y:rootX:rootY:state:mode:detail:time:);
  6293 	    /* fall into */
  6294             /* fall into */
  6294 
  6295 
  6295 	enterLeave:
  6296         enterLeave:
  6296 	    __ArrayInstPtr(anEventArray)->a_element[3] = __mkSmallInteger(ele->x);
  6297             __ArrayInstPtr(anEventArray)->a_element[3] = __mkSmallInteger(ele->x);
  6297 	    __ArrayInstPtr(anEventArray)->a_element[4] = __mkSmallInteger(ele->y);
  6298             __ArrayInstPtr(anEventArray)->a_element[4] = __mkSmallInteger(ele->y);
  6298 	    __ArrayInstPtr(anEventArray)->a_element[5] = __mkSmallInteger(ele->x_root);
  6299             __ArrayInstPtr(anEventArray)->a_element[5] = __mkSmallInteger(ele->x_root);
  6299 	    __ArrayInstPtr(anEventArray)->a_element[6] = __mkSmallInteger(ele->y_root);
  6300             __ArrayInstPtr(anEventArray)->a_element[6] = __mkSmallInteger(ele->y_root);
  6300 	    __ArrayInstPtr(anEventArray)->a_element[7] = __mkSmallInteger(ele->state);
  6301             __ArrayInstPtr(anEventArray)->a_element[7] = __mkSmallInteger(ele->state);
  6301 	    __ArrayInstPtr(anEventArray)->a_element[8] = __mkSmallInteger(ele->mode);
  6302             __ArrayInstPtr(anEventArray)->a_element[8] = __mkSmallInteger(ele->mode);
  6302 	    __ArrayInstPtr(anEventArray)->a_element[9] = __mkSmallInteger(ele->detail);
  6303             __ArrayInstPtr(anEventArray)->a_element[9] = __mkSmallInteger(ele->detail);
  6303 	    t = __MKUINT(ele->time); __ArrayInstPtr(anEventArray)->a_element[10] = t; __STORE(anEventArray, t);
  6304             t = __MKUINT(ele->time); __ArrayInstPtr(anEventArray)->a_element[10] = t; __STORE(anEventArray, t);
  6304 	    break;
  6305             break;
  6305 
  6306 
  6306 	case Expose:
  6307         case Expose:
  6307 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(expose:x:y:width:height:count:);
  6308             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(expose:x:y:width:height:count:);
  6308 	    goto expose;
  6309             goto expose;
  6309 
  6310 
  6310 	case GraphicsExpose:
  6311         case GraphicsExpose:
  6311 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(graphicsExpose:x:y:width:height:count:);
  6312             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(graphicsExpose:x:y:width:height:count:);
  6312 	    /* fall into */
  6313             /* fall into */
  6313 
  6314 
  6314 	expose:
  6315         expose:
  6315 	    __ArrayInstPtr(anEventArray)->a_element[3] = __mkSmallInteger(ee->x);
  6316             __ArrayInstPtr(anEventArray)->a_element[3] = __mkSmallInteger(ee->x);
  6316 	    __ArrayInstPtr(anEventArray)->a_element[4] = __mkSmallInteger(ee->y);
  6317             __ArrayInstPtr(anEventArray)->a_element[4] = __mkSmallInteger(ee->y);
  6317 	    __ArrayInstPtr(anEventArray)->a_element[5] = __mkSmallInteger(ee->width);
  6318             __ArrayInstPtr(anEventArray)->a_element[5] = __mkSmallInteger(ee->width);
  6318 	    __ArrayInstPtr(anEventArray)->a_element[6] = __mkSmallInteger(ee->height);
  6319             __ArrayInstPtr(anEventArray)->a_element[6] = __mkSmallInteger(ee->height);
  6319 	    __ArrayInstPtr(anEventArray)->a_element[7] = __mkSmallInteger(ee->count);
  6320             __ArrayInstPtr(anEventArray)->a_element[7] = __mkSmallInteger(ee->count);
  6320 	    break;
  6321             break;
  6321 
  6322 
  6322 	case NoExpose:
  6323         case NoExpose:
  6323 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(noExposeView:);
  6324             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(noExposeView:);
  6324 	    break;
  6325             break;
  6325 
  6326 
  6326 	case VisibilityNotify:
  6327         case VisibilityNotify:
  6327 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(visibilityNotify:state:);
  6328             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(visibilityNotify:state:);
  6328 	    switch (ve->state) {
  6329             switch (ve->state) {
  6329 		case VisibilityUnobscured:
  6330                 case VisibilityUnobscured:
  6330 		    __ArrayInstPtr(anEventArray)->a_element[3] = @symbol(unobscured);
  6331                     __ArrayInstPtr(anEventArray)->a_element[3] = @symbol(unobscured);
  6331 		    break;
  6332                     break;
  6332 		case VisibilityPartiallyObscured:
  6333                 case VisibilityPartiallyObscured:
  6333 		    __ArrayInstPtr(anEventArray)->a_element[3] = @symbol(partiallyObscured);
  6334                     __ArrayInstPtr(anEventArray)->a_element[3] = @symbol(partiallyObscured);
  6334 		    break;
  6335                     break;
  6335 		case VisibilityFullyObscured:
  6336                 case VisibilityFullyObscured:
  6336 		    __ArrayInstPtr(anEventArray)->a_element[3] = @symbol(fullyObscured);
  6337                     __ArrayInstPtr(anEventArray)->a_element[3] = @symbol(fullyObscured);
  6337 		    break;
  6338                     break;
  6338 		default:
  6339                 default:
  6339 		    __ArrayInstPtr(anEventArray)->a_element[3] = __MKSMALLINT(ve->state);
  6340                     __ArrayInstPtr(anEventArray)->a_element[3] = __MKSMALLINT(ve->state);
  6340 		    break;
  6341                     break;
  6341 	    }
  6342             }
  6342 	    break;
  6343             break;
  6343 
  6344 
  6344 	case CreateNotify:
  6345         case CreateNotify:
  6345 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(createWindow:x:y:width:height:);
  6346             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(createWindow:x:y:width:height:);
  6346 	    __ArrayInstPtr(anEventArray)->a_element[3] = __mkSmallInteger(cre->x);
  6347             __ArrayInstPtr(anEventArray)->a_element[3] = __mkSmallInteger(cre->x);
  6347 	    __ArrayInstPtr(anEventArray)->a_element[4] = __mkSmallInteger(cre->y);
  6348             __ArrayInstPtr(anEventArray)->a_element[4] = __mkSmallInteger(cre->y);
  6348 	    __ArrayInstPtr(anEventArray)->a_element[5] = __mkSmallInteger(cre->width);
  6349             __ArrayInstPtr(anEventArray)->a_element[5] = __mkSmallInteger(cre->width);
  6349 	    __ArrayInstPtr(anEventArray)->a_element[6] = __mkSmallInteger(cre->height);
  6350             __ArrayInstPtr(anEventArray)->a_element[6] = __mkSmallInteger(cre->height);
  6350 	    break;
  6351             break;
  6351 
  6352 
  6352 	case DestroyNotify:
  6353         case DestroyNotify:
  6353 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(destroyedView:);
  6354             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(destroyedView:);
  6354 	    break;
  6355             break;
  6355 
  6356 
  6356 	case UnmapNotify:
  6357         case UnmapNotify:
  6357 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(unmappedView:);
  6358             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(unmappedView:);
  6358 	    break;
  6359             break;
  6359 
  6360 
  6360 	case MapNotify:
  6361         case MapNotify:
  6361 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(mappedView:);
  6362             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(mappedView:);
  6362 	    break;
  6363             break;
  6363 
  6364 
  6364 	case ConfigureNotify:
  6365         case ConfigureNotify:
  6365 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(configure:relativeTo:x:y:width:height:borderWidth:above:overrideRedirect:);
  6366             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(configure:relativeTo:x:y:width:height:borderWidth:above:overrideRedirect:);
  6366 	    __ArrayInstPtr(anEventArray)->a_element[3] = nil;
  6367             __ArrayInstPtr(anEventArray)->a_element[3] = nil;
  6367 	    __ArrayInstPtr(anEventArray)->a_element[4] = __mkSmallInteger(ce->x);
  6368             __ArrayInstPtr(anEventArray)->a_element[4] = __mkSmallInteger(ce->x);
  6368 	    __ArrayInstPtr(anEventArray)->a_element[5] = __mkSmallInteger(ce->y);
  6369             __ArrayInstPtr(anEventArray)->a_element[5] = __mkSmallInteger(ce->y);
  6369 	    __ArrayInstPtr(anEventArray)->a_element[6] = __mkSmallInteger(ce->width);
  6370             __ArrayInstPtr(anEventArray)->a_element[6] = __mkSmallInteger(ce->width);
  6370 	    __ArrayInstPtr(anEventArray)->a_element[7] = __mkSmallInteger(ce->height);
  6371             __ArrayInstPtr(anEventArray)->a_element[7] = __mkSmallInteger(ce->height);
  6371 	    __ArrayInstPtr(anEventArray)->a_element[8] = __mkSmallInteger(ce->border_width);
  6372             __ArrayInstPtr(anEventArray)->a_element[8] = __mkSmallInteger(ce->border_width);
  6372 	   __ArrayInstPtr(anEventArray)->a_element[9] = nil;
  6373            __ArrayInstPtr(anEventArray)->a_element[9] = nil;
  6373 	    __ArrayInstPtr(anEventArray)->a_element[10] = ce->override_redirect ? true : false;
  6374             __ArrayInstPtr(anEventArray)->a_element[10] = ce->override_redirect ? true : false;
  6374 	    if (ce->event != None) {
  6375             if (ce->event != None) {
  6375 		t = __MKEXTERNALADDRESS(ce->event); __ArrayInstPtr(anEventArray)->a_element[3] = t; __STORE(anEventArray, t);
  6376                 t = __MKEXTERNALADDRESS(ce->event); __ArrayInstPtr(anEventArray)->a_element[3] = t; __STORE(anEventArray, t);
  6376 	    }
  6377             }
  6377 	    if (ce->above != None) {
  6378             if (ce->above != None) {
  6378 		t = __MKEXTERNALADDRESS(ce->above); __ArrayInstPtr(anEventArray)->a_element[9] = t; __STORE(anEventArray, t);
  6379                 t = __MKEXTERNALADDRESS(ce->above); __ArrayInstPtr(anEventArray)->a_element[9] = t; __STORE(anEventArray, t);
  6379 	    }
  6380             }
  6380 	    break;
  6381             break;
  6381 
  6382 
  6382 	case GravityNotify:
  6383         case GravityNotify:
  6383 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(gravityNotify:x:y:);
  6384             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(gravityNotify:x:y:);
  6384 	    __ArrayInstPtr(anEventArray)->a_element[3] = __mkSmallInteger(gre->x);
  6385             __ArrayInstPtr(anEventArray)->a_element[3] = __mkSmallInteger(gre->x);
  6385 	    __ArrayInstPtr(anEventArray)->a_element[4] = __mkSmallInteger(gre->y);
  6386             __ArrayInstPtr(anEventArray)->a_element[4] = __mkSmallInteger(gre->y);
  6386 	    break;
  6387             break;
  6387 
  6388 
  6388 	case ResizeRequest:
  6389         case ResizeRequest:
  6389 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(resizeRequest:width:height:);
  6390             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(resizeRequest:width:height:);
  6390 	    __ArrayInstPtr(anEventArray)->a_element[3] = __mkSmallInteger(rr->width);
  6391             __ArrayInstPtr(anEventArray)->a_element[3] = __mkSmallInteger(rr->width);
  6391 	    __ArrayInstPtr(anEventArray)->a_element[4] = __mkSmallInteger(rr->height);
  6392             __ArrayInstPtr(anEventArray)->a_element[4] = __mkSmallInteger(rr->height);
  6392 	    break;
  6393             break;
  6393 
  6394 
  6394 	case ConfigureRequest:
  6395         case ConfigureRequest:
  6395 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(configureRequest:x:y:width:height:above:detail:);
  6396             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(configureRequest:x:y:width:height:above:detail:);
  6396 	    __ArrayInstPtr(anEventArray)->a_element[3] = __mkSmallInteger(cr->x);
  6397             __ArrayInstPtr(anEventArray)->a_element[3] = __mkSmallInteger(cr->x);
  6397 	    __ArrayInstPtr(anEventArray)->a_element[4] = __mkSmallInteger(cr->y);
  6398             __ArrayInstPtr(anEventArray)->a_element[4] = __mkSmallInteger(cr->y);
  6398 	    __ArrayInstPtr(anEventArray)->a_element[5] = __mkSmallInteger(cr->width);
  6399             __ArrayInstPtr(anEventArray)->a_element[5] = __mkSmallInteger(cr->width);
  6399 	    __ArrayInstPtr(anEventArray)->a_element[6] = __mkSmallInteger(cr->height);
  6400             __ArrayInstPtr(anEventArray)->a_element[6] = __mkSmallInteger(cr->height);
  6400 	    __ArrayInstPtr(anEventArray)->a_element[7] = nil;
  6401             __ArrayInstPtr(anEventArray)->a_element[7] = nil;
  6401 	    if (cr->above != None) {
  6402             if (cr->above != None) {
  6402 		t = __MKEXTERNALADDRESS(cr->above); __ArrayInstPtr(anEventArray)->a_element[7] = t; __STORE(anEventArray, t);
  6403                 t = __MKEXTERNALADDRESS(cr->above); __ArrayInstPtr(anEventArray)->a_element[7] = t; __STORE(anEventArray, t);
  6403 	    }
  6404             }
  6404 	    switch (cr->detail) {
  6405             switch (cr->detail) {
  6405 		case Above:
  6406                 case Above:
  6406 		    __ArrayInstPtr(anEventArray)->a_element[8] = @symbol(above);
  6407                     __ArrayInstPtr(anEventArray)->a_element[8] = @symbol(above);
  6407 		    break;
  6408                     break;
  6408 		case Below:
  6409                 case Below:
  6409 		    __ArrayInstPtr(anEventArray)->a_element[8] = @symbol(below);
  6410                     __ArrayInstPtr(anEventArray)->a_element[8] = @symbol(below);
  6410 		    break;
  6411                     break;
  6411 		case TopIf:
  6412                 case TopIf:
  6412 		    __ArrayInstPtr(anEventArray)->a_element[8] = @symbol(topIf);
  6413                     __ArrayInstPtr(anEventArray)->a_element[8] = @symbol(topIf);
  6413 		    break;
  6414                     break;
  6414 		case BottomIf:
  6415                 case BottomIf:
  6415 		    __ArrayInstPtr(anEventArray)->a_element[8] = @symbol(bottomIf);
  6416                     __ArrayInstPtr(anEventArray)->a_element[8] = @symbol(bottomIf);
  6416 		    break;
  6417                     break;
  6417 		case Opposite:
  6418                 case Opposite:
  6418 		    __ArrayInstPtr(anEventArray)->a_element[8] = @symbol(opposite);
  6419                     __ArrayInstPtr(anEventArray)->a_element[8] = @symbol(opposite);
  6419 		    break;
  6420                     break;
  6420 		default:
  6421                 default:
  6421 		    __ArrayInstPtr(anEventArray)->a_element[8] = __MKSMALLINT(cr->detail);
  6422                     __ArrayInstPtr(anEventArray)->a_element[8] = __MKSMALLINT(cr->detail);
  6422 		    break;
  6423                     break;
  6423 	    }
  6424             }
  6424 	    break;
  6425             break;
  6425 
  6426 
  6426 	case CirculateNotify:
  6427         case CirculateNotify:
  6427 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(circulateNotify:place:);
  6428             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(circulateNotify:place:);
  6428 	    goto circulate;
  6429             goto circulate;
  6429 
  6430 
  6430 	case CirculateRequest:
  6431         case CirculateRequest:
  6431 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(circulateRequest:place:);
  6432             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(circulateRequest:place:);
  6432 	    /* fall into */
  6433             /* fall into */
  6433 	circulate:
  6434         circulate:
  6434 	    switch (cie->place) {
  6435             switch (cie->place) {
  6435 		case PlaceOnTop:
  6436                 case PlaceOnTop:
  6436 		    __ArrayInstPtr(anEventArray)->a_element[3] = @symbol(placeOnTop);
  6437                     __ArrayInstPtr(anEventArray)->a_element[3] = @symbol(placeOnTop);
  6437 		    break;
  6438                     break;
  6438 		case PlaceOnBottom:
  6439                 case PlaceOnBottom:
  6439 		    __ArrayInstPtr(anEventArray)->a_element[3] = @symbol(placeOnBottom);
  6440                     __ArrayInstPtr(anEventArray)->a_element[3] = @symbol(placeOnBottom);
  6440 		    break;
  6441                     break;
  6441 		default:
  6442                 default:
  6442 		    __ArrayInstPtr(anEventArray)->a_element[3] = __MKSMALLINT(cie->place);
  6443                     __ArrayInstPtr(anEventArray)->a_element[3] = __MKSMALLINT(cie->place);
  6443 		    break;
  6444                     break;
  6444 	    }
  6445             }
  6445 	    break;
  6446             break;
  6446 
  6447 
  6447 	case PropertyNotify:
  6448         case PropertyNotify:
  6448 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(propertyChange:property:state:time:);
  6449             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(propertyChange:property:state:time:);
  6449 	    __ArrayInstPtr(anEventArray)->a_element[3] = __MKATOMOBJ(pe->atom);
  6450             __ArrayInstPtr(anEventArray)->a_element[3] = __MKATOMOBJ(pe->atom);
  6450 	    switch (pe->state) {
  6451             switch (pe->state) {
  6451 		case PropertyNewValue:
  6452                 case PropertyNewValue:
  6452 		    __ArrayInstPtr(anEventArray)->a_element[4] = @symbol(newValue);
  6453                     __ArrayInstPtr(anEventArray)->a_element[4] = @symbol(newValue);
  6453 		    break;
  6454                     break;
  6454 		case PropertyDelete:
  6455                 case PropertyDelete:
  6455 		    __ArrayInstPtr(anEventArray)->a_element[4] = @symbol(deleted);
  6456                     __ArrayInstPtr(anEventArray)->a_element[4] = @symbol(deleted);
  6456 		    break;
  6457                     break;
  6457 		default:
  6458                 default:
  6458 		    __ArrayInstPtr(anEventArray)->a_element[4] = __MKSMALLINT(pe->state);
  6459                     __ArrayInstPtr(anEventArray)->a_element[4] = __MKSMALLINT(pe->state);
  6459 		    break;
  6460                     break;
  6460 	    }
  6461             }
  6461 	    t = __MKUINT(pe->time); __ArrayInstPtr(anEventArray)->a_element[5] = t; __STORE(anEventArray, t);
  6462             t = __MKUINT(pe->time); __ArrayInstPtr(anEventArray)->a_element[5] = t; __STORE(anEventArray, t);
  6462 	    break;
  6463             break;
  6463 
  6464 
  6464 	case SelectionClear:
  6465         case SelectionClear:
  6465 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(selectionClear:selection:time:);
  6466             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(selectionClear:selection:time:);
  6466 	    __ArrayInstPtr(anEventArray)->a_element[3] = __MKATOMOBJ(sce->selection);
  6467             __ArrayInstPtr(anEventArray)->a_element[3] = __MKATOMOBJ(sce->selection);
  6467 	    t = __MKUINT(sce->time); __ArrayInstPtr(anEventArray)->a_element[4] = t; __STORE(anEventArray, t);
  6468             t = __MKUINT(sce->time); __ArrayInstPtr(anEventArray)->a_element[4] = t; __STORE(anEventArray, t);
  6468 	    break;
  6469             break;
  6469 
  6470 
  6470 	case SelectionRequest:
  6471         case SelectionRequest:
  6471 	    /*
  6472             /*
  6472 	     * someone wants the selection
  6473              * someone wants the selection
  6473 	     */
  6474              */
  6474 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(selectionRequest:requestor:selection:target:property:time:);
  6475             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(selectionRequest:requestor:selection:target:property:time:);
  6475 	    t = __MKEXTERNALADDRESS(ev.xselectionrequest.requestor); __ArrayInstPtr(anEventArray)->a_element[3] = t; __STORE(anEventArray, t);
  6476             t = __MKEXTERNALADDRESS(ev.xselectionrequest.requestor); __ArrayInstPtr(anEventArray)->a_element[3] = t; __STORE(anEventArray, t);
  6476 	    __ArrayInstPtr(anEventArray)->a_element[4] = __MKATOMOBJ(ev.xselectionrequest.selection);
  6477             __ArrayInstPtr(anEventArray)->a_element[4] = __MKATOMOBJ(ev.xselectionrequest.selection);
  6477 	    __ArrayInstPtr(anEventArray)->a_element[5] = __MKATOMOBJ(ev.xselectionrequest.target);
  6478             __ArrayInstPtr(anEventArray)->a_element[5] = __MKATOMOBJ(ev.xselectionrequest.target);
  6478 	    __ArrayInstPtr(anEventArray)->a_element[6] = __MKATOMOBJ(ev.xselectionrequest.property);
  6479             __ArrayInstPtr(anEventArray)->a_element[6] = __MKATOMOBJ(ev.xselectionrequest.property);
  6479 	    t = __MKUINT(ev.xselectionrequest.time); __ArrayInstPtr(anEventArray)->a_element[7] = t; __STORE(anEventArray, t);
  6480             t = __MKUINT(ev.xselectionrequest.time); __ArrayInstPtr(anEventArray)->a_element[7] = t; __STORE(anEventArray, t);
  6480 	    break;
  6481             break;
  6481 
  6482 
  6482 	case SelectionNotify:
  6483         case SelectionNotify:
  6483 	    /*
  6484             /*
  6484 	     * returned selection value (answer from SelectionRequest)
  6485              * returned selection value (answer from SelectionRequest)
  6485 	     */
  6486              */
  6486 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(selectionNotify:selection:target:property:requestor:time:);
  6487             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(selectionNotify:selection:target:property:requestor:time:);
  6487 	    __ArrayInstPtr(anEventArray)->a_element[3] = __MKATOMOBJ(ev.xselection.selection);
  6488             __ArrayInstPtr(anEventArray)->a_element[3] = __MKATOMOBJ(ev.xselection.selection);
  6488 	    __ArrayInstPtr(anEventArray)->a_element[4] = __MKATOMOBJ(ev.xselection.target);
  6489             __ArrayInstPtr(anEventArray)->a_element[4] = __MKATOMOBJ(ev.xselection.target);
  6489 	    __ArrayInstPtr(anEventArray)->a_element[5] = __MKATOMOBJ(ev.xselection.property);
  6490             __ArrayInstPtr(anEventArray)->a_element[5] = __MKATOMOBJ(ev.xselection.property);
  6490 	    t = __MKEXTERNALADDRESS(ev.xselection.requestor); __ArrayInstPtr(anEventArray)->a_element[6] = t; __STORE(anEventArray, t);
  6491             t = __MKEXTERNALADDRESS(ev.xselection.requestor); __ArrayInstPtr(anEventArray)->a_element[6] = t; __STORE(anEventArray, t);
  6491 	    t = __MKUINT(ev.xselection.time); __ArrayInstPtr(anEventArray)->a_element[7] = t; __STORE(anEventArray, t);
  6492             t = __MKUINT(ev.xselection.time); __ArrayInstPtr(anEventArray)->a_element[7] = t; __STORE(anEventArray, t);
  6492 	    break;
  6493             break;
  6493 
  6494 
  6494 	case ColormapNotify:
  6495         case ColormapNotify:
  6495 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(colormapNotify:state:);
  6496             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(colormapNotify:state:);
  6496 	    __ArrayInstPtr(anEventArray)->a_element[3] = cme->state == ColormapInstalled ? true : false;
  6497             __ArrayInstPtr(anEventArray)->a_element[3] = cme->state == ColormapInstalled ? true : false;
  6497 	    break;
  6498             break;
  6498 
  6499 
  6499 	case ClientMessage:
  6500         case ClientMessage:
  6500 	    if (ev.xclient.message_type == (int) __AtomVal(__INST(protocolsAtom))) {
  6501             if (ev.xclient.message_type == (int) __AtomVal(__INST(protocolsAtom))) {
  6501 		if ((ev.xclient.data.l[0] == (int) __AtomVal(__INST(quitAppAtom)))
  6502                 if ((ev.xclient.data.l[0] == (int) __AtomVal(__INST(quitAppAtom)))
  6502 		 || (ev.xclient.data.l[0] == (int) __AtomVal(__INST(deleteWindowAtom)))) {
  6503                  || (ev.xclient.data.l[0] == (int) __AtomVal(__INST(deleteWindowAtom)))) {
  6503 		    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(terminateView:);
  6504                     __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(terminateView:);
  6504 		    break;
  6505                     break;
  6505 		}
  6506                 }
  6506 		if (ev.xclient.data.l[0] == (int) __AtomVal(__INST(saveYourselfAtom))) {
  6507                 if (ev.xclient.data.l[0] == (int) __AtomVal(__INST(saveYourselfAtom))) {
  6507 		    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(saveAndTerminateView:);
  6508                     __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(saveAndTerminateView:);
  6508 		    break;
  6509                     break;
  6509 		}
  6510                 }
  6510 	    }
  6511             }
  6511 	    /*
  6512             /*
  6512 	     * any other client message
  6513              * any other client message
  6513 	     */
  6514              */
  6514 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(clientMessage:type:format:data:);
  6515             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(clientMessage:type:format:data:);
  6515 	    __ArrayInstPtr(anEventArray)->a_element[3] = __MKATOMOBJ(ev.xclient.message_type);
  6516             __ArrayInstPtr(anEventArray)->a_element[3] = __MKATOMOBJ(ev.xclient.message_type);
  6516 	    __ArrayInstPtr(anEventArray)->a_element[4] = __MKSMALLINT(ev.xclient.format);
  6517             __ArrayInstPtr(anEventArray)->a_element[4] = __MKSMALLINT(ev.xclient.format);
  6517 	    t = __MKBYTEARRAY(&ev.xclient.data, sizeof(ev.xclient.data)); __ArrayInstPtr(anEventArray)->a_element[5] = t; __STORE(anEventArray, t);
  6518             t = __MKBYTEARRAY(&ev.xclient.data, sizeof(ev.xclient.data)); __ArrayInstPtr(anEventArray)->a_element[5] = t; __STORE(anEventArray, t);
  6518 	    break;
  6519             break;
  6519 
  6520 
  6520 	case MappingNotify:
  6521         case MappingNotify:
  6521 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(mappingNotify:request:event:);
  6522             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(mappingNotify:request:event:);
  6522 	    switch(mape->request) {
  6523             switch(mape->request) {
  6523 		case MappingModifier:
  6524                 case MappingModifier:
  6524 		    arg = @symbol(mappingModifier);
  6525                     arg = @symbol(mappingModifier);
  6525 		    break;
  6526                     break;
  6526 		case MappingKeyboard:
  6527                 case MappingKeyboard:
  6527 		    arg = @symbol(mappingKeyboard);
  6528                     arg = @symbol(mappingKeyboard);
  6528 		    break;
  6529                     break;
  6529 		case MappingPointer:
  6530                 case MappingPointer:
  6530 		    arg = @symbol(mappingPointer);
  6531                     arg = @symbol(mappingPointer);
  6531 		    break;
  6532                     break;
  6532 		default:
  6533                 default:
  6533 		    arg = __MKSMALLINT(mape->request);
  6534                     arg = __MKSMALLINT(mape->request);
  6534 		    break;
  6535                     break;
  6535 	    }
  6536             }
  6536 	    __ArrayInstPtr(anEventArray)->a_element[3] = arg;
  6537             __ArrayInstPtr(anEventArray)->a_element[3] = arg;
  6537 	    t = __MKBYTEARRAY(&ev, sizeof(*mape)); __ArrayInstPtr(anEventArray)->a_element[4] = t;
  6538             t = __MKBYTEARRAY(&ev, sizeof(*mape)); __ArrayInstPtr(anEventArray)->a_element[4] = t;
  6538 	    __STORE(anEventArray, t);
  6539             __STORE(anEventArray, t);
  6539 	    break;
  6540             break;
  6540 
  6541 
  6541 	case KeymapNotify:
  6542         case KeymapNotify:
  6542 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(keymapNotify:);
  6543             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(keymapNotify:);
  6543 	    break;
  6544             break;
  6544 
  6545 
  6545 	case MapRequest:
  6546         case MapRequest:
  6546 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(mapRequest:);
  6547             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(mapRequest:);
  6547 	    break;
  6548             break;
  6548 
  6549 
  6549 	case ReparentNotify:
  6550         case ReparentNotify:
  6550 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(reparentedView:parentId:x:y:);
  6551             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(reparentedView:parentId:x:y:);
  6551 	    t = __MKEXTERNALADDRESS(rpe->parent);
  6552             t = __MKEXTERNALADDRESS(rpe->parent);
  6552 	    __ArrayInstPtr(anEventArray)->a_element[3] = t; __STORE(anEventArray, t);
  6553             __ArrayInstPtr(anEventArray)->a_element[3] = t; __STORE(anEventArray, t);
  6553 	    __ArrayInstPtr(anEventArray)->a_element[4] = __mkSmallInteger(rpe->x);
  6554             __ArrayInstPtr(anEventArray)->a_element[4] = __mkSmallInteger(rpe->x);
  6554 	    __ArrayInstPtr(anEventArray)->a_element[5] = __mkSmallInteger(rpe->y);
  6555             __ArrayInstPtr(anEventArray)->a_element[5] = __mkSmallInteger(rpe->y);
  6555 	    break;
  6556             break;
  6556 
  6557 
  6557 	default:
  6558         default:
  6558 	    __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(unknownX11Event);
  6559             __ArrayInstPtr(anEventArray)->a_element[2] = @symbol(unknownX11Event);
  6559 	    break;
  6560             break;
  6560     }
  6561     }
  6561 #undef ae
  6562 #undef ae
  6562 #undef ee
  6563 #undef ee
  6563 #undef ke
  6564 #undef ke
  6564 #undef be
  6565 #undef be
  6583 #undef cme
  6584 #undef cme
  6584 
  6585 
  6585 %}.
  6586 %}.
  6586 
  6587 
  6587     ^ true
  6588     ^ true
       
  6589 
       
  6590     "Modified: / 17-05-2018 / 18:26:09 / Stefan Vogel"
  6588 !
  6591 !
  6589 
  6592 
  6590 handleAllEvents
  6593 handleAllEvents
  6591     "from now on, handle any kind of event"
  6594     "from now on, handle any kind of event"
  6592 
  6595 
  8353     "grap the pointer - return true if ok"
  8356     "grap the pointer - return true if ok"
  8354 
  8357 
  8355     <context: #return>
  8358     <context: #return>
  8356 %{
  8359 %{
  8357 
  8360 
  8358     int result, ok, evMask;
  8361     int result, ok;
       
  8362     unsigned int evMask;
  8359     Window confineWin;
  8363     Window confineWin;
  8360     Cursor curs;
  8364     Cursor curs;
  8361     int pointer_mode, keyboard_mode;
  8365     int pointer_mode, keyboard_mode;
  8362 
  8366 
  8363     if (ISCONNECTED) {
  8367     if (ISCONNECTED) {
  8364 	if (__isExternalAddress(aWindowId)) {
  8368         if (__isExternalAddress(aWindowId)) {
  8365 	    if (__isExternalAddress(confineId))
  8369             if (__isExternalAddress(confineId))
  8366 		confineWin = __WindowVal(confineId);
  8370                 confineWin = __WindowVal(confineId);
  8367 	    else
  8371             else
  8368 		confineWin = (Window) None;
  8372                 confineWin = (Window) None;
  8369 
  8373 
  8370 	    if (__isExternalAddress(aCursorId))
  8374             if (__isExternalAddress(aCursorId))
  8371 		curs = __CursorVal(aCursorId);
  8375                 curs = __CursorVal(aCursorId);
  8372 	    else
  8376             else
  8373 		curs = (Cursor) None;
  8377                 curs = (Cursor) None;
  8374 
  8378 
  8375 	    if (pMode == @symbol(sync))
  8379             if (pMode == @symbol(sync))
  8376 		pointer_mode = GrabModeSync;
  8380                 pointer_mode = GrabModeSync;
  8377 	    else
  8381             else
  8378 		pointer_mode = GrabModeAsync;
  8382                 pointer_mode = GrabModeAsync;
  8379 
  8383 
  8380 	    if (kMode == @symbol(sync))
  8384             if (kMode == @symbol(sync))
  8381 		keyboard_mode = GrabModeSync;
  8385                 keyboard_mode = GrabModeSync;
  8382 	    else
  8386             else
  8383 		keyboard_mode = GrabModeAsync;
  8387                 keyboard_mode = GrabModeAsync;
  8384 
  8388 
  8385 	    if (__isSmallInteger(eventMask))
  8389             if (__isSmallInteger(eventMask))
  8386 		evMask = __intVal(eventMask);
  8390                 evMask = __intVal(eventMask);
  8387 	    else
  8391             else
  8388 		evMask = ButtonPressMask | ButtonMotionMask | PointerMotionMask | ButtonReleaseMask;
  8392                 evMask = ButtonPressMask | ButtonMotionMask | PointerMotionMask | ButtonReleaseMask;
  8389 
  8393 
  8390 
  8394 
  8391 /*
  8395 /*
  8392 	    ENTER_XLIB();
  8396             ENTER_XLIB();
  8393 */
  8397 */
  8394 	    result = XGrabPointer(myDpy,
  8398             result = XGrabPointer(myDpy,
  8395 				  __WindowVal(aWindowId),
  8399                                   __WindowVal(aWindowId),
  8396 				  False,
  8400                                   False,
  8397 				  evMask,
  8401                                   evMask,
  8398 				  pointer_mode, keyboard_mode,
  8402                                   pointer_mode, keyboard_mode,
  8399 				  confineWin,
  8403                                   confineWin,
  8400 				  curs,
  8404                                   curs,
  8401 				  CurrentTime);
  8405                                   CurrentTime);
  8402 /*
  8406 /*
  8403 	    LEAVE_XLIB();
  8407             LEAVE_XLIB();
  8404 */
  8408 */
  8405 
  8409 
  8406 
  8410 
  8407 	    ok = 0;
  8411             ok = 0;
  8408 	    switch (result) {
  8412             switch (result) {
  8409 		case AlreadyGrabbed:
  8413                 case AlreadyGrabbed:
  8410 		    if (@global(ErrorPrinting) == true) {
  8414                     if (@global(ErrorPrinting) == true) {
  8411 			console_fprintf(stderr, "XWorkstation [warning]: grab pointer: AlreadyGrabbed\n");
  8415                         console_fprintf(stderr, "XWorkstation [warning]: grab pointer: AlreadyGrabbed\n");
  8412 		    }
  8416                     }
  8413 		    break;
  8417                     break;
  8414 		case GrabNotViewable:
  8418                 case GrabNotViewable:
  8415 		    if (@global(ErrorPrinting) == true) {
  8419                     if (@global(ErrorPrinting) == true) {
  8416 			console_fprintf(stderr, "XWorkstation [warning]: grab pointer: GrabNotViewable\n");
  8420                         console_fprintf(stderr, "XWorkstation [warning]: grab pointer: GrabNotViewable\n");
  8417 		    }
  8421                     }
  8418 		    break;
  8422                     break;
  8419 		case GrabInvalidTime:
  8423                 case GrabInvalidTime:
  8420 		    if (@global(ErrorPrinting) == true) {
  8424                     if (@global(ErrorPrinting) == true) {
  8421 			console_fprintf(stderr, "XWorkstation [warning]: grab pointer: InvalidTime\n");
  8425                         console_fprintf(stderr, "XWorkstation [warning]: grab pointer: InvalidTime\n");
  8422 		    }
  8426                     }
  8423 		    break;
  8427                     break;
  8424 		case GrabFrozen:
  8428                 case GrabFrozen:
  8425 		    if (@global(ErrorPrinting) == true) {
  8429                     if (@global(ErrorPrinting) == true) {
  8426 			console_fprintf(stderr, "XWorkstation [warning]: grab pointer: Frozen\n");
  8430                         console_fprintf(stderr, "XWorkstation [warning]: grab pointer: Frozen\n");
  8427 		    }
  8431                     }
  8428 		    break;
  8432                     break;
  8429 		default:
  8433                 default:
  8430 		    ok = 1;
  8434                     ok = 1;
  8431 		    break;
  8435                     break;
  8432 	    }
  8436             }
  8433 
  8437 
  8434 	    if (! ok) {
  8438             if (! ok) {
  8435 /*
  8439 /*
  8436 		ENTER_XLIB();
  8440                 ENTER_XLIB();
  8437 */
  8441 */
  8438 		XUngrabPointer(myDpy, CurrentTime);
  8442                 XUngrabPointer(myDpy, CurrentTime);
  8439 /*
  8443 /*
  8440 		LEAVE_XLIB();
  8444                 LEAVE_XLIB();
  8441 */
  8445 */
  8442 		RETURN (false);
  8446                 RETURN (false);
  8443 	    }
  8447             }
  8444 	    RETURN ( true );
  8448             RETURN ( true );
  8445 	}
  8449         }
  8446     }
  8450     }
  8447 %}.
  8451 %}.
  8448     self primitiveFailedOrClosedConnection.
  8452     self primitiveFailedOrClosedConnection.
  8449     ^ false
  8453     ^ false
       
  8454 
       
  8455     "Modified: / 17-05-2018 / 18:27:33 / Stefan Vogel"
  8450 !
  8456 !
  8451 
  8457 
  8452 grabPointerIn:aWindowId withCursor:aCursorId pointerMode:pMode keyboardMode:kMode confineTo:confineId
  8458 grabPointerIn:aWindowId withCursor:aCursorId pointerMode:pMode keyboardMode:kMode confineTo:confineId
  8453     "grap the pointer - return true if ok"
  8459     "grap the pointer - return true if ok"
  8454 
  8460 
  8539     "
  8545     "
  8540 
  8546 
  8541     <context: #return>
  8547     <context: #return>
  8542 
  8548 
  8543 %{
  8549 %{
  8544     int modifierMask = AnyModifier;
  8550     unsigned int modifierMask = AnyModifier;
  8545     KeySym keySym, *syms;
  8551     KeySym keySym, *syms;
  8546 
  8552 
  8547     if (__isStringLike(keySymCodeOrChar)) {
  8553     if (__isStringLike(keySymCodeOrChar)) {
  8548 	keySym = XStringToKeysym(__stringVal(keySymCodeOrChar));
  8554         keySym = XStringToKeysym(__stringVal(keySymCodeOrChar));
  8549     } else {
  8555     } else {
  8550 	if (__isCharacter(keySymCodeOrChar)) {
  8556         if (__isCharacter(keySymCodeOrChar)) {
  8551 	    char s[2];
  8557             char s[2];
  8552 
  8558 
  8553 	    s[0] = __intVal(__characterVal(keySymCodeOrChar));
  8559             s[0] = __intVal(__characterVal(keySymCodeOrChar));
  8554 	    s[1] = '\0';
  8560             s[1] = '\0';
  8555 	    keySym = XStringToKeysym(s);
  8561             keySym = XStringToKeysym(s);
  8556 	} else {
  8562         } else {
  8557 	    if (__isSmallInteger(keySymCodeOrChar)) {
  8563             if (__isSmallInteger(keySymCodeOrChar)) {
  8558 		keySym = (KeySym) __intVal(keySymCodeOrChar);
  8564                 keySym = (KeySym) __intVal(keySymCodeOrChar);
  8559 	    } else {
  8565             } else {
  8560 		goto notOK;
  8566                 goto notOK;
  8561 	    }
  8567             }
  8562 	}
  8568         }
  8563     }
  8569     }
  8564 
  8570 
  8565     if (modifierMaskOrNil != nil) {
  8571     if (modifierMaskOrNil != nil) {
  8566 	if (__isSmallInteger(modifierMaskOrNil)) {
  8572         if (__isSmallInteger(modifierMaskOrNil)) {
  8567 	    modifierMask = __intVal(modifierMaskOrNil);
  8573             modifierMask = __intVal(modifierMaskOrNil);
  8568 	} else {
  8574         } else {
  8569 	    goto notOK;
  8575             goto notOK;
  8570 	}
  8576         }
  8571     }
  8577     }
  8572 
  8578 
  8573     if (ISCONNECTED) {
  8579     if (ISCONNECTED) {
  8574 	Display *dpy;
  8580         Display *dpy;
  8575 	Window window;
  8581         Window window;
  8576 	int keyCode;
  8582         int keyCode;
  8577 	int result;
  8583         int result;
  8578 	int mKbd, mPtr;
  8584         int mKbd, mPtr;
  8579 
  8585 
  8580 	mKbd = modeKbd == @symbol(GrabModeAsync) ? GrabModeAsync :GrabModeSync;
  8586         mKbd = modeKbd == @symbol(GrabModeAsync) ? GrabModeAsync :GrabModeSync;
  8581 	mPtr = modePtr == @symbol(GrabModeAsync) ? GrabModeAsync :GrabModeSync;
  8587         mPtr = modePtr == @symbol(GrabModeAsync) ? GrabModeAsync :GrabModeSync;
  8582 
  8588 
  8583 	dpy = myDpy;
  8589         dpy = myDpy;
  8584 	keyCode = XKeysymToKeycode(dpy, keySym);
  8590         keyCode = XKeysymToKeycode(dpy, keySym);
  8585 	if (__isExternalAddress(aWindowIdOrNil)) {
  8591         if (__isExternalAddress(aWindowIdOrNil)) {
  8586 	    window = __WindowVal(aWindowIdOrNil);
  8592             window = __WindowVal(aWindowIdOrNil);
  8587 	} else {
  8593         } else {
  8588 	    int screen;
  8594             int screen;
  8589 
  8595 
  8590 	    screen = DefaultScreen(dpy);
  8596             screen = DefaultScreen(dpy);
  8591 	    window = RootWindow(dpy, screen);
  8597             window = RootWindow(dpy, screen);
  8592 	}
  8598         }
  8593 	ENTER_XLIB();
  8599         ENTER_XLIB();
  8594 
  8600 
  8595 	result = XGrabKey (dpy,
  8601         result = XGrabKey (dpy,
  8596 	    keyCode, modifierMask, window,
  8602             keyCode, modifierMask, window,
  8597 	    False, mKbd, mPtr );
  8603             False, mKbd, mPtr );
  8598 
  8604 
  8599 	XSync(dpy, True);
  8605         XSync(dpy, True);
  8600 	XFlush(dpy);
  8606         XFlush(dpy);
  8601 
  8607 
  8602 	LEAVE_XLIB();
  8608         LEAVE_XLIB();
  8603 
  8609 
  8604 	if (result != Success) {
  8610         if (result != Success) {
  8605 	    if (result == BadAccess) {
  8611             if (result == BadAccess) {
  8606 		__INST(lastError) = @symbol(badAccess);
  8612                 __INST(lastError) = @symbol(badAccess);
  8607 	    } else {
  8613             } else {
  8608 		__INST(lastError) = @symbol(other);
  8614                 __INST(lastError) = @symbol(other);
  8609 	    }
  8615             }
  8610 	    RETURN (false);
  8616             RETURN (false);
  8611 	}
  8617         }
  8612 	RETURN (true);
  8618         RETURN (true);
  8613     }
  8619     }
  8614   notOK: ;
  8620   notOK: ;
  8615 %}.
  8621 %}.
  8616     self primitiveFailedOrClosedConnection
  8622     self primitiveFailedOrClosedConnection
  8617 
  8623 
  8618     "Modified: / 03-05-2018 / 16:27:51 / stefan"
  8624     "Modified: / 03-05-2018 / 16:27:51 / stefan"
       
  8625     "Modified: / 17-05-2018 / 18:29:18 / Stefan Vogel"
  8619 !
  8626 !
  8620 
  8627 
  8621 grabKey:keySymCodeOrChar modifier:modifierMaskOrNil window:aWindowIdOrNil
  8628 grabKey:keySymCodeOrChar modifier:modifierMaskOrNil window:aWindowIdOrNil
  8622     "grab a single key either for an individual window
  8629     "grab a single key either for an individual window
  8623      or the whole screen (if aWindowIdOrNil is nil).
  8630      or the whole screen (if aWindowIdOrNil is nil).