--- a/XWorkstation.st Wed Mar 26 10:46:39 1997 +0100
+++ b/XWorkstation.st Wed Mar 26 19:07:20 1997 +0100
@@ -3455,10 +3455,14 @@
handled."
(self getEventFor:aViewIdOrNil withMask:eventMask) ifTrue:[
- AbortSignal catch:[
- self dispatchLastEvent.
- ]
+ AbortSignal handle:[:ex |
+ ex return
+ ] do:[
+ self dispatchLastEvent.
+ ]
].
+
+ "Modified: 26.3.1997 / 19:00:41 / cg"
!
dispatchExposeEventFor:aViewIdOrNil
@@ -3544,7 +3548,7 @@
static struct inlineCache skrS = _ILC4;
if (! ISCONNECTED) {
- RETURN (false);
+ RETURN (false);
}
dpy = myDpy;
@@ -3552,10 +3556,10 @@
eB = __INST(eventBuffer);
if (__isByteArray(eB)) {
- ev = (XEvent *)(__ByteArrayInstPtr(eB)->ba_element);
+ ev = (XEvent *)(__ByteArrayInstPtr(eB)->ba_element);
} else {
- printf("DISPLAY: no eventBuffer\n");
- RETURN (false);
+ printf("DISPLAY: no eventBuffer\n");
+ RETURN (false);
}
/*
@@ -3563,11 +3567,11 @@
* avoid creation & lookup then.
*/
if ((t = __INST(lastId)) != nil) {
- if (__isExternalAddress(t)) {
- if (_WindowVal(t) == ae->window) {
- theView = __INST(lastView);
- }
- }
+ if (__isExternalAddress(t)) {
+ if (_WindowVal(t) == ae->window) {
+ theView = __INST(lastView);
+ }
+ }
}
if (theView == nil) {
@@ -3576,7 +3580,7 @@
}
if ((theView == nil) && (ev->type != MappingNotify)) {
- RETURN (nil);
+ RETURN (nil);
}
/*
@@ -3596,458 +3600,458 @@
eventType = __MKSMALLINT(ev->type);
#endif
switch (ev->type) {
- case KeyRelease:
- symS = @symbol(keyRelease:x:y:view:);
- ipS = &skrS;
- upDown = false;
- goto keyPressAndRelease;
-
- case KeyPress:
- symS = @symbol(keyPress:x:y:view:);
- ipS = &skpS;
- upDown = true;
- /* FALL INTO */
-
- keyPressAndRelease:
- __INST(eventRootX) = __MKSMALLINT(ke->x_root);
- __INST(eventRootY) = __MKSMALLINT(ke->y_root);
+ case KeyRelease:
+ symS = @symbol(keyRelease:x:y:view:);
+ ipS = &skrS;
+ upDown = false;
+ goto keyPressAndRelease;
+
+ case KeyPress:
+ symS = @symbol(keyPress:x:y:view:);
+ ipS = &skpS;
+ upDown = true;
+ /* FALL INTO */
+
+ keyPressAndRelease:
+ __INST(eventRootX) = __MKSMALLINT(ke->x_root);
+ __INST(eventRootY) = __MKSMALLINT(ke->y_root);
#ifdef OLD
- __INST(altDown) = (ke->state & Mod2Mask) ? true : false;
- __INST(metaDown) = (ke->state & Mod1Mask) ? true : false;
+ __INST(altDown) = (ke->state & Mod2Mask) ? true : false;
+ __INST(metaDown) = (ke->state & Mod1Mask) ? true : false;
#else
- __INST(altDown) = (ke->state & __intVal(__INST(altModifierMask))) ? true : false;
- __INST(metaDown) = (ke->state & __intVal(__INST(metaModifierMask))) ? true : false;
+ __INST(altDown) = (ke->state & __intVal(__INST(altModifierMask))) ? true : false;
+ __INST(metaDown) = (ke->state & __intVal(__INST(metaModifierMask))) ? true : false;
#endif
- __INST(shiftDown) = (ke->state & ShiftMask) ? true : false;
- __INST(ctrlDown) = (ke->state & ControlMask) ? true : false;
-
- 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 {
+ __INST(shiftDown) = (ke->state & ShiftMask) ? true : false;
+ __INST(ctrlDown) = (ke->state & ControlMask) ? true : false;
+
+ 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 {
#ifdef OLD
- switch (keySym) {
- case XK_Control_L:
- case XK_Control_R:
- __INST(ctrlDown) = upDown;
- break;
- case XK_Shift_L:
- case XK_Shift_R:
- __INST(shiftDown) = upDown;
- break;
- case XK_Meta_L:
- case XK_Meta_R:
- __INST(metaDown) = upDown;
- break;
- case XK_Alt_L:
- case XK_Alt_R:
- __INST(altDown) = upDown;
- break;
- }
+ switch (keySym) {
+ case XK_Control_L:
+ case XK_Control_R:
+ __INST(ctrlDown) = upDown;
+ break;
+ case XK_Shift_L:
+ case XK_Shift_R:
+ __INST(shiftDown) = upDown;
+ break;
+ case XK_Meta_L:
+ case XK_Meta_R:
+ __INST(metaDown) = upDown;
+ break;
+ case XK_Alt_L:
+ case XK_Alt_R:
+ __INST(altDown) = upDown;
+ break;
+ }
#endif
- keySymString = XKeysymToString(keySym);
- if (keySymString) {
+ keySymString = XKeysymToString(keySym);
+ if (keySymString) {
#ifdef OLD
- if (keySymString[0] == 'D') {
- /*
- * remove underscore, dont want it in symbols
- */
- if (strcmp(keySymString, "Delete_line") == 0) {
- keySymString = "DeleteLine";
- } else if (strcmp(keySymString, "Delete_word") == 0) {
- keySymString = "DeleteWord";
- }
- }
- /*
- * make names compatible
- */
- if (strcmp(keySymString, "Down") == 0) {
- keySymString = "CursorDown";
- } else if (strcmp(keySymString, "Up") == 0) {
- keySymString = "CursorUp";
- } else if (strcmp(keySymString, "Left") == 0) {
- keySymString = "CursorLeft";
- } else if (strcmp(keySymString, "Right") == 0) {
- keySymString = "CursorRight";
- }
- arg = __MKSYMBOL(keySymString, (OBJ *)0, __context);
+ if (keySymString[0] == 'D') {
+ /*
+ * remove underscore, dont want it in symbols
+ */
+ if (strcmp(keySymString, "Delete_line") == 0) {
+ keySymString = "DeleteLine";
+ } else if (strcmp(keySymString, "Delete_word") == 0) {
+ keySymString = "DeleteWord";
+ }
+ }
+ /*
+ * make names compatible
+ */
+ if (strcmp(keySymString, "Down") == 0) {
+ keySymString = "CursorDown";
+ } else if (strcmp(keySymString, "Up") == 0) {
+ keySymString = "CursorUp";
+ } else if (strcmp(keySymString, "Left") == 0) {
+ keySymString = "CursorLeft";
+ } else if (strcmp(keySymString, "Right") == 0) {
+ keySymString = "CursorRight";
+ }
+ arg = __MKSYMBOL(keySymString, (OBJ *)0, __context);
#else
- __PROTECT__(theView);
- arg = __MKSTRING(keySymString);
- __UNPROTECT__(theView);
+ __PROTECT__(theView);
+ arg = __MKSTRING(keySymString);
+ __UNPROTECT__(theView);
#endif
- }
- }
-
- if (arg == nil) {
- /* happens sometimes (alt-graph on sun has no keysym) */
- break;
- }
-
- (*(*ipS).ilc_func)(self, symS, nil, ipS,
- arg,
- __MKSMALLINT(ke->x),
- __MKSMALLINT(ke->y),
- theView);
- break;
-
- case ButtonPress:
- __INST(buttonsPressed) = __MKSMALLINT(__intVal(__INST(buttonsPressed)) | (1 << be->button));
- __INST(eventRootX) = __MKSMALLINT(be->x_root);
- __INST(eventRootY) = __MKSMALLINT(be->y_root);
-
- if (__isSmallInteger(__INST(multiClickTimeDelta)))
- nextMultiClickTime = be->time + __intVal(__INST(multiClickTimeDelta));
- else
- nextMultiClickTime = 0;
-
-
- if ((t = __INST(multiClickTime)) != nil) {
- int _multiClickTime;
-
- _multiClickTime = __longIntVal(t);
- if (be->time < _multiClickTime) {
- __INST(multiClickTime) = t = __MKUINT(nextMultiClickTime); __STORE(self, t);
-
- ipS = &bmpS;
- symS = @symbol(buttonMultiPress:x:y:view:);
- goto sendButtonEvent;
- break;
- }
- }
- __INST(multiClickTime) = t = __MKUINT(nextMultiClickTime); __STORE(self, t);
+ }
+ }
+
+ if (arg == nil) {
+ /* happens sometimes (alt-graph on sun has no keysym) */
+ break;
+ }
+
+ (*(*ipS).ilc_func)(self, symS, nil, ipS,
+ arg,
+ __MKSMALLINT(ke->x),
+ __MKSMALLINT(ke->y),
+ theView);
+ break;
+
+ case ButtonPress:
+ __INST(buttonsPressed) = __MKSMALLINT(__intVal(__INST(buttonsPressed)) | (1 << be->button));
+ __INST(eventRootX) = __MKSMALLINT(be->x_root);
+ __INST(eventRootY) = __MKSMALLINT(be->y_root);
+
+ if (__isSmallInteger(__INST(multiClickTimeDelta)))
+ nextMultiClickTime = be->time + __intVal(__INST(multiClickTimeDelta));
+ else
+ nextMultiClickTime = 0;
+
+
+ if ((t = __INST(multiClickTime)) != nil) {
+ int _multiClickTime;
+
+ _multiClickTime = __longIntVal(t);
+ if (be->time < _multiClickTime) {
+ __INST(multiClickTime) = t = __MKUINT(nextMultiClickTime); __STORE(self, t);
+
+ ipS = &bmpS;
+ symS = @symbol(buttonMultiPress:x:y:view:);
+ goto sendButtonEvent;
+ break;
+ }
+ }
+ __INST(multiClickTime) = t = __MKUINT(nextMultiClickTime); __STORE(self, t);
#ifdef NO_LONGER
- if (be->state & ShiftMask) {
- ipS = &bspS;
- symS = @symbol(buttonShiftPress:x:y:view:);
- goto sendButtonEvent;
- }
+ if (be->state & ShiftMask) {
+ ipS = &bspS;
+ symS = @symbol(buttonShiftPress:x:y:view:);
+ goto sendButtonEvent;
+ }
#endif
- ipS = &bpS;
- symS = @symbol(buttonPress:x:y:view:);
- goto sendButtonEvent;
-
- /* NOT REACHED */
-
- case ButtonRelease:
- __INST(buttonsPressed) = __MKSMALLINT(__intVal(__INST(buttonsPressed)) & ~(1 << be->button));
- __INST(eventRootX) = __MKSMALLINT(be->x_root);
- __INST(eventRootY) = __MKSMALLINT(be->y_root);
- ipS = &brS;
- symS = @symbol(buttonRelease:x:y:view:);
- /* fall into */
-
- sendButtonEvent:
- butt = __MKSMALLINT(be->button);
+ ipS = &bpS;
+ symS = @symbol(buttonPress:x:y:view:);
+ goto sendButtonEvent;
+
+ /* NOT REACHED */
+
+ case ButtonRelease:
+ __INST(buttonsPressed) = __MKSMALLINT(__intVal(__INST(buttonsPressed)) & ~(1 << be->button));
+ __INST(eventRootX) = __MKSMALLINT(be->x_root);
+ __INST(eventRootY) = __MKSMALLINT(be->y_root);
+ ipS = &brS;
+ symS = @symbol(buttonRelease:x:y:view:);
+ /* fall into */
+
+ sendButtonEvent:
+ butt = __MKSMALLINT(be->button);
#ifdef NOTDEF
- /*
- * this allows operation with single button mouses: meta-click is always Button 2
- */
- if (__INST(metaDown) == true)
- butt = __MKSMALLINT(2);
- else
+ /*
+ * this allows operation with single button mouses: meta-click is always Button 2
+ */
+ if (__INST(metaDown) == true)
+ butt = __MKSMALLINT(2);
+ else
#endif
- butt = __AT_(__INST(buttonTranslation), butt);
-
-
- (*(*ipS).ilc_func)(self,
- symS, nil, ipS,
- butt,
- __MKSMALLINT(ke->x),
- __MKSMALLINT(ke->y),
- theView);
- break;
-
- case MotionNotify:
- if (__INST(motionEventCompression) != false) {
- while (XCheckWindowEvent(dpy, me->window, ANYBUTTON, ev)) ;;
- }
-
- __INST(eventRootX) = __MKSMALLINT(me->x_root);
- __INST(eventRootY) = __MKSMALLINT(me->y_root);
+ butt = __AT_(__INST(buttonTranslation), butt);
+
+
+ (*(*ipS).ilc_func)(self,
+ symS, nil, ipS,
+ butt,
+ __MKSMALLINT(ke->x),
+ __MKSMALLINT(ke->y),
+ theView);
+ break;
+
+ case MotionNotify:
+ if (__INST(motionEventCompression) != false) {
+ while (XCheckWindowEvent(dpy, me->window, ANYBUTTON, ev)) ;;
+ }
+
+ __INST(eventRootX) = __MKSMALLINT(me->x_root);
+ __INST(eventRootY) = __MKSMALLINT(me->y_root);
#ifdef OLD
- __INST(altDown) = (me->state & Mod2Mask) ? true : false;
- __INST(metaDown) = (me->state & Mod1Mask) ? true : false;
+ __INST(altDown) = (me->state & Mod2Mask) ? true : false;
+ __INST(metaDown) = (me->state & Mod1Mask) ? true : false;
#else
- __INST(altDown) = (ke->state & __intVal(__INST(altModifierMask))) ? true : false;
- __INST(metaDown) = (ke->state & __intVal(__INST(metaModifierMask))) ? true : false;
+ __INST(altDown) = (ke->state & __intVal(__INST(altModifierMask))) ? true : false;
+ __INST(metaDown) = (ke->state & __intVal(__INST(metaModifierMask))) ? true : false;
#endif
- __INST(shiftDown) = (me->state & ShiftMask) ? true : false;
- __INST(ctrlDown) = (me->state & ControlMask) ? true : false;
-
- (*motS.ilc_func)(self,
- @symbol(buttonMotion:x:y:view:), nil, &motS,
- __MKSMALLINT(me->state),
- __MKSMALLINT(me->x),
- __MKSMALLINT(me->y),
- theView);
- break;
-
- case FocusIn:
- (*focInS.ilc_func)(self,
- @symbol(focusInView:), nil, &focInS,
- theView);
- break;
-
- case FocusOut:
- (*focOutS.ilc_func)(self,
- @symbol(focusOutView:), nil, &focOutS,
- theView);
- break;
-
- case EnterNotify:
+ __INST(shiftDown) = (me->state & ShiftMask) ? true : false;
+ __INST(ctrlDown) = (me->state & ControlMask) ? true : false;
+
+ (*motS.ilc_func)(self,
+ @symbol(buttonMotion:x:y:view:), nil, &motS,
+ __MKSMALLINT(me->state),
+ __MKSMALLINT(me->x),
+ __MKSMALLINT(me->y),
+ theView);
+ break;
+
+ case FocusIn:
+ (*focInS.ilc_func)(self,
+ @symbol(focusInView:), nil, &focInS,
+ theView);
+ break;
+
+ case FocusOut:
+ (*focOutS.ilc_func)(self,
+ @symbol(focusOutView:), nil, &focOutS,
+ theView);
+ break;
+
+ case EnterNotify:
#ifdef OLD
- __INST(altDown) = (ewe->state & Mod2Mask) ? true : false;
- __INST(metaDown) = (ewe->state & Mod1Mask) ? true : false;
+ __INST(altDown) = (ewe->state & Mod2Mask) ? true : false;
+ __INST(metaDown) = (ewe->state & Mod1Mask) ? true : false;
#else
- __INST(altDown) = (ke->state & __intVal(__INST(altModifierMask))) ? true : false;
- __INST(metaDown) = (ke->state & __intVal(__INST(metaModifierMask))) ? true : false;
+ __INST(altDown) = (ke->state & __intVal(__INST(altModifierMask))) ? true : false;
+ __INST(metaDown) = (ke->state & __intVal(__INST(metaModifierMask))) ? true : false;
#endif
- __INST(shiftDown) = (ewe->state & ShiftMask) ? true : false;
- __INST(ctrlDown) = (ewe->state & ControlMask) ? true : false;
-
- (*peS.ilc_func)(self,
- @symbol(pointerEnter:x:y:view:), nil, &peS,
- __MKSMALLINT(ewe->state),
- __MKSMALLINT(ewe->x),
- __MKSMALLINT(ewe->y),
- theView);
- break;
-
- case LeaveNotify:
- (*plS.ilc_func)(self,
- @symbol(pointerLeave:view:), nil, &plS,
- __MKSMALLINT(lwe->state),
- theView);
- break;
-
- case GraphicsExpose:
- (*gexpS.ilc_func)(self,
- @symbol(graphicsExposeX:y:width:height:final:view:), nil, &gexpS,
- __MKSMALLINT(ee->x),
- __MKSMALLINT(ee->y),
- __MKSMALLINT(ee->width),
- __MKSMALLINT(ee->height),
- ee->count == 0 ? true : false,
- theView);
-
- if (ee->count != 0) {
- break;
- }
- /* fall into */
-
- case NoExpose:
- (*nexpS.ilc_func)(self,
- @symbol(noExposeView:), nil, &nexpS,
- theView);
- break;
-
- case Expose:
- (*expS.ilc_func)(self,
- @symbol(exposeX:y:width:height:view:), nil, &expS,
- __MKSMALLINT(ee->x),
- __MKSMALLINT(ee->y),
- __MKSMALLINT(ee->width),
- __MKSMALLINT(ee->height),
- theView);
- break;
-
- case ConfigureNotify:
- if (ce->above != None) {
- siblingID = __MKOBJ(ce->above);
- sibling = (*vid.ilc_func)(self, @symbol(viewFromId:), nil, &vid, siblingID);
- }
-
- (*confS.ilc_func)(self,
- @symbol(configureX:y:width:height:view:), nil, &confS,
- __MKSMALLINT(ce->x),
- __MKSMALLINT(ce->y),
- __MKSMALLINT(ce->width),
- __MKSMALLINT(ce->height),
- theView);
- if (sibling != nil) {
- (*coveredS.ilc_func)(self,
- @symbol(coveredBy:view:), nil, &coveredS,
- theView,
- sibling);
- }
- 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)))) {
- (*termS.ilc_func)(self,
- @symbol(terminateView:), nil, &termS, theView);
- break;
- }
- if (ev->xclient.data.l[0] == (int) _AtomVal(__INST(saveYourselfAtom))) {
- (*savtermS.ilc_func)(self,
- @symbol(saveAndTerminateView:)
- , nil, &savtermS, theView);
- break;
- }
- }
- break;
-
- case DestroyNotify:
- (*destrS.ilc_func)(self, @symbol(destroyedView:)
- , nil, &destrS, theView);
- break;
-
- case UnmapNotify:
- (*unmapS.ilc_func)(self, @symbol(unmappedView:)
- , nil, &unmapS, theView);
- break;
-
- case MapNotify:
- (*mapS.ilc_func)(self,
- @symbol(mappedView:)
- , nil, &mapS, theView);
- break;
-
- case KeymapNotify:
- (*keymap.ilc_func)(theView,
- @symbol(keyMapChange)
- , nil, &keymap);
- break;
-
- case VisibilityNotify:
- switch (ve->state) {
- case VisibilityUnobscured:
- arg = @symbol(unobscured);
- break;
- case VisibilityPartiallyObscured:
- arg = @symbol(partiallyObscured);
- break;
- case VisibilityFullyObscured:
- arg = @symbol(fullyObscured);
- break;
- }
- (*vis.ilc_func)(theView, @symbol(visibilityChange:), nil, &vis, arg);
- break;
-
- case CreateNotify:
- (*created.ilc_func)(self, @symbol(createdView:), nil, &created, theView);
- break;
-
- case MapRequest:
- (*mapReq.ilc_func)(self, @symbol(mapRequestView:), nil, &mapReq, theView);
- break;
-
- case ReparentNotify:
- (*repar.ilc_func)(self, @symbol(reparentedView:), nil, &repar, theView);
- break;
-
- case ConfigureRequest:
- (*confReq.ilc_func)(self, @symbol(configureRequestView:), nil, &confReq, theView);
- break;
-
- case GravityNotify:
- (*gravNotify.ilc_func)(self, @symbol(gravityNotifyView:), nil, &resReq, theView);
- break;
-
- case ResizeRequest:
- (*resReq.ilc_func)(self, @symbol(resizeRequestView:), nil, &resReq, theView);
- break;
-
- case CirculateNotify:
- (*circNotify.ilc_func)(self, @symbol(circulateNotifyView:), nil, &circNotify, theView);
- break;
-
- case CirculateRequest:
- (*circReq.ilc_func)(self, @symbol(circulateRequestView:), nil, &circReq, theView);
- break;
-
- case PropertyNotify:
- (*prop.ilc_func)(self,
- @symbol(propertyChangeView)
- , nil, &prop,
- theView);
- break;
-
- case SelectionClear:
- selectionID = __MKATOMOBJ(ev->xselectionclear.selection);
- (*selClear.ilc_func)(self,
- @symbol(selectionClear:view:)
- , nil, &selClear,
- selectionID,
- theView);
- break;
-
- case SelectionNotify:
- /*
- * returned selection value (answer from SelectionRequest)
- */
- DPRINTF(("SelectionNotify prop=%x target=%x selection= %x requestor=%x\n",
- ev->xselection.property, ev->xselection.target,
- ev->xselection.selection, ev->xselection.requestor));
-
- propertyID = __MKATOMOBJ(ev->xselection.property);
- targetID = __MKATOMOBJ(ev->xselection.target);
- selectionID = __MKATOMOBJ(ev->xselection.selection);
- requestorID = __MKOBJ(ev->xselection.requestor);
- (*selNotify.ilc_func)(self,
- @symbol(selectionNotify:target:selection:from:view:)
- , nil, &selNotify,
- propertyID, targetID, selectionID, requestorID,
- theView);
- break;
-
- case SelectionRequest:
- /*
- * someone wants the selection
- */
- DPRINTF(("SelectionRequest prop=%x target=%x selection=%x requestor=%x\n",
- ev->xselectionrequest.property,
- ev->xselectionrequest.target,
- ev->xselectionrequest.selection,
- ev->xselectionrequest.requestor));
-
- propertyID = __MKATOMOBJ(ev->xselectionrequest.property);
- targetID = __MKATOMOBJ(ev->xselectionrequest.target);
- selectionID = __MKATOMOBJ(ev->xselectionrequest.selection);
- requestorID = __MKOBJ(ev->xselectionrequest.requestor);
- (*selReq.ilc_func)(self,
- @symbol(selectionRequest:target:selection:from:view:)
- , nil, &selReq,
- propertyID, targetID, selectionID, requestorID,
- theView);
- break;
-
- case ColormapNotify:
- (*colormap.ilc_func)(self,
- @symbol(colorMapChangeView:)
- , nil, &colormap,
- theView);
- break;
-
- case MappingNotify:
- switch(mape->request) {
- case MappingModifier:
- arg = @symbol(mappingModifier);
- break;
- case MappingKeyboard:
- arg = @symbol(mappingKeyboard);
- break;
- case MappingPointer:
- arg = @symbol(mappingPointer);
- break;
- default:
- arg = nil;
- break;
- }
- (*mapping.ilc_func)(self,
- @symbol(mappingChanged:event:)
- , nil, &mapping, arg, eB);
- break;
+ __INST(shiftDown) = (ewe->state & ShiftMask) ? true : false;
+ __INST(ctrlDown) = (ewe->state & ControlMask) ? true : false;
+
+ (*peS.ilc_func)(self,
+ @symbol(pointerEnter:x:y:view:), nil, &peS,
+ __MKSMALLINT(ewe->state),
+ __MKSMALLINT(ewe->x),
+ __MKSMALLINT(ewe->y),
+ theView);
+ break;
+
+ case LeaveNotify:
+ (*plS.ilc_func)(self,
+ @symbol(pointerLeave:view:), nil, &plS,
+ __MKSMALLINT(lwe->state),
+ theView);
+ break;
+
+ case GraphicsExpose:
+ (*gexpS.ilc_func)(self,
+ @symbol(graphicsExposeX:y:width:height:final:view:), nil, &gexpS,
+ __MKSMALLINT(ee->x),
+ __MKSMALLINT(ee->y),
+ __MKSMALLINT(ee->width),
+ __MKSMALLINT(ee->height),
+ ee->count == 0 ? true : false,
+ theView);
+
+ if (ee->count != 0) {
+ break;
+ }
+ /* fall into */
+
+ case NoExpose:
+ (*nexpS.ilc_func)(self,
+ @symbol(noExposeView:), nil, &nexpS,
+ theView);
+ break;
+
+ case Expose:
+ (*expS.ilc_func)(self,
+ @symbol(exposeX:y:width:height:view:), nil, &expS,
+ __MKSMALLINT(ee->x),
+ __MKSMALLINT(ee->y),
+ __MKSMALLINT(ee->width),
+ __MKSMALLINT(ee->height),
+ theView);
+ break;
+
+ case ConfigureNotify:
+ if (ce->above != None) {
+ siblingID = __MKOBJ(ce->above);
+ sibling = (*vid.ilc_func)(self, @symbol(viewFromId:), nil, &vid, siblingID);
+ }
+
+ (*confS.ilc_func)(self,
+ @symbol(configureX:y:width:height:view:), nil, &confS,
+ __MKSMALLINT(ce->x),
+ __MKSMALLINT(ce->y),
+ __MKSMALLINT(ce->width),
+ __MKSMALLINT(ce->height),
+ theView);
+ if (sibling != nil) {
+ (*coveredS.ilc_func)(self,
+ @symbol(coveredBy:view:), nil, &coveredS,
+ theView,
+ sibling);
+ }
+ 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)))) {
+ (*termS.ilc_func)(self,
+ @symbol(terminateView:), nil, &termS, theView);
+ break;
+ }
+ if (ev->xclient.data.l[0] == (int) _AtomVal(__INST(saveYourselfAtom))) {
+ (*savtermS.ilc_func)(self,
+ @symbol(saveAndTerminateView:)
+ , nil, &savtermS, theView);
+ break;
+ }
+ }
+ break;
+
+ case DestroyNotify:
+ (*destrS.ilc_func)(self, @symbol(destroyedView:)
+ , nil, &destrS, theView);
+ break;
+
+ case UnmapNotify:
+ (*unmapS.ilc_func)(self, @symbol(unmappedView:)
+ , nil, &unmapS, theView);
+ break;
+
+ case MapNotify:
+ (*mapS.ilc_func)(self,
+ @symbol(mappedView:)
+ , nil, &mapS, theView);
+ break;
+
+ case KeymapNotify:
+ (*keymap.ilc_func)(theView,
+ @symbol(keyMapChange)
+ , nil, &keymap);
+ break;
+
+ case VisibilityNotify:
+ switch (ve->state) {
+ case VisibilityUnobscured:
+ arg = @symbol(unobscured);
+ break;
+ case VisibilityPartiallyObscured:
+ arg = @symbol(partiallyObscured);
+ break;
+ case VisibilityFullyObscured:
+ arg = @symbol(fullyObscured);
+ break;
+ }
+ (*vis.ilc_func)(theView, @symbol(visibilityChange:), nil, &vis, arg);
+ break;
+
+ case CreateNotify:
+ (*created.ilc_func)(self, @symbol(createdView:), nil, &created, theView);
+ break;
+
+ case MapRequest:
+ (*mapReq.ilc_func)(self, @symbol(mapRequestView:), nil, &mapReq, theView);
+ break;
+
+ case ReparentNotify:
+ (*repar.ilc_func)(self, @symbol(reparentedView:), nil, &repar, theView);
+ break;
+
+ case ConfigureRequest:
+ (*confReq.ilc_func)(self, @symbol(configureRequestView:), nil, &confReq, theView);
+ break;
+
+ case GravityNotify:
+ (*gravNotify.ilc_func)(self, @symbol(gravityNotifyView:), nil, &resReq, theView);
+ break;
+
+ case ResizeRequest:
+ (*resReq.ilc_func)(self, @symbol(resizeRequestView:), nil, &resReq, theView);
+ break;
+
+ case CirculateNotify:
+ (*circNotify.ilc_func)(self, @symbol(circulateNotifyView:), nil, &circNotify, theView);
+ break;
+
+ case CirculateRequest:
+ (*circReq.ilc_func)(self, @symbol(circulateRequestView:), nil, &circReq, theView);
+ break;
+
+ case PropertyNotify:
+ (*prop.ilc_func)(self,
+ @symbol(propertyChangeView)
+ , nil, &prop,
+ theView);
+ break;
+
+ case SelectionClear:
+ selectionID = __MKATOMOBJ(ev->xselectionclear.selection);
+ (*selClear.ilc_func)(self,
+ @symbol(selectionClear:view:)
+ , nil, &selClear,
+ selectionID,
+ theView);
+ break;
+
+ case SelectionNotify:
+ /*
+ * returned selection value (answer from SelectionRequest)
+ */
+ DPRINTF(("SelectionNotify prop=%x target=%x selection= %x requestor=%x\n",
+ ev->xselection.property, ev->xselection.target,
+ ev->xselection.selection, ev->xselection.requestor));
+
+ propertyID = __MKATOMOBJ(ev->xselection.property);
+ targetID = __MKATOMOBJ(ev->xselection.target);
+ selectionID = __MKATOMOBJ(ev->xselection.selection);
+ requestorID = __MKOBJ(ev->xselection.requestor);
+ (*selNotify.ilc_func)(self,
+ @symbol(selectionNotify:target:selection:from:view:)
+ , nil, &selNotify,
+ propertyID, targetID, selectionID, requestorID,
+ theView);
+ break;
+
+ case SelectionRequest:
+ /*
+ * someone wants the selection
+ */
+ DPRINTF(("SelectionRequest prop=%x target=%x selection=%x requestor=%x\n",
+ ev->xselectionrequest.property,
+ ev->xselectionrequest.target,
+ ev->xselectionrequest.selection,
+ ev->xselectionrequest.requestor));
+
+ propertyID = __MKATOMOBJ(ev->xselectionrequest.property);
+ targetID = __MKATOMOBJ(ev->xselectionrequest.target);
+ selectionID = __MKATOMOBJ(ev->xselectionrequest.selection);
+ requestorID = __MKOBJ(ev->xselectionrequest.requestor);
+ (*selReq.ilc_func)(self,
+ @symbol(selectionRequest:target:selection:from:view:)
+ , nil, &selReq,
+ propertyID, targetID, selectionID, requestorID,
+ theView);
+ break;
+
+ case ColormapNotify:
+ (*colormap.ilc_func)(self,
+ @symbol(colorMapChangeView:)
+ , nil, &colormap,
+ theView);
+ break;
+
+ case MappingNotify:
+ switch(mape->request) {
+ case MappingModifier:
+ arg = @symbol(mappingModifier);
+ break;
+ case MappingKeyboard:
+ arg = @symbol(mappingKeyboard);
+ break;
+ case MappingPointer:
+ arg = @symbol(mappingPointer);
+ break;
+ default:
+ arg = nil;
+ break;
+ }
+ (*mapping.ilc_func)(self,
+ @symbol(mappingChanged:event:)
+ , nil, &mapping, arg, eB);
+ break;
}
#undef ae
#undef ee
@@ -4072,18 +4076,28 @@
we only handle exposes until the graphicsExpose arrives.
Other systems may not need such a kludge"
+ |dispatch|
+
"interested in exposes only ?"
dispatchingExpose notNil ifTrue:[
- [self exposeEventPendingFor:dispatchingExpose withSync:false] whileTrue:[
- self dispatchExposeEventFor:dispatchingExpose
- ].
- ^ self
+ [self exposeEventPendingFor:dispatchingExpose withSync:false] whileTrue:[
+ self dispatchExposeEventFor:dispatchingExpose
+ ].
+ ^ self
].
"no, general dispatch"
+ dispatch := [self dispatchLastEvent].
+
[self eventPendingWithSync:false] whileTrue:[
- self dispatchEventFor:nil withMask:nil
+ (self getEventFor:nil withMask:nil) ifTrue:[
+ AbortSignal handle:[:ex |
+ ex return
+ ] do:dispatch
+ ].
]
+
+ "Modified: 26.3.1997 / 19:04:17 / cg"
!
disposeEventsWithMask:aMask for:aWindowIdOrNil
@@ -4282,8 +4296,6 @@
handle method to allow unlimitedstack here.
(some Xlibs do a big alloca there ...) which cannot be done in
dispatchLastEvent, since it dispatches out into ST-methods.
- BUG: uses a static buffer - has to be rewritten, to support multiple
- display connections.
"
%{ /* UNLIMITEDSTACK */
@@ -4295,39 +4307,39 @@
XEvent *ev;
if (! ISCONNECTED) {
- RETURN (false);
+ RETURN (false);
}
dpy = myDpy;
eB = __INST(eventBuffer);
if (__isByteArray(eB)) {
- ev = (XEvent *)(__ByteArrayInstPtr(eB)->ba_element);
+ ev = (XEvent *)(__ByteArrayInstPtr(eB)->ba_element);
} else {
- printf("DISPLAY: no eventBuffer\n");
- RETURN (false);
+ printf("DISPLAY: no eventBuffer\n");
+ RETURN (false);
}
ev->type = 0;
if (__isSmallInteger(eventMask)) {
- evMask = __intVal(eventMask);
+ evMask = __intVal(eventMask);
} else {
- evMask = ~0;
+ evMask = ~0;
}
if (__isExternalAddress(aViewIdOrNil)) {
- wWanted = _WindowVal(aViewIdOrNil);
- if (XCheckWindowEvent(dpy, wWanted, evMask, ev)) {
- RETURN ( true );
- }
+ wWanted = _WindowVal(aViewIdOrNil);
+ if (XCheckWindowEvent(dpy, wWanted, evMask, ev)) {
+ RETURN ( true );
+ }
} else {
- if (evMask == ~0) {
- XNextEvent(dpy, ev);
- RETURN (true);
- }
- if (XCheckMaskEvent(dpy, evMask, ev)) {
- RETURN (true);
- }
+ if (evMask == ~0) {
+ XNextEvent(dpy, ev);
+ RETURN (true);
+ }
+ if (XCheckMaskEvent(dpy, evMask, ev)) {
+ RETURN (true);
+ }
}
%}.
^ false
@@ -8592,6 +8604,6 @@
!XWorkstation class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libview/XWorkstation.st,v 1.217 1997-03-22 16:29:50 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libview/XWorkstation.st,v 1.218 1997-03-26 18:07:20 cg Exp $'
! !
XWorkstation initialize!