--- a/XWorkstation.st Fri Jan 24 17:33:12 2003 +0100
+++ b/XWorkstation.st Fri Feb 07 13:09:30 2003 +0100
@@ -4729,13 +4729,13 @@
decomposeEventBuffer:aByteArray into:eventArr
"extracet event fields and place them into an array:
the fields are:
- 1: windowID
- 2: eventType-ID
- 3: eventTypeSymbol
-
- 4.. args
- "
-%{
+ 1: windowID
+ 2: eventType-ID
+ 3: eventTypeSymbol
+
+ 4.. args
+ "
+%{ /* UNLIMITEDSTACK */
# define ANYBUTTON (Button1MotionMask | Button2MotionMask | Button3MotionMask)
OBJ eB;
@@ -4773,392 +4773,392 @@
eB = aByteArray;
if (__isByteArray(eB)) {
- ev = (XEvent *)(__ByteArrayInstPtr(eB)->ba_element);
+ ev = (XEvent *)(__ByteArrayInstPtr(eB)->ba_element);
} else {
- fprintf(stderr, "XWorkstation: no/bad eventBuffer [%d]\n", __LINE__);
- RETURN (false);
+ fprintf(stderr, "XWorkstation: no/bad eventBuffer [%d]\n", __LINE__);
+ RETURN (false);
}
if (!__isArray(eventArr)) {
- fprintf(stderr, "XWorkstation: bad argument [%d]\n", __LINE__);
- RETURN (false);
+ fprintf(stderr, "XWorkstation: bad argument [%d]\n", __LINE__);
+ RETURN (false);
}
if (__arraySize(eventArr) < 11) {
- fprintf(stderr, "XWorkstation: bad argument [%d]\n", __LINE__);
- RETURN (false);
+ fprintf(stderr, "XWorkstation: bad argument [%d]\n", __LINE__);
+ RETURN (false);
}
if (((t = __INST(lastId)) != nil)
- && __isExternalAddress(t)
- && (__WindowVal(t) == ae->window)) {
- windowID = t;
+ && __isExternalAddress(t)
+ && (__WindowVal(t) == ae->window)) {
+ windowID = t;
} else {
- windowID = __MKEXTERNALADDRESS(ae->window);
+ windowID = __MKEXTERNALADDRESS(ae->window);
}
__ArrayInstPtr(eventArr)->a_element[0] = windowID; __STORE(eventArr, windowID);
__ArrayInstPtr(eventArr)->a_element[1] = __MKSMALLINT(ev->type);
switch (ev->type) {
- case KeyRelease:
- sym = @symbol(keyRelease:key:code:state:x:y:rootX:rootY:time:);
- goto keyPressAndRelease;
-
- case KeyPress:
- sym = @symbol(keyPress:key:code:state:x:y:rootX:rootY:time:);
- /* FALL INTO */
-
- keyPressAndRelease:
- arg = nil;
- nchars = XLookupString(ke, (char *)buffer, sizeof(buffer), &keySym, NULL);
- if (nchars
- && (((buffer[0] >= ' ') && (buffer[0] <= '~'))
- || (buffer[0] >= 0x80))) {
- arg = _MKCHARACTER(buffer[0])/* *_CharacterTable[buffer[0]] */;
- keySymString = NULL;
- } else {
- keySymString = XKeysymToString(keySym);
- if (keySymString) {
- arg = __MKSTRING(keySymString);
- } else {
- arg = nil;
- }
- }
+ case KeyRelease:
+ sym = @symbol(keyRelease:key:code:state:x:y:rootX:rootY:time:);
+ goto keyPressAndRelease;
+
+ case KeyPress:
+ sym = @symbol(keyPress:key:code:state:x:y:rootX:rootY:time:);
+ /* FALL INTO */
+
+ keyPressAndRelease:
+ arg = nil;
+ nchars = XLookupString(ke, (char *)buffer, sizeof(buffer), &keySym, NULL);
+ if (nchars
+ && (((buffer[0] >= ' ') && (buffer[0] <= '~'))
+ || (buffer[0] >= 0x80))) {
+ arg = _MKCHARACTER(buffer[0])/* *_CharacterTable[buffer[0]] */;
+ keySymString = NULL;
+ } else {
+ keySymString = XKeysymToString(keySym);
+ if (keySymString) {
+ arg = __MKSTRING(keySymString);
+ } else {
+ arg = nil;
+ }
+ }
#ifdef IGNORE_UNKNOWN_KEYCODES
- if (arg == nil) {
- /* happens sometimes (alt-graph on sun has no keysym) */
- RETURN (false);
- }
-#endif
- __ArrayInstPtr(eventArr)->a_element[2] = sym;
-
- __ArrayInstPtr(eventArr)->a_element[3] = arg; __STORE(eventArr, arg);
- __ArrayInstPtr(eventArr)->a_element[4] = t = __MKUINT(ke->keycode); __STORE(eventArr, t);
- __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(ke->state);
- __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(ke->x);
- __ArrayInstPtr(eventArr)->a_element[7] = __mkSmallInteger(ke->y);
- __ArrayInstPtr(eventArr)->a_element[8] = __mkSmallInteger(ke->x_root);
- __ArrayInstPtr(eventArr)->a_element[9] = __mkSmallInteger(ke->y_root);
- __ArrayInstPtr(eventArr)->a_element[10] = t = __MKUINT(ke->time); __STORE(eventArr, t);
- RETURN (true);
-
- case ButtonPress:
- sym = @symbol(buttonPress:button:state:x:y:rootX:rootY:time:);
- goto buttonPressAndRelease;
-
- case ButtonRelease:
- sym = @symbol(buttonRelease:button:state:x:y:rootX:rootY:time:);
- /* fall into */
-
- buttonPressAndRelease:
- __ArrayInstPtr(eventArr)->a_element[2] = sym;
- __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(be->button);
- __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(ke->state);
- __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(be->x);
- __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(be->y);
- __ArrayInstPtr(eventArr)->a_element[7] = __mkSmallInteger(be->x_root);
- __ArrayInstPtr(eventArr)->a_element[8] = __mkSmallInteger(be->y_root);
- __ArrayInstPtr(eventArr)->a_element[9] = t = __MKUINT(be->time); __STORE(eventArr, t);
- RETURN (true);
-
- case MotionNotify:
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(buttonMotion:state:x:y:rootX:rootY:time:);
-
- __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(me->state);
- __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(me->x);
- __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(me->y);
- __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(me->x_root);
- __ArrayInstPtr(eventArr)->a_element[7] = __mkSmallInteger(me->y_root);
- __ArrayInstPtr(eventArr)->a_element[8] = t = __MKUINT(me->time); __STORE(eventArr, t);
- RETURN (true);
-
- case FocusIn:
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(focusIn:mode:detail:);
- goto focusInOut;
-
- case FocusOut:
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(focusOut:mode:detail:);
- /* fall into */
-
- focusInOut:
- __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(fe->mode);
- __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(fe->detail);
- RETURN (true);
-
-
- case EnterNotify:
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(pointerEnter:x:y:rootX:rootY:state:mode:detail:time:);
- goto enterLeave;
-
- case LeaveNotify:
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(pointerLeave:x:y:rootX:rootY:state:mode:detail:time:);
- /* fall into */
-
- enterLeave:
- __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(ele->x);
- __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(ele->y);
- __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(ele->x_root);
- __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(ele->y_root);
- __ArrayInstPtr(eventArr)->a_element[7] = __mkSmallInteger(ele->state);
- __ArrayInstPtr(eventArr)->a_element[8] = __mkSmallInteger(ele->mode);
- __ArrayInstPtr(eventArr)->a_element[9] = __mkSmallInteger(ele->detail);
- __ArrayInstPtr(eventArr)->a_element[10] = t = __MKUINT(ele->time); __STORE(eventArr, t);
- RETURN (true);
-
- case Expose:
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(expose:x:y:width:height:count:);
- goto expose;
-
- case GraphicsExpose:
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(graphicsExpose:x:y:width:height:count:);
- /* fall into */
-
- expose:
- __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(ee->x);
- __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(ee->y);
- __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(ee->width);
- __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(ee->height);
- __ArrayInstPtr(eventArr)->a_element[7] = __mkSmallInteger(ee->count);
- RETURN (true);
-
- case NoExpose:
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(noExposeView:);
- RETURN (true);
-
- case VisibilityNotify:
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(visibilityNotify:state:);
- switch (ve->state) {
- case VisibilityUnobscured:
- __ArrayInstPtr(eventArr)->a_element[3] = @symbol(unobscured);
- break;
- case VisibilityPartiallyObscured:
- __ArrayInstPtr(eventArr)->a_element[3] = @symbol(partiallyObscured);
- break;
- case VisibilityFullyObscured:
- __ArrayInstPtr(eventArr)->a_element[3] = @symbol(fullyObscured);
- break;
- default:
- __ArrayInstPtr(eventArr)->a_element[3] = __MKSMALLINT(ve->state);
- break;
- }
- RETURN (true);
-
- case CreateNotify:
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(createWindow:x:y:width:height:);
- __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(cre->x);
- __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(cre->y);
- __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(cre->width);
- __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(cre->height);
- RETURN (true);
-
- case DestroyNotify:
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(destroyedView:);
- RETURN (true);
-
- case UnmapNotify:
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(unmappedView:);
- RETURN (true);
-
- case MapNotify:
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(mappedView:);
- RETURN (true);
-
- case ConfigureNotify:
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(configure:x:y:width:height:above:);
- __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(ce->x);
- __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(ce->y);
- __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(ce->width);
- __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(ce->height);
- __ArrayInstPtr(eventArr)->a_element[7] = nil;
- if (ce->above != None) {
- __ArrayInstPtr(eventArr)->a_element[7] = t = __MKEXTERNALADDRESS(ce->above); __STORE(eventArr, t);
- }
- RETURN (true);
-
- case GravityNotify:
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(gravityNotify:x:y:);
- __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(gre->x);
- __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(gre->y);
- RETURN (true);
- break;
-
- case ResizeRequest:
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(resizeRequest:width:height:);
- __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(rr->width);
- __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(rr->height);
- RETURN (true);
- break;
-
- case ConfigureRequest:
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(configureRequest:x:y:width:height:above:detail:);
- __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(cr->x);
- __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(cr->y);
- __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(cr->width);
- __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(cr->height);
- __ArrayInstPtr(eventArr)->a_element[7] = nil;
- if (cr->above != None) {
- __ArrayInstPtr(eventArr)->a_element[7] = t = __MKEXTERNALADDRESS(cr->above); __STORE(eventArr, t);
- }
- switch (cr->detail) {
- case Above:
- __ArrayInstPtr(eventArr)->a_element[8] = @symbol(above);
- break;
- case Below:
- __ArrayInstPtr(eventArr)->a_element[8] = @symbol(below);
- break;
- case TopIf:
- __ArrayInstPtr(eventArr)->a_element[8] = @symbol(topIf);
- break;
- case BottomIf:
- __ArrayInstPtr(eventArr)->a_element[8] = @symbol(bottomIf);
- break;
- case Opposite:
- __ArrayInstPtr(eventArr)->a_element[8] = @symbol(opposite);
- break;
- default:
- __ArrayInstPtr(eventArr)->a_element[8] = __MKSMALLINT(cr->detail);
- break;
- }
- RETURN (true);
- break;
-
- case CirculateNotify:
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(circulateNotify:place:);
- goto circulate;
-
- case CirculateRequest:
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(circulateRequest:place:);
- /* fall into */
- circulate:
- switch (cie->place) {
- case PlaceOnTop:
- __ArrayInstPtr(eventArr)->a_element[3] = @symbol(placeOnTop);
- break;
- case PlaceOnBottom:
- __ArrayInstPtr(eventArr)->a_element[3] = @symbol(placeOnBottom);
- break;
- default:
- __ArrayInstPtr(eventArr)->a_element[3] = __MKSMALLINT(cie->place);
- break;
- }
- RETURN (true);
- break;
-
- case PropertyNotify:
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(propertyChange:atom:state:time:);
- __ArrayInstPtr(eventArr)->a_element[3] = __MKATOMOBJ(pe->atom);
- switch (pe->state) {
- case PropertyNewValue:
- __ArrayInstPtr(eventArr)->a_element[4] = @symbol(newValue);
- break;
- case PropertyDelete:
- __ArrayInstPtr(eventArr)->a_element[4] = @symbol(deleted);
- break;
- default:
- __ArrayInstPtr(eventArr)->a_element[4] = __MKSMALLINT(pe->state);
- break;
- }
- __ArrayInstPtr(eventArr)->a_element[5] = t = __MKUINT(pe->time); __STORE(eventArr, t);
- RETURN (true);
- break;
-
- case SelectionClear:
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(selectionClear:atom:time:);
- __ArrayInstPtr(eventArr)->a_element[3] = __MKATOMOBJ(sce->selection);
- __ArrayInstPtr(eventArr)->a_element[4] = t = __MKUINT(sce->time); __STORE(eventArr, t);
- RETURN (true);
- break;
-
- case SelectionRequest:
- /*
- * someone wants the selection
- */
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(selectionRequest:requestor:selection:target:property:time:);
- __ArrayInstPtr(eventArr)->a_element[3] = t = __MKEXTERNALADDRESS(ev->xselectionrequest.requestor); __STORE(eventArr, t);
- __ArrayInstPtr(eventArr)->a_element[4] = __MKATOMOBJ(ev->xselectionrequest.selection);
- __ArrayInstPtr(eventArr)->a_element[5] = __MKATOMOBJ(ev->xselectionrequest.target);
- __ArrayInstPtr(eventArr)->a_element[6] = __MKATOMOBJ(ev->xselectionrequest.property);
- __ArrayInstPtr(eventArr)->a_element[7] = t = __MKUINT(ev->xselectionrequest.time); __STORE(eventArr, t);
- RETURN (true);
-
- case SelectionNotify:
- /*
- * returned selection value (answer from SelectionRequest)
- */
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(selectionNotify:selection:target:property:requestor:time:);
- __ArrayInstPtr(eventArr)->a_element[3] = __MKATOMOBJ(ev->xselection.selection);
- __ArrayInstPtr(eventArr)->a_element[4] = __MKATOMOBJ(ev->xselection.target);
- __ArrayInstPtr(eventArr)->a_element[5] = __MKATOMOBJ(ev->xselection.property);
- __ArrayInstPtr(eventArr)->a_element[6] = t = __MKEXTERNALADDRESS(ev->xselection.requestor); __STORE(eventArr, t);
- __ArrayInstPtr(eventArr)->a_element[7] = t = __MKUINT(ev->xselection.time); __STORE(eventArr, t);
-
- RETURN (true);
-
- case ColormapNotify:
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(colormapNotify:state:);
- __ArrayInstPtr(eventArr)->a_element[3] = cme->state == ColormapInstalled ? true : false;
- RETURN (true);
- break;
-
- case ClientMessage:
- if (ev->xclient.message_type == (int) __AtomVal(__INST(protocolsAtom))) {
- if ((ev->xclient.data.l[0] == (int) __AtomVal(__INST(quitAppAtom)))
- || (ev->xclient.data.l[0] == (int) __AtomVal(__INST(deleteWindowAtom)))) {
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(terminateView:);
- RETURN (true);
- }
- if (ev->xclient.data.l[0] == (int) __AtomVal(__INST(saveYourselfAtom))) {
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(saveAndTerminateView:);
- RETURN (true);
- }
- }
- /*
- * any other client message
- */
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(clientMessage:type:format:data:);
- __ArrayInstPtr(eventArr)->a_element[3] = __MKATOMOBJ(ev->xclient.message_type);
- __ArrayInstPtr(eventArr)->a_element[4] = __MKSMALLINT(ev->xclient.format);
- __ArrayInstPtr(eventArr)->a_element[5] = t = __MKBYTEARRAY(ev->xclient.data, sizeof(ev->xclient.data)); __STORE(eventArr, t);
- RETURN (true);
- break;
-
- case MappingNotify:
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(mappingNotify:request:event:);
- switch(mape->request) {
- case MappingModifier:
- arg = @symbol(mappingModifier);
- break;
- case MappingKeyboard:
- arg = @symbol(mappingKeyboard);
- break;
- case MappingPointer:
- arg = @symbol(mappingPointer);
- break;
- default:
- arg = __MKSMALLINT(mape->request);
- break;
- }
- __ArrayInstPtr(eventArr)->a_element[3] = arg;
- __ArrayInstPtr(eventArr)->a_element[4] = t = __MKBYTEARRAY(ev, sizeof(*mape));
- __STORE(eventArr, t);
- RETURN (true);
-
- case KeymapNotify:
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(keymapNotify:);
- RETURN (true);
- break;
-
- case MapRequest:
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(mapRequest:);
- RETURN (true);
-
- case ReparentNotify:
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(reparentedView:);
- break;
-
- default:
- __ArrayInstPtr(eventArr)->a_element[2] = @symbol(unknownX11Event);
- break;
+ if (arg == nil) {
+ /* happens sometimes (alt-graph on sun has no keysym) */
+ RETURN (false);
+ }
+#endif
+ __ArrayInstPtr(eventArr)->a_element[2] = sym;
+
+ __ArrayInstPtr(eventArr)->a_element[3] = arg; __STORE(eventArr, arg);
+ __ArrayInstPtr(eventArr)->a_element[4] = t = __MKUINT(ke->keycode); __STORE(eventArr, t);
+ __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(ke->state);
+ __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(ke->x);
+ __ArrayInstPtr(eventArr)->a_element[7] = __mkSmallInteger(ke->y);
+ __ArrayInstPtr(eventArr)->a_element[8] = __mkSmallInteger(ke->x_root);
+ __ArrayInstPtr(eventArr)->a_element[9] = __mkSmallInteger(ke->y_root);
+ __ArrayInstPtr(eventArr)->a_element[10] = t = __MKUINT(ke->time); __STORE(eventArr, t);
+ RETURN (true);
+
+ case ButtonPress:
+ sym = @symbol(buttonPress:button:state:x:y:rootX:rootY:time:);
+ goto buttonPressAndRelease;
+
+ case ButtonRelease:
+ sym = @symbol(buttonRelease:button:state:x:y:rootX:rootY:time:);
+ /* fall into */
+
+ buttonPressAndRelease:
+ __ArrayInstPtr(eventArr)->a_element[2] = sym;
+ __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(be->button);
+ __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(ke->state);
+ __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(be->x);
+ __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(be->y);
+ __ArrayInstPtr(eventArr)->a_element[7] = __mkSmallInteger(be->x_root);
+ __ArrayInstPtr(eventArr)->a_element[8] = __mkSmallInteger(be->y_root);
+ __ArrayInstPtr(eventArr)->a_element[9] = t = __MKUINT(be->time); __STORE(eventArr, t);
+ RETURN (true);
+
+ case MotionNotify:
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(buttonMotion:state:x:y:rootX:rootY:time:);
+
+ __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(me->state);
+ __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(me->x);
+ __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(me->y);
+ __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(me->x_root);
+ __ArrayInstPtr(eventArr)->a_element[7] = __mkSmallInteger(me->y_root);
+ __ArrayInstPtr(eventArr)->a_element[8] = t = __MKUINT(me->time); __STORE(eventArr, t);
+ RETURN (true);
+
+ case FocusIn:
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(focusIn:mode:detail:);
+ goto focusInOut;
+
+ case FocusOut:
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(focusOut:mode:detail:);
+ /* fall into */
+
+ focusInOut:
+ __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(fe->mode);
+ __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(fe->detail);
+ RETURN (true);
+
+
+ case EnterNotify:
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(pointerEnter:x:y:rootX:rootY:state:mode:detail:time:);
+ goto enterLeave;
+
+ case LeaveNotify:
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(pointerLeave:x:y:rootX:rootY:state:mode:detail:time:);
+ /* fall into */
+
+ enterLeave:
+ __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(ele->x);
+ __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(ele->y);
+ __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(ele->x_root);
+ __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(ele->y_root);
+ __ArrayInstPtr(eventArr)->a_element[7] = __mkSmallInteger(ele->state);
+ __ArrayInstPtr(eventArr)->a_element[8] = __mkSmallInteger(ele->mode);
+ __ArrayInstPtr(eventArr)->a_element[9] = __mkSmallInteger(ele->detail);
+ __ArrayInstPtr(eventArr)->a_element[10] = t = __MKUINT(ele->time); __STORE(eventArr, t);
+ RETURN (true);
+
+ case Expose:
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(expose:x:y:width:height:count:);
+ goto expose;
+
+ case GraphicsExpose:
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(graphicsExpose:x:y:width:height:count:);
+ /* fall into */
+
+ expose:
+ __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(ee->x);
+ __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(ee->y);
+ __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(ee->width);
+ __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(ee->height);
+ __ArrayInstPtr(eventArr)->a_element[7] = __mkSmallInteger(ee->count);
+ RETURN (true);
+
+ case NoExpose:
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(noExposeView:);
+ RETURN (true);
+
+ case VisibilityNotify:
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(visibilityNotify:state:);
+ switch (ve->state) {
+ case VisibilityUnobscured:
+ __ArrayInstPtr(eventArr)->a_element[3] = @symbol(unobscured);
+ break;
+ case VisibilityPartiallyObscured:
+ __ArrayInstPtr(eventArr)->a_element[3] = @symbol(partiallyObscured);
+ break;
+ case VisibilityFullyObscured:
+ __ArrayInstPtr(eventArr)->a_element[3] = @symbol(fullyObscured);
+ break;
+ default:
+ __ArrayInstPtr(eventArr)->a_element[3] = __MKSMALLINT(ve->state);
+ break;
+ }
+ RETURN (true);
+
+ case CreateNotify:
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(createWindow:x:y:width:height:);
+ __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(cre->x);
+ __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(cre->y);
+ __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(cre->width);
+ __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(cre->height);
+ RETURN (true);
+
+ case DestroyNotify:
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(destroyedView:);
+ RETURN (true);
+
+ case UnmapNotify:
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(unmappedView:);
+ RETURN (true);
+
+ case MapNotify:
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(mappedView:);
+ RETURN (true);
+
+ case ConfigureNotify:
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(configure:x:y:width:height:above:);
+ __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(ce->x);
+ __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(ce->y);
+ __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(ce->width);
+ __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(ce->height);
+ __ArrayInstPtr(eventArr)->a_element[7] = nil;
+ if (ce->above != None) {
+ __ArrayInstPtr(eventArr)->a_element[7] = t = __MKEXTERNALADDRESS(ce->above); __STORE(eventArr, t);
+ }
+ RETURN (true);
+
+ case GravityNotify:
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(gravityNotify:x:y:);
+ __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(gre->x);
+ __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(gre->y);
+ RETURN (true);
+ break;
+
+ case ResizeRequest:
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(resizeRequest:width:height:);
+ __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(rr->width);
+ __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(rr->height);
+ RETURN (true);
+ break;
+
+ case ConfigureRequest:
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(configureRequest:x:y:width:height:above:detail:);
+ __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(cr->x);
+ __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(cr->y);
+ __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(cr->width);
+ __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(cr->height);
+ __ArrayInstPtr(eventArr)->a_element[7] = nil;
+ if (cr->above != None) {
+ __ArrayInstPtr(eventArr)->a_element[7] = t = __MKEXTERNALADDRESS(cr->above); __STORE(eventArr, t);
+ }
+ switch (cr->detail) {
+ case Above:
+ __ArrayInstPtr(eventArr)->a_element[8] = @symbol(above);
+ break;
+ case Below:
+ __ArrayInstPtr(eventArr)->a_element[8] = @symbol(below);
+ break;
+ case TopIf:
+ __ArrayInstPtr(eventArr)->a_element[8] = @symbol(topIf);
+ break;
+ case BottomIf:
+ __ArrayInstPtr(eventArr)->a_element[8] = @symbol(bottomIf);
+ break;
+ case Opposite:
+ __ArrayInstPtr(eventArr)->a_element[8] = @symbol(opposite);
+ break;
+ default:
+ __ArrayInstPtr(eventArr)->a_element[8] = __MKSMALLINT(cr->detail);
+ break;
+ }
+ RETURN (true);
+ break;
+
+ case CirculateNotify:
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(circulateNotify:place:);
+ goto circulate;
+
+ case CirculateRequest:
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(circulateRequest:place:);
+ /* fall into */
+ circulate:
+ switch (cie->place) {
+ case PlaceOnTop:
+ __ArrayInstPtr(eventArr)->a_element[3] = @symbol(placeOnTop);
+ break;
+ case PlaceOnBottom:
+ __ArrayInstPtr(eventArr)->a_element[3] = @symbol(placeOnBottom);
+ break;
+ default:
+ __ArrayInstPtr(eventArr)->a_element[3] = __MKSMALLINT(cie->place);
+ break;
+ }
+ RETURN (true);
+ break;
+
+ case PropertyNotify:
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(propertyChange:atom:state:time:);
+ __ArrayInstPtr(eventArr)->a_element[3] = __MKATOMOBJ(pe->atom);
+ switch (pe->state) {
+ case PropertyNewValue:
+ __ArrayInstPtr(eventArr)->a_element[4] = @symbol(newValue);
+ break;
+ case PropertyDelete:
+ __ArrayInstPtr(eventArr)->a_element[4] = @symbol(deleted);
+ break;
+ default:
+ __ArrayInstPtr(eventArr)->a_element[4] = __MKSMALLINT(pe->state);
+ break;
+ }
+ __ArrayInstPtr(eventArr)->a_element[5] = t = __MKUINT(pe->time); __STORE(eventArr, t);
+ RETURN (true);
+ break;
+
+ case SelectionClear:
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(selectionClear:atom:time:);
+ __ArrayInstPtr(eventArr)->a_element[3] = __MKATOMOBJ(sce->selection);
+ __ArrayInstPtr(eventArr)->a_element[4] = t = __MKUINT(sce->time); __STORE(eventArr, t);
+ RETURN (true);
+ break;
+
+ case SelectionRequest:
+ /*
+ * someone wants the selection
+ */
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(selectionRequest:requestor:selection:target:property:time:);
+ __ArrayInstPtr(eventArr)->a_element[3] = t = __MKEXTERNALADDRESS(ev->xselectionrequest.requestor); __STORE(eventArr, t);
+ __ArrayInstPtr(eventArr)->a_element[4] = __MKATOMOBJ(ev->xselectionrequest.selection);
+ __ArrayInstPtr(eventArr)->a_element[5] = __MKATOMOBJ(ev->xselectionrequest.target);
+ __ArrayInstPtr(eventArr)->a_element[6] = __MKATOMOBJ(ev->xselectionrequest.property);
+ __ArrayInstPtr(eventArr)->a_element[7] = t = __MKUINT(ev->xselectionrequest.time); __STORE(eventArr, t);
+ RETURN (true);
+
+ case SelectionNotify:
+ /*
+ * returned selection value (answer from SelectionRequest)
+ */
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(selectionNotify:selection:target:property:requestor:time:);
+ __ArrayInstPtr(eventArr)->a_element[3] = __MKATOMOBJ(ev->xselection.selection);
+ __ArrayInstPtr(eventArr)->a_element[4] = __MKATOMOBJ(ev->xselection.target);
+ __ArrayInstPtr(eventArr)->a_element[5] = __MKATOMOBJ(ev->xselection.property);
+ __ArrayInstPtr(eventArr)->a_element[6] = t = __MKEXTERNALADDRESS(ev->xselection.requestor); __STORE(eventArr, t);
+ __ArrayInstPtr(eventArr)->a_element[7] = t = __MKUINT(ev->xselection.time); __STORE(eventArr, t);
+
+ RETURN (true);
+
+ case ColormapNotify:
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(colormapNotify:state:);
+ __ArrayInstPtr(eventArr)->a_element[3] = cme->state == ColormapInstalled ? true : false;
+ RETURN (true);
+ break;
+
+ case ClientMessage:
+ if (ev->xclient.message_type == (int) __AtomVal(__INST(protocolsAtom))) {
+ if ((ev->xclient.data.l[0] == (int) __AtomVal(__INST(quitAppAtom)))
+ || (ev->xclient.data.l[0] == (int) __AtomVal(__INST(deleteWindowAtom)))) {
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(terminateView:);
+ RETURN (true);
+ }
+ if (ev->xclient.data.l[0] == (int) __AtomVal(__INST(saveYourselfAtom))) {
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(saveAndTerminateView:);
+ RETURN (true);
+ }
+ }
+ /*
+ * any other client message
+ */
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(clientMessage:type:format:data:);
+ __ArrayInstPtr(eventArr)->a_element[3] = __MKATOMOBJ(ev->xclient.message_type);
+ __ArrayInstPtr(eventArr)->a_element[4] = __MKSMALLINT(ev->xclient.format);
+ __ArrayInstPtr(eventArr)->a_element[5] = t = __MKBYTEARRAY(ev->xclient.data, sizeof(ev->xclient.data)); __STORE(eventArr, t);
+ RETURN (true);
+ break;
+
+ case MappingNotify:
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(mappingNotify:request:event:);
+ switch(mape->request) {
+ case MappingModifier:
+ arg = @symbol(mappingModifier);
+ break;
+ case MappingKeyboard:
+ arg = @symbol(mappingKeyboard);
+ break;
+ case MappingPointer:
+ arg = @symbol(mappingPointer);
+ break;
+ default:
+ arg = __MKSMALLINT(mape->request);
+ break;
+ }
+ __ArrayInstPtr(eventArr)->a_element[3] = arg;
+ __ArrayInstPtr(eventArr)->a_element[4] = t = __MKBYTEARRAY(ev, sizeof(*mape));
+ __STORE(eventArr, t);
+ RETURN (true);
+
+ case KeymapNotify:
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(keymapNotify:);
+ RETURN (true);
+ break;
+
+ case MapRequest:
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(mapRequest:);
+ RETURN (true);
+
+ case ReparentNotify:
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(reparentedView:);
+ break;
+
+ default:
+ __ArrayInstPtr(eventArr)->a_element[2] = @symbol(unknownX11Event);
+ break;
}
#undef ae
#undef ee
@@ -5315,24 +5315,24 @@
view are flushed."
<context: #return>
-%{
+%{ /* UNLIMITEDSTACK */
XEvent ev;
Window win;
if (ISCONNECTED
&& __isSmallInteger(aMask)) {
- Display *dpy = myDpy;
-
- ENTER_XLIB();
- if (__isExternalAddress(aWindowIdOrNil)) {
- win = __WindowVal(aWindowIdOrNil);
- while (XCheckWindowEvent(dpy, win, __intVal(aMask), &ev)) ;;
- } else {
- while (XCheckMaskEvent(dpy, __intVal(aMask), &ev)) ;;
- }
- LEAVE_XLIB();
- RETURN ( self );
+ Display *dpy = myDpy;
+
+ ENTER_XLIB();
+ if (__isExternalAddress(aWindowIdOrNil)) {
+ win = __WindowVal(aWindowIdOrNil);
+ while (XCheckWindowEvent(dpy, win, __intVal(aMask), &ev)) ;;
+ } else {
+ while (XCheckMaskEvent(dpy, __intVal(aMask), &ev)) ;;
+ }
+ LEAVE_XLIB();
+ RETURN ( self );
}
%}.
self primitiveFailedOrClosedConnection
@@ -8476,15 +8476,15 @@
"/ 'closing' errorPrintCR.
"/ thisContext fullPrintAll.
-%{
+%{ /* UNLIMITEDSTACK */ /* calls XSync()! */
if (ISCONNECTED) {
- Display *dpy = myDpy;
-
-
- __INST(displayId) = nil;
- ENTER_XLIB();
- XCloseDisplay(dpy);
- LEAVE_XLIB();
+ Display *dpy = myDpy;
+
+
+ __INST(displayId) = nil;
+ ENTER_XLIB();
+ XCloseDisplay(dpy);
+ LEAVE_XLIB();
}
%}
!
@@ -11792,7 +11792,7 @@
!XWorkstation class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libview/XWorkstation.st,v 1.416 2002-12-18 09:22:39 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libview/XWorkstation.st,v 1.417 2003-02-07 12:09:30 stefan Exp $'
! !
XWorkstation initialize!