Fixes for newDisplatchLastEvent.
authorStefan Vogel <sv@exept.de>
Fri, 29 Sep 2000 14:23:16 +0200
changeset 3320 20c37636e4b8
parent 3319 e3b21cba1c59
child 3321 3d0e6754dcd9
Fixes for newDisplatchLastEvent. Hold atoms in Dictionary.
XWorkstation.st
--- a/XWorkstation.st	Thu Sep 28 18:24:27 2000 +0200
+++ b/XWorkstation.st	Fri Sep 29 14:23:16 2000 +0200
@@ -10,14 +10,16 @@
  hereby transferred.
 "
 
+'From Smalltalk/X, Version:4.1.1 on 29-sep-2000 at 12:58:38'                    !
+
 "{ Package: 'stx:libview' }"
 
 DeviceWorkstation subclass:#XWorkstation
 	instanceVariableNames:'hasShapeExtension hasShmExtension hasDPSExtension
 		hasMbufExtension hasXVideoExtension hasSaveUnder hasPEXExtension
 		hasImageExtension hasInputExtension ignoreBackingStore blackpixel
-		whitepixel protocolsAtom deleteWindowAtom saveYourselfAtom
-		quitAppAtom primaryAtom secondaryAtom cutBuffer0Atom stringAtom
+		whitepixel atoms protocolsAtom deleteWindowAtom saveYourselfAtom
+		quitAppAtom primaryAtom cutBuffer0Atom stringAtom
 		lengthAtom wmStateAtom listOfXFonts buttonsPressed eventRootX
 		eventRootY displayName eventTrace dispatchingExpose rgbVisual
 		virtualRootId rootId eventBuffer altModifierMask metaModifierMask
@@ -166,19 +168,20 @@
 /*
  * some defines - tired of typing ...
  */
-#define _DisplayVal(o)       (Display *)(__externalAddressVal(o))
-#define _WindowVal(o)        (Window)(__externalAddressVal(o))
-#define _PixmapVal(o)        (Pixmap)(__externalAddressVal(o))
-#define _GCVal(o)            (GC)(__externalAddressVal(o))
-#define _CursorVal(o)        (Cursor)(__externalAddressVal(o))
-#define _FontVal(o)          (XFontStruct *)(__externalAddressVal(o))
-#define _DPSContextVal(o)    (DPSContext)(__externalAddressVal(o))
+#define __DisplayVal(o)      (Display *)(__externalAddressVal(o))
+#define __DrawableVal(o)     (Drawable)(__externalAddressVal(o))
+#define __WindowVal(o)       (Window)(__externalAddressVal(o))
+#define __PixmapVal(o)       (Pixmap)(__externalAddressVal(o))
+#define __GCVal(o)           (GC)(__externalAddressVal(o))
+#define __CursorVal(o)       (Cursor)(__externalAddressVal(o))
+#define __FontVal(o)         (XFontStruct *)(__externalAddressVal(o))
+#define __DPSContextVal(o)   (DPSContext)(__externalAddressVal(o))
 
 #define __MKATOMOBJ(a)       __MKSMALLINT(a)
-#define _AtomVal(o)          __intVal(o)
+#define __AtomVal(o)         __intVal(o)
 #define __isAtomID(o)        __isSmallInteger(o)
 
-#define myDpy                _DisplayVal(__INST(displayId))
+#define myDpy                __DisplayVal(__INST(displayId))
 #define ISCONNECTED          (__INST(displayId) != nil)
 
 #ifdef __VMS__
@@ -780,7 +783,7 @@
     y1 := y2 := aPoint y truncated.
 %{
     int xpos, ypos;
-    Window w1, w2, child_return;
+    Window w1, w2, child_ret;
     int screen = __intVal(__INST(screen));
 
     if (ISCONNECTED
@@ -790,8 +793,8 @@
 	Display *dpy = myDpy;
 	Window rootWin;
 
-	w1 = _WindowVal(windowId1);
-	w2 = _WindowVal(windowId2);
+	w1 = __WindowVal(windowId1);
+	w2 = __WindowVal(windowId2);
 
 #ifdef VIRTUAL_ROOT
 	rootWin = RootWindow(dpy, screen);
@@ -808,7 +811,7 @@
 	ENTER_XLIB();
 	XTranslateCoordinates(dpy, w1, w2,
 			      __intVal(x1), __intVal(y1), 
-			      &xpos, &ypos, &child_return);
+			      &xpos, &ypos, &child_ret);
 	LEAVE_XLIB();
 
 	x2 = __MKSMALLINT(xpos);
@@ -848,7 +851,7 @@
     int screen = __intVal(__INST(screen));
     OBJ xp, yp;
     int xpos, ypos;
-    Window child_return;
+    Window child_ret;
 
     if (ISCONNECTED
      && __isExternalAddress(windowId)
@@ -862,13 +865,13 @@
 	    ENTER_XLIB();
 	    XTranslateCoordinates(dpy,
 				  RootWindow(dpy, screen),
-				  _WindowVal(windowId),
+				  __WindowVal(windowId),
 				  __intVal(xp), __intVal(yp), 
-				  &xpos, &ypos, &child_return);
+				  &xpos, &ypos, &child_ret);
 	    LEAVE_XLIB();
 
-	    if (child_return) {
-		RETURN ( __MKEXTERNALADDRESS(child_return) );
+	    if (child_ret) {
+		RETURN ( __MKEXTERNALADDRESS(child_ret) );
 	    }
 	    RETURN ( nil );
 	}
@@ -900,7 +903,7 @@
 	unsigned int dummy;
 	int ret;
 
-	vRootWin = _WindowVal(__INST(virtualRootId));
+	vRootWin = __WindowVal(__INST(virtualRootId));
 	ENTER_XLIB();
 	ret = XGetGeometry(myDpy, vRootWin, &root, &x, &y, &width, &height,
 					  &dummy, &dummy);
@@ -1122,23 +1125,6 @@
     "Created: 10.6.1996 / 21:06:48 / cg"
 !
 
-queryAtom:atomName
-    <context: #return>
-%{
-    Display *dpy;
-
-    if (ISCONNECTED) {
-	dpy = myDpy;
-	RETURN ( __MKATOMOBJ( XInternAtom(dpy, __stringVal(atomName), True) ));
-    }
-%}.
-    ^ nil
-
-    "
-     Display queryAtom:'PRIMARY'  
-    "
-!
-
 queryBlackPixel
 %{  /* NOCONTEXT */
 
@@ -1920,7 +1906,7 @@
     bd = BlackPixel(dpy, screen);
 
     if (__isExternalAddress(wsuperViewId)) {
-	parentWindow = _WindowVal(wsuperViewId);
+	parentWindow = __WindowVal(wsuperViewId);
     } else {
 	parentWindow = RootWindow(dpy, screen);
 	isTopWindow = 1;
@@ -2020,17 +2006,17 @@
      */
     if (isTopWindow) {
 	if (__isExternalAddress(wiconId))
-	    iconBitmap = _PixmapVal(wiconId);
+	    iconBitmap = __PixmapVal(wiconId);
 	else
 	    iconBitmap = (Pixmap)0;
 
 	if (__isExternalAddress(wiconMaskId))
-	    iconMask = _PixmapVal(wiconMaskId);
+	    iconMask = __PixmapVal(wiconMaskId);
 	else
 	    iconMask = (Pixmap)0;
 
 	if (__isExternalAddress(wiconViewId))
-	    iconWindow = _WindowVal(wiconViewId);
+	    iconWindow = __WindowVal(wiconViewId);
 	else
 	    iconWindow = (Window)0;
 
@@ -2092,14 +2078,14 @@
 	    LEAVE_XLIB();
 	} else {
 #ifdef USE_QUIT_APP_ATOM
-	    WmQuitAppAtom = _AtomVal(__INST(quitAppAtom));
+	    WmQuitAppAtom = __AtomVal(__INST(quitAppAtom));
 #else
 	    WmQuitAppAtom = 0;
 #endif
-	    WmProtocolsAtom = _AtomVal(__INST(protocolsAtom));
-	    WmDeleteWindowAtom = _AtomVal(__INST(deleteWindowAtom));
+	    WmProtocolsAtom = __AtomVal(__INST(protocolsAtom));
+	    WmDeleteWindowAtom = __AtomVal(__INST(deleteWindowAtom));
 #ifdef USE_SAVEYOURSELF_ATOM
-	    WmSaveYourselfAtom = _AtomVal(__INST(saveYourselfAtom));
+	    WmSaveYourselfAtom = __AtomVal(__INST(saveYourselfAtom));
 #else
 	    WmSaveYourselfAtom = 0;
 #endif
@@ -2136,7 +2122,7 @@
     }
 
     if (__isExternalAddress(aGCId)) {
-	GC gc = _GCVal(aGCId);
+	GC gc = __GCVal(aGCId);
 
 	if (gc) {
 
@@ -2164,7 +2150,7 @@
     }
 
     if (__isExternalAddress(aDrawableId)) {
-	Pixmap pix = _PixmapVal(aDrawableId);
+	Pixmap pix = __PixmapVal(aDrawableId);
 
 	if (pix) {
 
@@ -2200,8 +2186,8 @@
      && ISCONNECTED) {
 
 	ENTER_XLIB();
-	dps = XDPSCreateContext(myDpy, (Drawable)_WindowVal(aDrawableId),
-				       _GCVal(aGCId),
+	dps = XDPSCreateContext(myDpy, __DrawableVal(aDrawableId),
+				       __GCVal(aGCId),
 				       0, height, 0, colormap, NULL, 0,
 				       XDPSDefaultTextBackstop,
 				       XDPSDefaultErrorProc,
@@ -2226,8 +2212,7 @@
     if (__isExternalAddress(aDrawableId) && ISCONNECTED) {
 
 	ENTER_XLIB();
-	gc = XCreateGC(myDpy, (Drawable)_WindowVal(aDrawableId),
-			      0L, (XGCValues *)0);
+	gc = XCreateGC(myDpy, __DrawableVal(aDrawableId), 0L, (XGCValues *)0);
 	LEAVE_XLIB();
 
 #ifdef COUNT_RESOURCES
@@ -2235,7 +2220,6 @@
 	    __cnt_gc++;
 #endif
 
-
 	RETURN ( gc ? __MKEXTERNALADDRESS(gc) : nil );
     }
 %}.
@@ -2371,7 +2355,7 @@
     }
 
     if (__isExternalAddress(aWindowId)) {
-	Window win = _WindowVal(aWindowId);
+	Window win = __WindowVal(aWindowId);
 
 	if (win) {
 
@@ -2930,7 +2914,7 @@
 	bgcolor.blue = __intVal(bgB);
 
 	ENTER_XLIB();
-	XRecolorCursor(myDpy, _CursorVal(aCursorId), &fgcolor, &bgcolor);
+	XRecolorCursor(myDpy, __CursorVal(aCursorId), &fgcolor, &bgcolor);
 	LEAVE_XLIB();
 
 	RETURN ( self );
@@ -2972,7 +2956,7 @@
     }
 
     if (__isExternalAddress(aCursorId)) {
-	Cursor curs = _CursorVal(aCursorId);
+	Cursor curs = __CursorVal(aCursorId);
 
 	if (curs) {
 
@@ -3043,8 +3027,8 @@
 
 	ENTER_XLIB();
 	newCursor = XCreatePixmapCursor(myDpy,
-				_PixmapVal(sourceId),
-				_PixmapVal(maskId),
+				__PixmapVal(sourceId),
+				__PixmapVal(maskId),
 				&fgColor, &bgColor, __intVal(hx), __intVal(hy));
 	LEAVE_XLIB();
 #ifdef COUNT_RESOURCES
@@ -3107,7 +3091,7 @@
     |msgType dropColl dropCollSize anyFile anyDir anyText anyOther
      dropType dropTypeCode strings sz idx val|
 
-    (msgType := self atomIDOf:'DndProtocol') notNil ifTrue:[
+    (msgType := self atomIDOf:#DndProtocol) notNil ifTrue:[
 
 	"/ DND can drop files, file, dir, links, dirLink and text
 	"/ check for this.
@@ -3214,8 +3198,8 @@
 	].
 
 	self
-	    setProperty:(self atomIDOf:'DndSelection')
-	    type:(stringAtom) 
+	    setProperty:(self atomIDOf:#DndSelection)
+	    type:(self atomIDOf:#STRING) 
 	    value:val 
 	    for:rootId.
 
@@ -3225,7 +3209,7 @@
 	    to:destinationId 
 	    data1:dropTypeCode
 	    data2:0
-	    data3:(destinationId)
+	    data3:destinationId
 	    data4:nil
 	    data5:nil.
     ].
@@ -3261,7 +3245,7 @@
     "/
     "/ see, if the display supports the DND protocol ...
     "/
-    (self atomIDOf:'DndProtocol') notNil ifTrue:[
+    (self atomIDOf:#DndProtocol) notNil ifTrue:[
 	^ self
 	    dndDrop:aCollectionOfDropObjects 
 	    inWindowID:destinationId 
@@ -3306,9 +3290,9 @@
 	_dX = __intVal(dstX);
 	_dY = __intVal(dstY);
 
-	gc = _GCVal(dstGCId);
-	source = (Drawable) _WindowVal(sourceId);
-	dest = (Drawable) _WindowVal(destId);
+	gc = __GCVal(dstGCId);
+	source = __DrawableVal(sourceId);
+	dest =   __DrawableVal(destId);
 	ENTER_XLIB();
 	XCopyArea(myDpy, source, dest, gc, _sX, _sY, _w, _h, _dX, _dY);
 	LEAVE_XLIB();
@@ -3343,9 +3327,9 @@
      && __bothSmallInteger(dstX, dstY)) {
 	Display *dpy = myDpy;
 
-	gc = _GCVal(dstGCId);
-	source = (Drawable) _WindowVal(sourceId);
-	dest = (Drawable) _WindowVal(destId);
+	gc = __GCVal(dstGCId);
+	source = __DrawableVal(sourceId);
+	dest =   __DrawableVal(destId);
 	ENTER_XLIB();
 	XSetGraphicsExposures(dpy, gc, 0);
 	XCopyArea(dpy, source, dest, gc,
@@ -3383,9 +3367,9 @@
      && __bothSmallInteger(w, h)
      && __bothSmallInteger(srcX, srcY)
      && __bothSmallInteger(dstX, dstY)) {
-	gc = _GCVal(dstGCId);
-	source = (Drawable) _WindowVal(sourceId);
-	dest = (Drawable) _WindowVal(destId);
+	gc = __GCVal(dstGCId);
+	source = __DrawableVal(sourceId);
+	dest =   __DrawableVal(destId);
 	ENTER_XLIB();
 	XCopyPlane(myDpy, source, dest, gc,
 				 __intVal(srcX), __intVal(srcY),
@@ -3424,9 +3408,9 @@
      && __bothSmallInteger(dstX, dstY)) {
 	Display *dpy = myDpy;
 
-	gc = _GCVal(dstGCId);
-	source = (Drawable) _WindowVal(sourceId);
-	dest = (Drawable) _WindowVal(destId);
+	gc = __GCVal(dstGCId);
+	source = __DrawableVal(sourceId);
+	dest =   __DrawableVal(destId);
 	ENTER_XLIB();
 	XSetGraphicsExposures(dpy, gc, 0);
 	XCopyPlane(dpy, source, dest, gc,
@@ -3481,8 +3465,8 @@
      && __isExternalAddress(aDrawableId)
      && __bothSmallInteger(x, y)
      && __bothSmallInteger(width, height)) {
-	win = _WindowVal(aDrawableId);
-	gc = _GCVal(aGCId);
+	win = __WindowVal(aDrawableId);
+	gc = __GCVal(aGCId);
 	w = __intVal(width);
 	h = __intVal(height);
 	/*
@@ -3519,8 +3503,8 @@
      && __bothSmallInteger(x0, y0)
      && __bothSmallInteger(x1, y1)) {
 	Display *dpy = myDpy;
-	gc = _GCVal(aGCId);
-	win = _WindowVal(aDrawableId);
+	gc = __GCVal(aGCId);
+	win = __WindowVal(aDrawableId);
 
 	ENTER_XLIB();
 	if ((x0 == x1) && (y0 == y1)) {
@@ -3564,8 +3548,8 @@
     if (ISCONNECTED
      && __isExternalAddress(aGCId)
      && __isExternalAddress(aDrawableId) ) {
-	gc = _GCVal(aGCId);
-	win = _WindowVal(aDrawableId);
+	gc = __GCVal(aGCId);
+	win = __WindowVal(aDrawableId);
 
 	if( __isSmallInteger(scaleY) ) 
 	    sY = (float) __intVal( scaleY );
@@ -3676,8 +3660,8 @@
      && __isExternalAddress(aGCId)
      && __isExternalAddress(aDrawableId)
      && __bothSmallInteger(x, y)) {
-	gc = _GCVal(aGCId);
-	win = _WindowVal(aDrawableId);
+	gc = __GCVal(aGCId);
+	win = __WindowVal(aDrawableId);
 
 	ENTER_XLIB();
 	XDrawPoint(myDpy, win, gc, __intVal(x), __intVal(y));
@@ -3713,8 +3697,8 @@
      && __isExternalAddress(aGCId)
      && __isExternalAddress(aDrawableId)
      && __isSmallInteger(numberOfPoints)) {
-	gc = _GCVal(aGCId);
-	win = _WindowVal(aDrawableId);
+	gc = __GCVal(aGCId);
+	win = __WindowVal(aDrawableId);
 	num = __intVal(numberOfPoints);
 	/*
 	 * avoid a (slow) malloc, if the number of points is small
@@ -3768,8 +3752,8 @@
      && __isExternalAddress(aDrawableId)
      && __bothSmallInteger(x, y)
      && __bothSmallInteger(width, height)) {
-	gc = _GCVal(aGCId);
-	win = _WindowVal(aDrawableId);
+	gc = __GCVal(aGCId);
+	win = __WindowVal(aDrawableId);
 	w = __intVal(width);
 	h = __intVal(height);
 	/*
@@ -3812,8 +3796,8 @@
      && __bothSmallInteger(x, y)) {
 	int lMax = __intVal(@global(XWorkstation:MaxStringLength));
 	Display *dpy = myDpy;
-	gc = _GCVal(aGCId);
-	win = _WindowVal(aDrawableId);
+	gc = __GCVal(aGCId);
+	win = __WindowVal(aDrawableId);
 	cls = __qClass(aString);
 
 	i1 = __intVal(index1) - 1;
@@ -3943,8 +3927,8 @@
      && __bothSmallInteger(x, y)) {
 	int lMax = __intVal(@global(XWorkstation:MaxStringLength));
 	Display *dpy = myDpy;
-	gc = _GCVal(aGCId);
-	win = _WindowVal(aDrawableId);
+	gc = __GCVal(aGCId);
+	win = __WindowVal(aDrawableId);
 	cls = __qClass(aString);
 
 	cp = (char *) __stringVal(aString);
@@ -4140,8 +4124,8 @@
      && __isExternalAddress(aDrawableId)
      && __bothSmallInteger(x, y)
      && __bothSmallInteger(width, height)) {
-	gc = _GCVal(aGCId);
-	win = _WindowVal(aDrawableId);
+	gc = __GCVal(aGCId);
+	win = __WindowVal(aDrawableId);
 	w = __intVal(width);
 	h = __intVal(height);
 	/*
@@ -4185,8 +4169,8 @@
      && __isExternalAddress(aGCId)
      && __isExternalAddress(aDrawableId)
      && __isSmallInteger(numberOfPoints)) {
-	gc = _GCVal(aGCId);
-	win = _WindowVal(aDrawableId);
+	gc = __GCVal(aGCId);
+	win = __WindowVal(aDrawableId);
 	num = __intVal(numberOfPoints);
 	if (num < 3) {
 	    RETURN ( self );
@@ -4247,7 +4231,7 @@
 	if ((w >= 0) && (h >= 0)) {
 	    ENTER_XLIB();
 	    XFillRectangle(myDpy,
-			   (Drawable)_WindowVal(aDrawableId), _GCVal(aGCId),
+			   __DrawableVal(aDrawableId), __GCVal(aGCId),
 			   __intVal(x), __intVal(y), w, h);
 	    LEAVE_XLIB();
 	}
@@ -4295,8 +4279,8 @@
 	Display *dpy = myDpy;
 	int pad = __intVal(bitPadding);
 
-	gc = _GCVal(aGCId);
-	win = _WindowVal(aDrawableId);
+	gc = __GCVal(aGCId);
+	win = __WindowVal(aDrawableId);
 	if (! gc || !win) 
 	    goto fail;
 #ifdef ARGDEBUG
@@ -4403,44 +4387,20 @@
     buttonsPressed := buttonsPressed bitOr:(1 bitShift:logicalButton-1).
 
     multiClickTimeDelta notNil ifTrue:[
-        nextMultiClickTime := time + multiClickTimeDelta.
-        multiClickTime notNil ifTrue:[
-            time < multiClickTime ifTrue:[
-                multiClickTime := nextMultiClickTime.
-                self buttonMultiPress:logicalButton x:x y:y view:view.
-                ^ self.
-            ]
-        ].
-        multiClickTime := nextMultiClickTime.
+	nextMultiClickTime := time + multiClickTimeDelta.
+	multiClickTime notNil ifTrue:[
+	    time < multiClickTime ifTrue:[
+		multiClickTime := nextMultiClickTime.
+		self buttonMultiPress:logicalButton x:x y:y view:view.
+		^ self.
+	    ]
+	].
+	multiClickTime := nextMultiClickTime.
     ].
 
     self buttonPress:logicalButton x:x y:y view:view
 !
 
-buttonPress:button x:x y:y view:aView
-    "forward a button-press event for some view"
-
-    aView isNil ifTrue:[
-	"/ event arrived, after I destroyed it myself
-	^ self
-    ].
-    button == 1 ifTrue:[
-	activateOnClick == true ifTrue:[
-	    "/ dont raise above an active popup view.
-	    (activeKeyboardGrab isNil and:[activePointerGrab isNil]) ifTrue:[
-		aView topView raise.
-"/            ] ifFalse:[
-"/                activeKeyboardGrab printCR.
-"/                activePointerGrab printCR.
-	    ]
-	].
-    ].
-    super buttonPress:button x:x y:y view:aView
-
-
-
-!
-
 buttonRelease:view button:button state:state x:x y:y rootX:rX rootY:rY time:time
     "forward a buttonPress event for some view"
 
@@ -4462,39 +4422,30 @@
     self buttonRelease:logicalButton x:x y:y view:view
 !
 
-circulateNotifyView:aView
+circulateNotify:aView place:aSymbol
     "sent, when the stacking order changes.
      ignored for now."
 
 !
 
-circulateRequestView:aView
+circulateRequest:aView place:aSymbol
     "sent, when the stacking order is about to change.
      ignored for now."
 !
 
-clientMessage:event dataOffset:offs view:targetView
-    self halt:'debug halt: unimplemented client message'.
-
-    "Created: 4.4.1997 / 17:23:12 / cg"
-    "Modified: 17.6.1997 / 18:04:24 / cg"
-!
-
-clientMessage:event type:type format:format dataOffset:offs view:targetView
-    |sensor data|
-
-    data := event copyFrom:offs + 1.
+clientMessage:targetView type:typeAtom format:format data:data
+    |sensor|
 
     "/ DND drag&drop protocol
-    type == (self atomIDOf:'DndProtocol') ifTrue:[
+    typeAtom == (self atomIDOf:#DndProtocol) ifTrue:[
 	format == 32 ifTrue:[
-	    self dndMessage:event data:data view:targetView.
+	    self dndMessage:nil data:data view:targetView.
 	    ^ self
 	]
     ].
 
     (sensor := targetView sensor) notNil ifTrue:[
-	sensor clientMessage:type format:format eventData:data view:targetView
+	sensor clientMessage:typeAtom format:format eventData:data view:targetView
     ] ifFalse:[
 	"
 	 not posted, if there is no sensor ...
@@ -4505,7 +4456,7 @@
     "Modified: 4.4.1997 / 18:00:18 / cg"
 !
 
-colorMapChangeView:aView
+colorMapNotify:aView state:aBoolean
     "sent, when another colormap is installed.
      This is a very X-specific mechanism."
 
@@ -4522,16 +4473,12 @@
     self configureX:x y:y width:w height:h view:view
 !
 
-configureRequestView:aView
+configureRequest:view x:x y:y width:w height:h above:above detail:detail
     "ignored for now"
 
-    "/ aView configureRequest
-!
-
-createdView:aView
-    "ignored for now"
-
-    "/ aView created
+    "/ view configureRequest
+
+
 !
 
 dndMessage:event data:data view:targetView
@@ -4545,7 +4492,7 @@
     dropType := (self dndDropTypes) at:dropType+1 ifAbsent:#DndNotDnd.
 
     self 
-	getProperty:(self atomIDOf:'DndSelection')
+	getProperty:(self atomIDOf:#DndSelection)
 	from:rootId
 	into:[:type :value |
 	    t := type.
@@ -4676,7 +4623,7 @@
 
 !
 
-gravityNotifyView:aView
+gravityNotify:aView x:x y:y
     "ignored for now"
 
     "/ aView gravityNotify
@@ -4724,10 +4671,30 @@
 
 !
 
-mapRequestView:aView
+keymapNotify:aView
+    "ignore for now"
+
+!
+
+mapRequest:aView
     "ignored for now"
 
     "/ aView mapRequest
+
+
+
+!
+
+mappingNotify:view request:what event:eB
+    "One of Keyboard-, Modifier- or PointerMap has changed, probably by xmodmap.
+     Tell xlib about the fact."
+
+    (what == #mappingKeyboard or:[what == #mappingModifier]) ifTrue:[
+	self refreshKeyboardMapping:eB.
+	"Maybe some of our modifiers have been changed"
+	self initializeModifierMappings.
+    ].
+
 !
 
 pointerEnter:view x:x y:y rootX:rX rootY:rY state:state mode:mode detail:detail time:time
@@ -4756,7 +4723,7 @@
     self pointerLeave:state view:view
 !
 
-propertyChangeView:aView
+propertyChange:aView atom:atom state:aSymbol time:time
     "sent when an X property changes.
      This is a very X-specific mechanism."
 
@@ -4773,7 +4740,7 @@
     "/ aView reparented
 !
 
-resizeRequestView:aView
+resizeRequest:aView width:width height:height
     "ignored for now"
 
     "/ aView resizeRequest
@@ -4797,42 +4764,6 @@
 
 !
 
-selectionClear:aView selection:selectionID time:time
-    "sent when another X-client has created a selection.
-     This is a very X-specific mechanism."
-
-    "/
-    "/ workaround a bug in olvwm: it clears selections
-    "/ on window raise.
-    "/ In this case, keep my last own selection.
-    "/
-
-    self setLastCopyBuffer:(self getCopyBuffer).
-    self setCopyBuffer:nil
-
-    "/ noone is interested in that ...
-    "/ aView selectionClear:selectionID
-!
-
-selectionClear:selectionID view:aView
-    "OBSOLETE - this will vanish"
-
-    "sent when another X-client has created a selection.
-     This is a very X-specific mechanism."
-
-    "/
-    "/ workaround a bug in olvwm: it clears selections
-    "/ on window raise.
-    "/ In this case, keep my last own selection.
-    "/
-
-    self setLastCopyBuffer:(self getCopyBuffer).
-    self setCopyBuffer:nil
-
-    "/ noone is interested in that ...
-    "/ aView selectionClear:selectionID
-!
-
 selectionNotify:aView selection:selectionID  target:targetID property:propertyID requestor:requestorID time:time
     "sent when the server returns an answer from a request for a selection.
      This is a very X-specific mechanism."
@@ -4843,47 +4774,7 @@
 	"invalid olvwm behavior"
 	s := self getLastCopyBuffer
     ] ifFalse:[
-	targetID == self atomIDOfSTRING ifTrue:[
-	    "
-	     a returned string
-	    "
-	    s := self getTextProperty:propertyID from:requestorID.
-	    s notNil ifTrue:[
-		(s endsWith:Character cr) ifTrue:[
-		    s := s asStringCollection copyWith:''
-		]
-	    ]
-	] ifFalse:[
-	    "
-	     a returned object
-	    "
-	    s := self getObjectProperty:propertyID from:requestorID.
-	].
-    ].
-
-    s notNil ifTrue:[
-	(sensor := aView sensor) notNil ifTrue:[
-	    sensor pasteFromClipBoard:s view:aView
-	] ifFalse:[
-	    "
-	     if there is no sensor ...
-	    "
-	    aView pasteFromClipBoard:s
-	]
-    ]
-!
-
-selectionNotify:propertyID target:targetID selection:selectionID from:requestorID view:aView
-    "sent when the server returns an answer from a request for a selection.
-     This is a very X-specific mechanism."
-
-    |s sensor|
-
-    propertyID == 0 ifTrue:[
-	"invalid olvwm behavior"
-	s := self getLastCopyBuffer
-    ] ifFalse:[
-	targetID == self atomIDOfSTRING ifTrue:[
+	targetID == (self atomIDOf:#STRING) ifTrue:[
 	    "
 	     a returned string
 	    "
@@ -4917,11 +4808,11 @@
     "sent by some other X-client to ask for the selection.
      This is a very X-specific mechanism."
 
-    |o s stream|
+    |o s stream stringAtom|
 
 "/targetID printCR.
 
-    targetID == (self atomIDOfLENGTH) ifTrue:[
+    targetID == (self atomIDOf:#LENGTH) ifTrue:[
 	"/
 	"/ the other one wants to know the size of our selection ...
 	"/
@@ -4941,8 +4832,9 @@
 	^ self
     ].
 
-    (targetID == self atomIDOfSTRING or:[
-     targetID == (self atomIDOf:'COMPOUND_TEXT')]) ifTrue:[
+    stringAtom := self atomIDOf:#STRING.
+    (targetID == stringAtom or:[
+     targetID == (self atomIDOf:#'COMPOUND_TEXT')]) ifTrue:[
 	"/
 	"/ the other view wants the selection as string
 	"/
@@ -4952,20 +4844,20 @@
 	    sendSelection:s 
 	    selection:primaryAtom
 	    property:propertyID 
-	    target:self atomIDOfSTRING "/ targetID, once I can provide compountText as well
+	    target:stringAtom           "/ targetID, once I can provide compountText as well
 	    time:time
 	    from:requestorID
 	    to:requestorID.
 	^ self
     ].
 
-"/    (targetID == (self atomIDOf:'TARGETS')) ifTrue:[
+"/    (targetID == (self atomIDOf:#'TARGETS')) ifTrue:[
 "/"/ TODO: implement this to avoid netscape paste-delay.
 "/"/
 "/        ^ self
 "/    ].
 
-    (targetID == (self atomIDOf:'ST_OBJECT')) ifTrue:[
+    (targetID == (self atomIDOf:#'ST_OBJECT')) ifTrue:[
 	"/
 	"/ send the selection in binaryStore format
 	"/ (assuming, that the other view knows how to handle it)
@@ -4986,77 +4878,6 @@
 
 !
 
-selectionRequest:propertyID target:targetID selection:selectionID time:t from:windowID view:aView
-    "sent by some other X-client to ask for the selection.
-     This is a very X-specific mechanism."
-
-    |o s stream|
-
-    targetID == (self atomIDOfLENGTH) ifTrue:[
-	"/
-	"/ the other one wants to know the size of our selection ...
-	"/
-	s := self selectionAsString.
-	self
-	    setLengthProperty:propertyID 
-	    value:s size 
-	    for:windowID.
-	self
-	    sendSelectionNotifySelection:selectionID
-	    property:propertyID
-	    target:targetID
-	    time:t
-	    from:aView id
-	    to:windowID.
-	^ self
-    ].
-
-    (targetID == self atomIDOfSTRING or:[
-     targetID == (self atomIDOf:'COMPOUND_TEXT')]) ifTrue:[
-	"/
-	"/ the other view wants the selection as string
-	"/
-	s := self selectionAsString.
-	self
-	    sendSelection:s 
-	    selection:primaryAtom
-	    property:propertyID 
-	    target:self atomIDOfSTRING "/ targetID
-	    time:t
-	    from:windowID
-	    to:windowID.
-	^ self
-    ].
-
-"/    (targetID == (self atomIDOf:'TARGETS')) ifTrue:[
-"/"/ TODO: implement this to avoid netscape paste-delay.
-"/"/
-"/        ^ self
-"/    ].
-
-    (targetID == (self atomIDOf:'ST_OBJECT')) ifTrue:[
-	"/
-	"/ send the selection in binaryStore format
-	"/ (assuming, that the other view knows how to handle it)
-	"/
-	o := self getCopyBuffer.
-	stream := WriteStream on:(ByteArray new:200).
-	o storeBinaryOn:stream.
-
-	^ self
-	    sendSelection:(stream contents) 
-	    selection:primaryAtom
-	    property:propertyID 
-	    target:targetID 
-	    time:t
-	    from:windowID 
-	    to:windowID
-    ].
-
-    "Created: / 17.6.1998 / 19:33:10 / cg"
-    "Modified: / 17.6.1998 / 20:24:40 / cg"
-!
-
 visibilityNotify:aView state:how
     aView notNil ifTrue:[
 	aView visibilityChange:how
@@ -5069,11 +4890,11 @@
 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
     "
 %{ 
 #   define ANYBUTTON   (Button1MotionMask | Button2MotionMask | Button3MotionMask)
@@ -5103,7 +4924,7 @@
 #   define cme ((XColormapEvent *)ev)
 
     KeySym keySym;
-    unsigned char buffer[10];
+    unsigned char buffer[10];                                               
     int i, nchars;
     char *keySymString;
     char keySymStringBuffer[32];
@@ -5113,382 +4934,385 @@
     eB = aByteArray;
 
     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);
     }
     if (!__isArray(eventArr)) {
-        printf("DISPLAY: bad argument\n");
-        RETURN (false);
+	printf("DISPLAY: bad argument\n");
+	RETURN (false);
     }
     if (__arraySize(eventArr) < 11) {
-        printf("DISPLAY: bad argument\n");
-        RETURN (false);
+	printf("DISPLAY: bad argument\n");
+	RETURN (false);
     }
 
     if (((t = __INST(lastId)) != nil)
      && __isExternalAddress(t)
-     && (_WindowVal(t) == ae->window)) {
-        windowID = 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);
-                }
-            }
-
-            if (arg == nil) {
-                /* happens sometimes (alt-graph on sun has no keysym) */
-                RETURN (false);
-            }
-
-            __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;
-            }
-            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] = nil;
-                    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] = nil;
-                    break;
-            }
-            RETURN (true);
-            break;
-
-        case PropertyNotify:
-            __ArrayInstPtr(eventArr)->a_element[2] = @symbol(propertyChange:atom:state:time:);
-            __ArrayInstPtr(eventArr)->a_element[3] = t = __MKUINT(pe->atom); __STORE(eventArr, t);
-            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] = nil;
-                    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] = t = __MKUINT(sce->selection); __STORE(eventArr, t);
-            __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 = __MKUINT(ev->xselectionrequest.requestor); __STORE(eventArr, t);
-            __ArrayInstPtr(eventArr)->a_element[4] = t = __MKUINT(ev->xselectionrequest.selection); __STORE(eventArr, t);
-            __ArrayInstPtr(eventArr)->a_element[5] = t = __MKUINT(ev->xselectionrequest.target);    __STORE(eventArr, t);
-            __ArrayInstPtr(eventArr)->a_element[6] = t = __MKUINT(ev->xselectionrequest.property);  __STORE(eventArr, t);
-            __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] = t = __MKUINT(ev->xselection.selection); __STORE(eventArr, t);
-            __ArrayInstPtr(eventArr)->a_element[4] = t = __MKUINT(ev->xselection.target);    __STORE(eventArr, t);
-            __ArrayInstPtr(eventArr)->a_element[5] = t = __MKUINT(ev->xselection.property);  __STORE(eventArr, t);
-            __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] = __MKSMALLINT(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;
+	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);
+		}
+	    }
+
+	    if (arg == nil) {
+		/* happens sometimes (alt-graph on sun has no keysym) */
+		RETURN (false);
+	    }
+
+	    __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] = t = __MKATOMOBJ(pe->atom); __STORE(eventArr, t);
+	    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] = t = __MKATOMOBJ(sce->selection); __STORE(eventArr, t);
+	    __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] = t = __MKATOMOBJ(ev->xselectionrequest.selection); __STORE(eventArr, t);
+	    __ArrayInstPtr(eventArr)->a_element[5] = t = __MKATOMOBJ(ev->xselectionrequest.target);    __STORE(eventArr, t);
+	    __ArrayInstPtr(eventArr)->a_element[6] = t = __MKATOMOBJ(ev->xselectionrequest.property);  __STORE(eventArr, t);
+	    __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] = t = __MKATOMOBJ(ev->xselection.selection); __STORE(eventArr, t);
+	    __ArrayInstPtr(eventArr)->a_element[4] = t = __MKATOMOBJ(ev->xselection.target);    __STORE(eventArr, t);
+	    __ArrayInstPtr(eventArr)->a_element[5] = t = __MKATOMOBJ(ev->xselection.property);  __STORE(eventArr, t);
+	    __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;
 
 
     }
@@ -5563,32 +5387,32 @@
 !
 
 dispatchLastEvent:evArray
-    |viewId view evTypeNr evType arguments|
+    |viewId view evType arguments|
 
     evArray size < 3 ifTrue:[
 '********** bad event:' errorPrintCR.
 evArray errorPrintCR.
 '********** see newDispatchLastEvent' errorPrintCR.
-        ^ self.
+	^ self.
     ].
 
     viewId := evArray at:1.
     viewId notNil ifTrue:[
-        viewId = lastId ifTrue:[
-            view := lastView
-        ] ifFalse:[
-            view := self viewFromId:viewId
-        ].
+	viewId = lastId ifTrue:[
+	    view := lastView
+	] ifFalse:[
+	    view := self viewFromId:viewId
+	].
     ].
 
     evType := evArray at:3.
 
     (self respondsTo:evType) ifTrue:[
-        arguments := evArray copyFrom:3 to:(3 + evType numArgs - 1).
-        arguments at:1 put:view.
-
-        self perform:evType withArguments:arguments.
-        ^ true.
+	arguments := evArray copyFrom:3 to:(3 + evType numArgs - 1).
+	arguments at:1 put:view.
+
+	self perform:evType withArguments:arguments.
+	^ true.
     ].
 '********** unhandled event:' errorPrintCR.
 evType errorPrintCR.
@@ -5644,7 +5468,7 @@
 
 	ENTER_XLIB();
 	if (__isExternalAddress(aWindowIdOrNil)) {
-	    win = _WindowVal(aWindowIdOrNil);
+	    win = __WindowVal(aWindowIdOrNil);
 	    while (XCheckWindowEvent(dpy, win, __intVal(aMask), &ev)) ;;
 	} else {
 	    while (XCheckMaskEvent(dpy, __intVal(aMask), &ev)) ;;
@@ -5726,7 +5550,7 @@
 	    XSync(dpy, 0);      /* make certain everything is flushed */
 	}
 	if (__isExternalAddress(aWindowIdOrNil)) {
-	    win = _WindowVal(aWindowIdOrNil);
+	    win = __WindowVal(aWindowIdOrNil);
 	    thereIsOne = XCheckWindowEvent(dpy, win, __intVal(anEventMask), &ev);
 	} else {
 	    thereIsOne = XCheckMaskEvent(dpy, __intVal(anEventMask), &ev);
@@ -5824,7 +5648,7 @@
 	    XSync(dpy, 0);      /* make certain everything is flushed */
 	}
 	if (__isExternalAddress(aWindowIdOrNil)) {
-	    win = _WindowVal(aWindowIdOrNil);
+	    win = __WindowVal(aWindowIdOrNil);
 	    thereIsOne = XCheckWindowEvent(dpy, win, ExposureMask, &ev);
 	} else {
 	    thereIsOne = XCheckMaskEvent(dpy, ExposureMask, &ev);
@@ -5892,7 +5716,7 @@
     }
 
     if (__isExternalAddress(aViewIdOrNil)) {
-	wWanted = _WindowVal(aViewIdOrNil);
+	wWanted = __WindowVal(aViewIdOrNil);
 	if (XCheckWindowEvent(dpy, wWanted, evMask, ev)) {
 	    RETURN ( true );
 	}
@@ -5922,18 +5746,6 @@
     dispatchingExpose := aView id
 !
 
-mappingNotify:view request:what event:eB
-    "One of Keyboard-, Modifier- or PointerMap has changed, probably by xmodmap.
-     Tell xlib about the fact."
-
-    (what == #mappingKeyboard or:[what == #mappingModifier]) ifTrue:[
-        self refreshKeyboardMapping:eB.
-        "Maybe some of our modifiers have been changed"
-        self initializeModifierMappings.
-    ].
-
-!
-
 newDispatchLastEvent
     |arr|
 
@@ -5967,7 +5779,7 @@
 #endif
 
 	ENTER_XLIB();
-	XSelectInput(myDpy, _WindowVal(aWindowId), mask);
+	XSelectInput(myDpy, __WindowVal(aWindowId), mask);
 	LEAVE_XLIB();
 	RETURN ( self );
     }
@@ -5985,6 +5797,89 @@
 
 !XWorkstation methodsFor:'event handling - old dispatch'!
 
+buttonPress:button x:x y:y view:aView
+    "forward a button-press event for some view"
+
+    aView isNil ifTrue:[
+	"/ event arrived, after I destroyed it myself
+	^ self
+    ].
+    button == 1 ifTrue:[
+	activateOnClick == true ifTrue:[
+	    "/ dont raise above an active popup view.
+	    (activeKeyboardGrab isNil and:[activePointerGrab isNil]) ifTrue:[
+		aView topView raise.
+"/            ] ifFalse:[
+"/                activeKeyboardGrab printCR.
+"/                activePointerGrab printCR.
+	    ]
+	].
+    ].
+    super buttonPress:button x:x y:y view:aView
+
+
+
+!
+
+circulateNotifyView:aView
+    "sent, when the stacking order changes.
+     ignored for now."
+
+!
+
+circulateRequestView:aView
+    "sent, when the stacking order is about to change.
+     ignored for now."
+!
+
+clientMessage:event type:type format:format dataOffset:offs view:targetView
+    |sensor data|
+
+    data := event copyFrom:offs + 1.
+
+    "/ DND drag&drop protocol
+    type == (self atomIDOf:#DndProtocol) ifTrue:[
+	format == 32 ifTrue:[
+	    self dndMessage:event data:data view:targetView.
+	    ^ self
+	]
+    ].
+
+    (sensor := targetView sensor) notNil ifTrue:[
+	sensor clientMessage:type format:format eventData:data view:targetView
+    ] ifFalse:[
+	"
+	 not posted, if there is no sensor ...
+	"
+    ]
+
+    "Created: 4.4.1997 / 17:49:26 / cg"
+    "Modified: 4.4.1997 / 18:00:18 / cg"
+!
+
+colorMapChangeView:aView
+    "sent, when another colormap is installed.
+     This is a very X-specific mechanism."
+
+    aView isNil ifTrue:[
+	"/ event arrived, after I destroyed it myself
+	^ self
+    ].
+    aView colorMapChange
+!
+
+configureRequestView:aView
+    "ignored for now"
+
+    "/ aView configureRequest
+!
+
+createdView:aView
+    "ignored for now"
+
+    "/ aView created
+!
+
 dispatchLastEvent
     |theView symS arg butt sibling 
      windowID siblingID propertyID selectionID targetID requestorID
@@ -6084,7 +5979,7 @@
      */
     if ((t = __INST(lastId)) != nil) {
 	if (__isExternalAddress(t)) {
-	    if (_WindowVal(t) == ae->window) {
+	    if (__WindowVal(t) == ae->window) {
 		theView = __INST(lastView);
 		if (__isNonNilObject(theView)) {
 		    if (__qClass(theView) == nil) {
@@ -6432,14 +6327,14 @@
 	    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)))) {
+	    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))) {
+		if (ev->xclient.data.l[0] == (int) __AtomVal(__INST(saveYourselfAtom))) {
 		    (*savtermS.ilc_func)(self, 
 					 @symbol(saveAndTerminateView:)
 					 , nil, &savtermS, theView);
@@ -6653,18 +6548,178 @@
     ^ true
 !
 
+gravityNotifyView:aView
+    "ignored for now"
+
+    "/ aView gravityNotify
+!
+
+mapRequestView:aView
+    "ignored for now"
+
+    "/ aView mapRequest
+!
+
 mappingChanged:what event:eB
     "OBSOLETE with newDispatchLastEvent!!
      One of Keyboard-, Modifier- or PointerMap has change, probably by xmodmap.
      Tell xlib about the fact."
 
     (what == #mappingKeyboard or:[what == #mappingModifier]) ifTrue:[
-        self refreshKeyboardMapping:eB.
-        "Maybe some of our modifiers have been changed"
-        self initializeModifierMappings.
+	self refreshKeyboardMapping:eB.
+	"Maybe some of our modifiers have been changed"
+	self initializeModifierMappings.
     ].
 
     "Created: 1.12.1995 / 16:28:23 / stefan"
+!
+
+propertyChangeView:aView
+    "sent when an X property changes.
+     This is a very X-specific mechanism."
+
+    aView isNil ifTrue:[
+	"/ event arrived, after I destroyed it myself
+	^ self
+    ].
+    aView propertyChange
+!
+
+resizeRequestView:aView
+    "ignored for now"
+
+    "/ aView resizeRequest
+!
+
+selectionClear:selectionID view:aView
+    "OBSOLETE - this will vanish"
+
+    "sent when another X-client has created a selection.
+     This is a very X-specific mechanism."
+
+    "/
+    "/ workaround a bug in olvwm: it clears selections
+    "/ on window raise.
+    "/ In this case, keep my last own selection.
+    "/
+
+    self setLastCopyBuffer:(self getCopyBuffer).
+    self setCopyBuffer:nil
+
+    "/ noone is interested in that ...
+    "/ aView selectionClear:selectionID
+!
+
+selectionNotify:propertyID target:targetID selection:selectionID from:requestorID view:aView
+    "sent when the server returns an answer from a request for a selection.
+     This is a very X-specific mechanism."
+
+    |s sensor|
+
+    propertyID == 0 ifTrue:[
+	"invalid olvwm behavior"
+	s := self getLastCopyBuffer
+    ] ifFalse:[
+	targetID == (self atomIDOf:#STRING) ifTrue:[
+	    "
+	     a returned string
+	    "
+	    s := self getTextProperty:propertyID from:requestorID.
+	    s notNil ifTrue:[
+		(s endsWith:Character cr) ifTrue:[
+		    s := s asStringCollection copyWith:''
+		]
+	    ]
+	] ifFalse:[
+	    "
+	     a returned object
+	    "
+	    s := self getObjectProperty:propertyID from:requestorID.
+	].
+    ].
+
+    s notNil ifTrue:[
+	(sensor := aView sensor) notNil ifTrue:[
+	    sensor pasteFromClipBoard:s view:aView
+	] ifFalse:[
+	    "
+	     if there is no sensor ...
+	    "
+	    aView pasteFromClipBoard:s
+	]
+    ]
+!
+
+selectionRequest:propertyID target:targetID selection:selectionID time:t from:windowID view:aView
+    "sent by some other X-client to ask for the selection.
+     This is a very X-specific mechanism."
+
+    |o s stream stringAtom|
+
+    targetID == (self atomIDOf:#LENGTH) ifTrue:[
+	"/
+	"/ the other one wants to know the size of our selection ...
+	"/
+	s := self selectionAsString.
+	self
+	    setLengthProperty:propertyID 
+	    value:s size 
+	    for:windowID.
+	self
+	    sendSelectionNotifySelection:selectionID
+	    property:propertyID
+	    target:targetID
+	    time:t
+	    from:aView id
+	    to:windowID.
+	^ self
+    ].
+
+    stringAtom := self atomIDOf:#STRING.
+    (targetID == stringAtom or:[
+     targetID == (self atomIDOf:#'COMPOUND_TEXT')]) ifTrue:[
+	"/
+	"/ the other view wants the selection as string
+	"/
+	s := self selectionAsString.
+	self
+	    sendSelection:s 
+	    selection:primaryAtom
+	    property:propertyID 
+	    target:stringAtom           "/ targetID
+	    time:t
+	    from:windowID
+	    to:windowID.
+	^ self
+    ].
+
+"/    (targetID == (self atomIDOf:#'TARGETS')) ifTrue:[
+"/"/ TODO: implement this to avoid netscape paste-delay.
+"/"/
+"/        ^ self
+"/    ].
+
+    (targetID == (self atomIDOf:#'ST_OBJECT')) ifTrue:[
+	"/
+	"/ send the selection in binaryStore format
+	"/ (assuming, that the other view knows how to handle it)
+	"/
+	o := self getCopyBuffer.
+	stream := WriteStream on:(ByteArray new:200).
+	o storeBinaryOn:stream.
+
+	^ self
+	    sendSelection:(stream contents) 
+	    selection:primaryAtom
+	    property:propertyID 
+	    target:targetID 
+	    time:t
+	    from:windowID 
+	    to:windowID
+    ].
+
+    "Created: / 17.6.1998 / 19:33:10 / cg"
+    "Modified: / 17.6.1998 / 20:24:40 / cg"
 ! !
 
 !XWorkstation methodsFor:'event sending'!
@@ -6750,7 +6805,7 @@
 	}
 
 	if (__isExternalAddress(targetWindowID)) {
-	    ev.xclient.window = _WindowVal(targetWindowID);
+	    ev.xclient.window = __WindowVal(targetWindowID);
 	} else {
 	    ev.xclient.window = (Window)__longIntVal(targetWindowID);
 	}
@@ -6870,7 +6925,7 @@
 	    ev.xany.type = ButtonRelease;
 
 	if (__isExternalAddress(targetId)) {
-	    target = _WindowVal(targetId);
+	    target = __WindowVal(targetId);
 	} else {
 	    target = (Window) __longIntVal(targetId);
 	}
@@ -7087,7 +7142,7 @@
 
 	if (__isExternalAddress(aFontId)) {
         
-	    f = _FontVal(aFontId);
+	    f = __FontVal(aFontId);
 	    if (f) {
 		n = f->n_properties;
 		prop = f->properties;
@@ -7241,7 +7296,7 @@
 
     if (ISCONNECTED) {
 	if (__isExternalAddress(fontId)) {
-	    f = _FontVal(fontId);
+	    f = __FontVal(fontId);
 	    if (f) {
 #ifdef NOTDEF
 		char *cp;
@@ -7334,7 +7389,7 @@
 	Display *dpy = myDpy;
 
 	if (__isExternalAddress(fontId)) {
-	    f = _FontVal(fontId);
+	    f = __FontVal(fontId);
 	    if (f) {
 		char *cp;
 		XFontProp *prop;
@@ -7393,7 +7448,7 @@
 
 	if (__isExternalAddress(aFontId)) {
         
-	    f = _FontVal(aFontId);
+	    f = __FontVal(aFontId);
 	    if (f) {
 		n = f->n_properties;
 		prop = f->properties;
@@ -7815,7 +7870,7 @@
     }
 
     if (__isExternalAddress(aFontId)) {
-	f = _FontVal(aFontId);
+	f = __FontVal(aFontId);
 	if (f) {
 
 	    ENTER_XLIB();
@@ -7873,7 +7928,7 @@
 	 && __isExternalAddress(aFontId)
 	 && __isNonNilObject(aString)) {
 	    int lMax = __intVal(@global(XWorkstation:MaxStringLength));
-	    f = _FontVal(aFontId);
+	    f = __FontVal(aFontId);
 	    if (! f) goto fail;
 
 	    i1 = __intVal(index1) - 1;
@@ -7993,7 +8048,7 @@
 	if (__isExternalAddress(aFontId)
 	 && __isNonNilObject(aString)) {
 	    int lMax = __intVal(@global(XWorkstation:MaxStringLength));
-	    f = _FontVal(aFontId);
+	    f = __FontVal(aFontId);
 	    if (! f) goto fail;
 
 	    cls = __qClass(aString);
@@ -8130,7 +8185,7 @@
 
 	    ENTER_XLIB();
 	    result = XGrabKeyboard(myDpy,
-				   _WindowVal(aWindowId),
+				   __WindowVal(aWindowId),
 				   True /* False */,
 				   GrabModeAsync,
 				   GrabModeAsync,
@@ -8192,12 +8247,12 @@
     if (ISCONNECTED) {
 	if (__isExternalAddress(aWindowId)) {
 	    if (__isExternalAddress(confineId)) 
-		confineWin = _WindowVal(confineId);
+		confineWin = __WindowVal(confineId);
 	    else
 		confineWin = (Window) None;
 
 	    if (__isExternalAddress(aCursorId)) 
-		curs = _CursorVal(aCursorId);
+		curs = __CursorVal(aCursorId);
 	    else
 		curs = (Cursor) None;
 
@@ -8221,7 +8276,7 @@
 	    ENTER_XLIB();
 */
 	    result = XGrabPointer(myDpy,
-				  _WindowVal(aWindowId), 
+				  __WindowVal(aWindowId), 
 				  False, 
 				  evMask,
 				  pointer_mode, keyboard_mode,
@@ -8355,7 +8410,7 @@
 
     if (ISCONNECTED) {
 	if (__isExternalAddress(aGCId)) {
-	    gc = _GCVal(aGCId);
+	    gc = __GCVal(aGCId);
 	    gcv.clip_mask = None;
 	    ENTER_XLIB();
 	    XChangeGC(myDpy, gc, GCClipMask, &gcv);
@@ -8377,7 +8432,7 @@
 	if (__isExternalAddress(aGCId)
 	 && __isSmallInteger(bgColorIndex)) {
 	    ENTER_XLIB();
-	    XSetBackground(myDpy, _GCVal(aGCId), __intVal(bgColorIndex));
+	    XSetBackground(myDpy, __GCVal(aGCId), __intVal(bgColorIndex));
 	    LEAVE_XLIB();
 	    RETURN ( self );
 	}
@@ -8399,9 +8454,9 @@
 	Display *dpy = myDpy;
 
 	if (__isExternalAddress(aGCId)) {
-	    gc = _GCVal(aGCId);
+	    gc = __GCVal(aGCId);
 	    if (__isExternalAddress(aBitmapId)) {
-		bitmap = _PixmapVal(aBitmapId);
+		bitmap = __PixmapVal(aBitmapId);
 		ENTER_XLIB();
 		XSetStipple(dpy, gc, bitmap);
 		XSetFillStyle(dpy, gc, FillOpaqueStippled);
@@ -8431,7 +8486,7 @@
 
     if (ISCONNECTED) {
 	if (__isExternalAddress(aGCId)) {
-	    gc = _GCVal(aGCId);
+	    gc = __GCVal(aGCId);
 	    if (aBool == true)
 		gcv.subwindow_mode = ClipByChildren;
 	    else
@@ -8464,7 +8519,7 @@
 	    r.width = __intVal(clipWidth);
 	    r.height = __intVal(clipHeight);
 	    ENTER_XLIB();
-	    XSetClipRectangles(myDpy, _GCVal(aGCId), 0, 0, &r, 1, Unsorted);
+	    XSetClipRectangles(myDpy, __GCVal(aGCId), 0, 0, &r, 1, Unsorted);
 	    LEAVE_XLIB();
 	    RETURN ( self );
 	}
@@ -8484,7 +8539,7 @@
 	 && __isSmallInteger(offset)
 	 && __isByteArray(dashList)) {
 	    ENTER_XLIB();
-	    XSetDashes(myDpy, _GCVal(aGCId), 
+	    XSetDashes(myDpy, __GCVal(aGCId), 
 		       __intVal(offset),
 		       __ByteArrayInstPtr(dashList)->ba_element,
 		       __byteArraySize(dashList));
@@ -8513,9 +8568,9 @@
     if (ISCONNECTED) {
 	if (__isExternalAddress(aFontId)
 	 && __isExternalAddress(aGCId)) {
-	    f = (XFontStruct *) _FontVal(aFontId);
+	    f = (XFontStruct *) __FontVal(aFontId);
 	    ENTER_XLIB();
-	    XSetFont(myDpy, _GCVal(aGCId), f->fid);
+	    XSetFont(myDpy, __GCVal(aGCId), f->fid);
 	    LEAVE_XLIB();
 	    RETURN ( self );
 	}
@@ -8539,7 +8594,7 @@
 	Display *dpy = myDpy;
 	if (__bothSmallInteger(fgColorIndex, bgColorIndex)
 	 && __isExternalAddress(aGCId)) {
-	    gc = _GCVal(aGCId);
+	    gc = __GCVal(aGCId);
 
 	    ENTER_XLIB();
 	    XSetForeground(dpy, gc, __intVal(fgColorIndex));
@@ -8562,7 +8617,7 @@
 	if (__isExternalAddress(aGCId)
 	 && __isSmallInteger(fgColorIndex)) {
 	    ENTER_XLIB();
-	    XSetForeground(myDpy, _GCVal(aGCId), __intVal(fgColorIndex));
+	    XSetForeground(myDpy, __GCVal(aGCId), __intVal(fgColorIndex));
 	    LEAVE_XLIB();
 	    RETURN ( self );
 	}
@@ -8582,7 +8637,7 @@
 
     if (ISCONNECTED) {
 	if (__isExternalAddress(aGCId)) {
-	    gc = _GCVal(aGCId);
+	    gc = __GCVal(aGCId);
 	    if (aFunctionSymbol == @symbol(copy)) fun = GXcopy;
 	    else if (aFunctionSymbol == @symbol(copyInverted)) fun = GXcopyInverted;
 	    else if (aFunctionSymbol == @symbol(xor)) fun = GXxor;
@@ -8624,7 +8679,7 @@
     if (ISCONNECTED) {
 	if (__isExternalAddress(aGCId)) {
 	    ENTER_XLIB();
-	    XSetGraphicsExposures(myDpy, _GCVal(aGCId), (aBoolean==true)?1:0);
+	    XSetGraphicsExposures(myDpy, __GCVal(aGCId), (aBoolean==true)?1:0);
 	    LEAVE_XLIB();
 	    RETURN ( self );
 	}
@@ -8693,10 +8748,10 @@
 
 	    ENTER_XLIB();
 	    if (x_dashes) {
-		XSetDashes(dpy, _GCVal(aGCId), 0, x_dashes, x_nDash);
+		XSetDashes(dpy, __GCVal(aGCId), 0, x_dashes, x_nDash);
 	    }
 	    XSetLineAttributes(dpy,
-			       _GCVal(aGCId), __intVal(aNumber),
+			       __GCVal(aGCId), __intVal(aNumber),
 			       x_style, x_cap, x_join);
 	    LEAVE_XLIB();
 	    RETURN ( self );
@@ -8723,7 +8778,7 @@
     if (ISCONNECTED) {
 	if (__bothSmallInteger(orgX, orgY) && __isExternalAddress(aGCid)) {
 	    ENTER_XLIB();
-	    XSetTSOrigin(myDpy, _GCVal(aGCid), __intVal(orgX), __intVal(orgY));
+	    XSetTSOrigin(myDpy, __GCVal(aGCid), __intVal(orgX), __intVal(orgY));
 	    LEAVE_XLIB();
 	    RETURN ( self );
 	}
@@ -8745,9 +8800,9 @@
 	Display *dpy = myDpy;
 
 	if (__isExternalAddress(aGCId)) {
-	    gc = _GCVal(aGCId);
+	    gc = __GCVal(aGCId);
 	    if (__isExternalAddress(aPixmapId)) {
-		pixmap = _PixmapVal(aPixmapId);
+		pixmap = __PixmapVal(aPixmapId);
 		ENTER_XLIB();
 		XSetTile(dpy, gc, pixmap);
 		XSetFillStyle(dpy, gc, FillTiled);
@@ -8969,12 +9024,11 @@
     hasImageExtension := self queryXIEExtension.
     hasInputExtension := self queryXIExtension.
 
-    primaryAtom := self queryAtom:'PRIMARY'.
-    secondaryAtom := self queryAtom:'SECONDARY'.
-    cutBuffer0Atom := self queryAtom:'CUT_BUFFER0'.
-    stringAtom := self queryAtom:'STRING'.
-    lengthAtom := self queryAtom:'LENGTH'.
-    wmStateAtom := self queryAtom:'WM_STATE'.
+    primaryAtom := self atomIDOf:#PRIMARY.
+    stringAtom := self atomIDOf:#STRING.
+    lengthAtom := self atomIDOf:#LENGTH.
+    cutBuffer0Atom := self atomIDOf:#'CUT_BUFFER0'.
+    wmStateAtom := self atomIDOf:#WM_STATE.
 
     altModifierMask := self modifier2Mask.
     metaModifierMask := self modifier1Mask.
@@ -9246,18 +9300,18 @@
     ret := Array new:8.
     nextKey := 1.
     1 to:8 do:[ :i |
-        (modifierKeyMap at:nextKey) ~= 0 ifTrue:[
-            |mod|
-
-            mod := OrderedCollection new:maxKeyPerMod.
-            modifierKeyMap from:nextKey to:(nextKey+maxKeyPerMod-1) do:[ :key |
-                key ~= 0 ifTrue:[
-                    mod add:key
-                ].
-            ].
-            ret at:i put:mod.
-        ].
-        nextKey := nextKey+maxKeyPerMod.
+	(modifierKeyMap at:nextKey) ~= 0 ifTrue:[
+	    |mod|
+
+	    mod := OrderedCollection new:maxKeyPerMod.
+	    modifierKeyMap from:nextKey to:(nextKey+maxKeyPerMod-1) do:[ :key |
+		key ~= 0 ifTrue:[
+		    mod add:key
+		].
+	    ].
+	    ret at:i put:mod.
+	].
+	nextKey := nextKey+maxKeyPerMod.
     ].
 
     ^ ret
@@ -9271,12 +9325,12 @@
 
      mapping := self modifierMapping.
      ^ mapping collect:[:eachRow | 
-                             eachRow notNil ifTrue:[
-                                 eachRow collect:[ :key | self stringFromKeycode:key ].
-                             ] ifFalse:[
-                                 nil
-                             ]
-                       ].
+			     eachRow notNil ifTrue:[
+				 eachRow collect:[ :key | self stringFromKeycode:key ].
+			     ] ifFalse:[
+				 nil
+			     ]
+		       ].
     "
 !
 
@@ -9428,19 +9482,18 @@
 	ENTER_XLIB();
 	XFlush(myDpy);
 	LEAVE_XLIB();
-
     }
 %}
 !
 
 flushDpsContext:aDPSContext
-
-%{  /* NOCONTEXT */
+    <context: #return>
+%{
 #ifdef DPS
     if (ISCONNECTED
-     && __isExternalAddress(aDPSContext)) {
+	&& __isExternalAddress(aDPSContext)) {
 	ENTER_XLIB();
-	DPSFlushContext(MKDPSCONTEXT(aDPSContext));
+	DPSFlushContext(__DPSContextVal(aDPSContext));
 	LEAVE_XLIB();
 
 	RETURN ( self );
@@ -9490,7 +9543,7 @@
 
     if (ISCONNECTED) {
 	if (__isExternalAddress(aWindowId)) {
-	    focusWindow = _WindowVal(aWindowId);
+	    focusWindow = __WindowVal(aWindowId);
 	} else {
 	    focusWindow = None;
 	}
@@ -9729,7 +9782,7 @@
      && __isExternalAddress(aWindowId)
      && __bothSmallInteger(xpos, ypos)) {
 	Display *dpy = myDpy;
-	Window w = _WindowVal(aWindowId);
+	Window w = __WindowVal(aWindowId);
 
 	ENTER_XLIB();
 	XWarpPointer(dpy, 
@@ -9770,12 +9823,18 @@
     "Modified: 6.4.1997 / 13:27:07 / cg"
 !
 
-getProperty:propertyID from:aWindowID into:aTwoArgBlock
+getProperty:propertySymbolOrID from:aWindowID into:aTwoArgBlock
     "get a property, evaluate aTwoArgBlock with typeID and value"
 
     <context: #return>
 
-    |val typeID cls|
+    |val typeID cls propertyID|
+
+    propertySymbolOrID isString ifTrue:[
+	propertyID := self atomIDOf:propertySymbolOrID create:false.
+    ] ifFalse:[
+	propertyID := propertySymbolOrID.
+    ].
 
     cls := ByteArray.
 %{
@@ -9793,9 +9852,9 @@
 	Display *dpy = myDpy;
 
 	if (__isAtomID(propertyID)) {
-	    property = _AtomVal(propertyID);
+	    property = __AtomVal(propertyID);
 	    if (__isExternalAddress(aWindowID)) {
-		window = _WindowVal(aWindowID);
+		window = __WindowVal(aWindowID);
 	    } else {
 		window = DefaultRootWindow(dpy);
 	    }
@@ -9890,7 +9949,7 @@
 
     ^ self 
 	setProperty:propertyID 
-	type:(self atomIDOfLENGTH)
+	type:(self atomIDOf:#LENGTH)
 	value:aNumber 
 	for:aWindowID
 
@@ -9910,7 +9969,7 @@
     anObject storeBinaryOn:s.
     ^ self 
 	setProperty:propertyID 
-	type:(self atomIDOf:'ST_OBJECT' create:true) 
+	type:(self atomIDOf:#'ST_OBJECT' create:true) 
 	value:(s contents) 
 	for:aWindowID
 
@@ -9936,11 +9995,11 @@
 	Window window;
 	unsigned INT value;
 
-	prop = _AtomVal(propertyID);
-	type = _AtomVal(typeID);
+	prop = __AtomVal(propertyID);
+	type = __AtomVal(typeID);
 
 	if (__isExternalAddress(aWindowID)) {
-	    window = _WindowVal(aWindowID);
+	    window = __WindowVal(aWindowID);
 	} else if (__isSmallInteger(aWindowID)) {
 	    window = (Window)__smallIntegerVal(aWindowID);
 	} else if (aWindowID == nil) {
@@ -9991,7 +10050,7 @@
 
     ^ self 
 	setProperty:propertyID 
-	type:(self atomIDOfSTRING) 
+	type:(self atomIDOf:#STRING) 
 	value:aString 
 	for:aWindowID
 
@@ -10020,75 +10079,29 @@
     "return an Atoms ID; if create is true, create it if not already present.
      This is highly X specific and only for local use (with selections)."
 
-%{  /* NOCONTEXT */
-    Atom prop;
-
-    if (ISCONNECTED
-     && __isNonNilObject(aStringOrSymbol)
-     && (__qIsString(aStringOrSymbol) || __qIsSymbol(aStringOrSymbol))) {
-	prop = XInternAtom(myDpy, __stringVal(aStringOrSymbol), 
-				  (create == true) ? False : True);
-	if (prop == None) {
-	    RETURN (nil);
-	}
-	RETURN ( __MKATOMOBJ(prop) );
-    }
-%}.
-    self primitiveFailedOrClosedConnection.
-    ^ nil
+    |atomSymbol atom|
+
+    atomSymbol := aStringOrSymbol asSymbol.   
+    (atoms notNil and:[(atom := atoms at:atomSymbol ifAbsent:nil) notNil]) ifTrue:[
+	^ atom.
+    ].
+
+    atom := self primAtomIDOf:atomSymbol create:create.
+    atom notNil ifTrue:[
+	atoms isNil ifTrue:[
+	    atoms := IdentityDictionary new.
+	].
+	atoms at:atomSymbol put:atom.
+    ].
+
+    ^ atom
 
     "
      Display atomIDOf:'VT_SELECTION' create:false
      Display atomIDOf:'CUT_BUFFER0' create:false
      Display atomIDOf:'STRING' create:false
      Display atomIDOf:'PRIMARY' create:false
-     Display atomIDOfPRIMARY
-    "
-!
-
-atomIDOfCUTBUFFER0
-    "return the CUTBUFFER0 AtomID.
-     This is highly X specific and only for local use (with selections)."
-
-    ^ cutBuffer0Atom
-
-    "Modified: 2.3.1996 / 15:10:36 / cg"
-!
-
-atomIDOfLENGTH
-    "return the LENGTH AtomID.
-     This is highly X specific and only for local use (with selections)."
-
-    ^ lengthAtom
-
-    "Modified: 2.3.1996 / 15:10:41 / cg"
-!
-
-atomIDOfPRIMARY
-    "return the PRIMARY AtomID.
-     This is highly X specific and only for local use (with selections)."
-
-    ^ primaryAtom
-
-    "Modified: 2.3.1996 / 15:10:49 / cg"
-!
-
-atomIDOfSECONDARY
-    "return the SECONDARY AtomID.
-     This is highly X specific and only for local use (with selections)."
-
-    ^ secondaryAtom
-
-    "Modified: 2.3.1996 / 15:10:59 / cg"
-!
-
-atomIDOfSTRING
-    "return the STRING AtomID.
-     This is highly X specific and only for local use (with selections)."
-
-    ^ stringAtom
-
-    "Modified: 2.3.1996 / 15:11:08 / cg"
+    "
 !
 
 atomName:anAtomID
@@ -10101,7 +10114,7 @@
 
     if (ISCONNECTED
      && __isAtomID(anAtomID)) {
-	name = XGetAtomName(myDpy, _AtomVal(anAtomID));
+	name = XGetAtomName(myDpy, __AtomVal(anAtomID));
 	if (name == 0) {
 	    RETURN (nil);
 	}
@@ -10172,6 +10185,35 @@
 	 Display getResource:'beNiceToColormap' class:'any'  
 	 Display getResource:'beNiceToColormap' class:''  
     "
+!
+
+primAtomIDOf:aStringOrSymbol create:create
+    "return an Atoms ID; if create is true, create it if not already present.
+     This is highly X specific and only for local use (with selections)."
+
+%{  /* NOCONTEXT */
+    Atom prop;
+
+    if (ISCONNECTED
+     && __isNonNilObject(aStringOrSymbol)
+     && (__qIsString(aStringOrSymbol) || __qIsSymbol(aStringOrSymbol))) {
+	prop = XInternAtom(myDpy, __stringVal(aStringOrSymbol), 
+				  (create == true) ? False : True);
+	if (prop == None) {
+	    RETURN (nil);
+	}
+	RETURN ( __MKATOMOBJ(prop) );
+    }
+%}.
+    self primitiveFailedOrClosedConnection.
+    ^ nil
+
+    "
+     Display primAtomIDOf:'VT_SELECTION' create:false
+     Display primAtomIDOf:'CUT_BUFFER0' create:false
+     Display primAtomIDOf:'STRING' create:false
+     Display primAtomIDOf:'PRIMARY' create:false
+    "
 ! !
 
 !XWorkstation methodsFor:'retrieving pixels'!
@@ -10238,7 +10280,7 @@
 
     if (ISCONNECTED
      && __isExternalAddress(aDrawableId) && __bothSmallInteger(x, y)) {
-	win = _WindowVal(aDrawableId);
+	win = __WindowVal(aDrawableId);
 	xpos = __intVal(x);
 	ypos = __intVal(y);
 	if ((xpos < 0) || (ypos < 0)) {
@@ -10276,7 +10318,7 @@
      && __isByteArray(imageBits)) {
 	Display *dpy = myDpy;
 
-	win = _WindowVal(aDrawableId);
+	win = __WindowVal(aDrawableId);
 	ENTER_XLIB();
 	image = XGetImage(dpy, win, __intVal(srcx), __intVal(srcy),
 				    __intVal(w), __intVal(h),
@@ -10359,24 +10401,31 @@
     "get the object selection - either immediate, or asynchronous.
      Returns nil, if async request is on its way"
 
-    |selProp sel|
-
     (self getSelectionOwnerOf:primaryAtom) isNil ifTrue:[
 	"no primary selection - use cut buffer"
-	sel := self getObjectProperty:cutBuffer0Atom from:nil.
-	^ sel
-    ].
-    selProp := self atomIDOf:'ST_SELECTION' create:true.
-    self requestObjectSelection:primaryAtom property:selProp for:drawableId.
+	^ self getObjectProperty:cutBuffer0Atom from:nil.
+    ].
+    self requestSelection:primaryAtom 
+		 property:(self atomIDOf:#'ST_SELECTION' create:true) 
+		     type:(self atomIDOf:#'ST_OBJECT' create:true) 
+		      for:drawableId.
     ^ nil
 
     "Modified: / 17.6.1998 / 17:11:15 / cg"
 !
 
-getSelectionOwnerOf:selectionAtomID
+getSelectionOwnerOf:selectionAtomSymbolOrID
     "get the owner of a selection"
 
-%{  /* NOCONTEXT */
+    |selectionAtomID|
+
+    selectionAtomSymbolOrID isString ifTrue:[
+	selectionAtomID := self atomIDOf:selectionAtomSymbolOrID create:false.
+    ] ifFalse:[
+	selectionAtomID := selectionAtomSymbolOrID.
+    ].
+
+%{  
     Atom selection;
     Window window;
 
@@ -10384,7 +10433,7 @@
      && ISCONNECTED) {
 	Display *dpy = myDpy;
 
-	window = XGetSelectionOwner(dpy, _AtomVal(selectionAtomID));
+	window = XGetSelectionOwner(dpy, __AtomVal(selectionAtomID));
 	RETURN ((window == None) ? nil : __MKEXTERNALADDRESS(window));
     }
 %}.
@@ -10396,30 +10445,19 @@
     "get the text selection -  either immediate, or asynchronous.
      Returns nil, if async request is on its way"
 
-    |selProp sel|
-
     (self getSelectionOwnerOf:primaryAtom) isNil ifTrue:[
 	"no primary selection - use cut buffer"
-	sel := self getTextProperty:cutBuffer0Atom from:nil.
-	^ sel
-    ].
-    selProp := self atomIDOf:'VT_SELECTION' create:true.
-    self requestTextSelection:primaryAtom property:selProp for:drawableId.
+	^ self getTextProperty:cutBuffer0Atom from:nil.
+    ].
+    self requestSelection:primaryAtom 
+		 property:(self atomIDOf:#'VT_SELECTION' create:true) 
+		     type:stringAtom 
+		      for:drawableId.
     ^ nil
 
     "Modified: / 17.6.1998 / 17:12:05 / cg"
 !
 
-requestObjectSelection:selectionID property:propertyID for:aWindowId
-    "ask the server to send us the selection - the view with ID aWindowID
-     will later receive a SelectionNotify event for it."
-
-    ^ self requestSelection:selectionID 
-		   property:propertyID 
-		   type:(self atomIDOf:'ST_OBJECT' create:true) 
-		   for:aWindowId
-!
-
 requestSelection:selectionID property:propertyID type:typeID for:aWindowId
     "ask the server to send us the selection - the view with id aWindowID
      will later receive a SelectionNotify event for it (once the Xserver replies
@@ -10435,7 +10473,7 @@
      && __isAtomID(selectionID)) {
 	Display *dpy = myDpy;
 
-	if (XGetSelectionOwner(dpy, _AtomVal(selectionID)) == None) {
+	if (XGetSelectionOwner(dpy, __AtomVal(selectionID)) == None) {
 	    /*
 	     * no owner of primary selection
 	     */
@@ -10444,8 +10482,8 @@
 	/*
 	 * PRIMARY selection
 	 */
-	XConvertSelection(dpy, _AtomVal(selectionID), _AtomVal(typeID), 
-			       _AtomVal(propertyID), _WindowVal(aWindowId), CurrentTime);
+	XConvertSelection(dpy, __AtomVal(selectionID), __AtomVal(typeID), 
+			       __AtomVal(propertyID), __WindowVal(aWindowId), CurrentTime);
 	RETURN (true);
     }
 %}.
@@ -10459,16 +10497,6 @@
     "
 !
 
-requestTextSelection:selectionID property:propertyID for:aWindowId
-    "ask the server to send us the selection - the view with ID aWindowID
-     will later receive a SelectionNotify event for it."
-
-    ^ self requestSelection:selectionID 
-		   property:propertyID 
-		       type:stringAtom 
-			for:aWindowId
-!
-
 sendSelection:something selection:selectionID property:propertyID target:targetID time:t from:windowID to:requestorID
     "send aString back from a SelectionRequest"
 
@@ -10501,13 +10529,13 @@
 	Display *dpy = myDpy;
 	XEvent ev;
 	Window requestor, originator;
-	Atom property = _AtomVal(propertyID);
-	Atom target = _AtomVal(targetID);
-	Atom selection = _AtomVal(selectionID);
+	Atom property = __AtomVal(propertyID);
+	Atom target = __AtomVal(targetID);
+	Atom selection = __AtomVal(selectionID);
 	Status result;
 
 	if (__isExternalAddress(requestorID)) {
-	    requestor = _WindowVal(requestorID);
+	    requestor = __WindowVal(requestorID);
 	} else if (__isSmallInteger(requestorID)) {
 	    requestor = (Window)__smallIntegerVal(requestorID);
 	} else if (requestorID == nil) {
@@ -10516,7 +10544,7 @@
 	    requestor = (Window)__unsignedLongIntVal(requestorID);
 	}
 	if (__isExternalAddress(windowID)) {
-	    originator = _WindowVal(windowID);
+	    originator = __WindowVal(windowID);
 	} else if (__isSmallInteger(windowID)) {
 	    originator = (Window)__smallIntegerVal(windowID);
 	} else if (windowID == nil) {
@@ -10590,24 +10618,33 @@
     ^ true
 !
 
-setSelectionOwner:aWindowId of:selectionID
+setSelectionOwner:aWindowId of:selectionAtomSymbolOrID
     "set the owner of a selection; return false if failed"
 
     <context: #return>
+
+    |selectionAtomID|
+
+    selectionAtomSymbolOrID isString ifTrue:[
+	selectionAtomID := self atomIDOf:selectionAtomSymbolOrID create:false.
+    ] ifFalse:[
+	selectionAtomID := selectionAtomSymbolOrID.
+    ].
+
 %{ 
     Window win;
 
     if (__isExternalAddress(aWindowId)
-     && __isAtomID(selectionID)
+     && __isAtomID(selectionAtomID)
      && ISCONNECTED) {
 	Display *dpy = myDpy;
 	Window owner;
 
-	win = _WindowVal(aWindowId);
-	DPRINTF(("setOwner prop=%x win=%x\n", _AtomVal(selectionID), win));
+	win = __WindowVal(aWindowId);
+	DPRINTF(("setOwner prop=%x win=%x\n", __AtomVal(selectionAtomID), win));
 	ENTER_XLIB();
-	XSetSelectionOwner(dpy, _AtomVal(selectionID), win, CurrentTime);
-	owner = XGetSelectionOwner(dpy, _AtomVal(selectionID));
+	XSetSelectionOwner(dpy, __AtomVal(selectionAtomID), win, CurrentTime);
+	owner = XGetSelectionOwner(dpy, __AtomVal(selectionAtomID));
 	LEAVE_XLIB();
 	if (owner != win) {
 	    RETURN (false);
@@ -10652,7 +10689,7 @@
 	     */
 	    if ((w >= 0) && (h >= 0)) {
 		ENTER_XLIB();
-		XClearArea(myDpy, _WindowVal(aWindowId), __intVal(x), __intVal(y), w, h, 0);
+		XClearArea(myDpy, __WindowVal(aWindowId), __intVal(x), __intVal(y), w, h, 0);
 		LEAVE_XLIB();
 	    }
 	    RETURN ( self );
@@ -10671,7 +10708,7 @@
     if (ISCONNECTED) {
 	if (__isExternalAddress(aWindowId)) {
 	    ENTER_XLIB();
-	    XClearWindow(myDpy, _WindowVal(aWindowId));
+	    XClearWindow(myDpy, __WindowVal(aWindowId));
 	    LEAVE_XLIB();
 	    RETURN ( self );
 	}
@@ -10706,9 +10743,9 @@
 		mask = CWSibling;
 	    }
 
-	    chg.sibling = _WindowVal(siblingId);
+	    chg.sibling = __WindowVal(siblingId);
 	    ENTER_XLIB();
-	    XConfigureWindow(myDpy, _WindowVal(aWindowId),
+	    XConfigureWindow(myDpy, __WindowVal(aWindowId),
 				    mask, &chg);
 	    LEAVE_XLIB();
 	    RETURN ( self );
@@ -10736,7 +10773,7 @@
 	int nChildren;
 
 /*        ENTER_XLIB(); */
-	ok = XQueryTree(myDpy, _WindowVal(aWindowId), 
+	ok = XQueryTree(myDpy, __WindowVal(aWindowId), 
 			&root, &parent, &children, &nChildren);
 	if (children) {
 	    XFree(children);
@@ -10776,7 +10813,7 @@
     if (ISCONNECTED
      && __isExternalAddress(aWindowId)) {
 	ENTER_XLIB();
-	XLowerWindow(myDpy, _WindowVal(aWindowId));
+	XLowerWindow(myDpy, __WindowVal(aWindowId));
 	LEAVE_XLIB();
 	RETURN ( self );
     }
@@ -10825,7 +10862,7 @@
      && __isExternalAddress(aWindowId)) {
 	Display *dpy = myDpy;
 
-	win = _WindowVal(aWindowId);
+	win = __WindowVal(aWindowId);
 
 	szhints.flags = 0;
 	if (__bothSmallInteger(xPos, yPos)) {
@@ -10855,12 +10892,12 @@
 	    Window iconWindow;
 
 	    if (__isExternalAddress(wiconId))
-		iconBitmap = _PixmapVal(wiconId);
+		iconBitmap = __PixmapVal(wiconId);
 	    else
 		iconBitmap = (Pixmap)0;
 
 	    if (__isExternalAddress(wiconViewId))
-		iconWindow = _WindowVal(wiconViewId);
+		iconWindow = __WindowVal(wiconViewId);
 	    else
 		iconWindow = (Window)0;
 
@@ -10919,7 +10956,7 @@
     if (ISCONNECTED
      && __isExternalAddress(aWindowId)) {
 	ENTER_XLIB();
-	XMapWindow(myDpy, _WindowVal(aWindowId));
+	XMapWindow(myDpy, __WindowVal(aWindowId));
 	LEAVE_XLIB();
 	RETURN ( self );
     }
@@ -10944,7 +10981,7 @@
 	if (newWidth < 1) newWidth = 1;
 	if (newHeight < 1) newHeight = 1;
 	ENTER_XLIB();
-	XMoveResizeWindow(myDpy, _WindowVal(aWindowId),
+	XMoveResizeWindow(myDpy, __WindowVal(aWindowId),
 			      __intVal(x), __intVal(y),
 			      newWidth, newHeight);
 	LEAVE_XLIB();
@@ -10963,7 +11000,7 @@
     if (ISCONNECTED
      && __isExternalAddress(aWindowId) && __bothSmallInteger(x, y)) {
 	ENTER_XLIB();
-	XMoveWindow(myDpy, _WindowVal(aWindowId), __intVal(x), __intVal(y));
+	XMoveWindow(myDpy, __WindowVal(aWindowId), __intVal(x), __intVal(y));
 	LEAVE_XLIB();
 	RETURN ( self );
     }
@@ -10980,7 +11017,7 @@
     if (ISCONNECTED
      && __isExternalAddress(aWindowId)) {
 	ENTER_XLIB();
-	XRaiseWindow(myDpy, _WindowVal(aWindowId));
+	XRaiseWindow(myDpy, __WindowVal(aWindowId));
 	LEAVE_XLIB();
 	RETURN ( self );
     }
@@ -11000,8 +11037,8 @@
 	Window _child, _newParent;
 	int i;
 
-	_child = _WindowVal(windowId);
-	_newParent = _WindowVal(newParentWindowId);
+	_child = __WindowVal(windowId);
+	_newParent = __WindowVal(newParentWindowId);
 	ENTER_XLIB();
 
 #if 0
@@ -11042,7 +11079,7 @@
 	if (newWidth < 1) newWidth = 1;
 	if (newHeight < 1) newHeight = 1;
 	ENTER_XLIB();
-	XResizeWindow(myDpy, _WindowVal(aWindowId), newWidth, newHeight);
+	XResizeWindow(myDpy, __WindowVal(aWindowId), newWidth, newHeight);
 	LEAVE_XLIB();
 	RETURN ( self );
     }
@@ -11067,7 +11104,7 @@
 	    else wa.backing_store = 0;
 
 	    ENTER_XLIB();
-	    XChangeWindowAttributes(myDpy, _WindowVal(aWindowId), CWBackingStore, &wa);
+	    XChangeWindowAttributes(myDpy, __WindowVal(aWindowId), CWBackingStore, &wa);
 	    LEAVE_XLIB();
 
 	}
@@ -11111,7 +11148,7 @@
 
 
 	ENTER_XLIB();
-	XChangeWindowAttributes(myDpy, _WindowVal(aWindowId), CWBitGravity, &wa);
+	XChangeWindowAttributes(myDpy, __WindowVal(aWindowId), CWBitGravity, &wa);
 	LEAVE_XLIB();
 
 	RETURN ( self );
@@ -11130,8 +11167,8 @@
      && __isExternalAddress(aWindowId)
      && __isExternalAddress(aCursorId)) {
 	Display *dpy = myDpy;
-	Window w = _WindowVal(aWindowId);
-	Cursor c = _CursorVal(aCursorId);
+	Window w = __WindowVal(aWindowId);
+	Cursor c = __CursorVal(aCursorId);
 
 	if (w && c) {
 	    ENTER_XLIB();
@@ -11155,7 +11192,7 @@
      && (__qIsString(aString) || __qIsSymbol(aString))
      && __isExternalAddress(aWindowId)) {
 	ENTER_XLIB();
-	XSetIconName(myDpy, _WindowVal(aWindowId), (char *) __stringVal(aString));
+	XSetIconName(myDpy, __WindowVal(aWindowId), (char *) __stringVal(aString));
 	LEAVE_XLIB();
 	RETURN ( self );
     }
@@ -11176,7 +11213,7 @@
 	if (__INST(hasSaveUnder) == true) {
 	    wa.save_under = (yesOrNo == true) ? 1 : 0;
 	    ENTER_XLIB();
-	    XChangeWindowAttributes(myDpy, _WindowVal(aWindowId), CWSaveUnder, &wa);
+	    XChangeWindowAttributes(myDpy, __WindowVal(aWindowId), CWSaveUnder, &wa);
 	    LEAVE_XLIB();
 	}
 	RETURN ( self );
@@ -11199,13 +11236,13 @@
 	    w = (Window) 0;
 	} else {
 	    if (__isExternalAddress(aMainWindowId)) {
-		w = _WindowVal(aMainWindowId);
+		w = __WindowVal(aMainWindowId);
 	    } else {
 		goto getOutOfHere;
 	    }
 	}
 	ENTER_XLIB();
-	XSetTransientForHint(myDpy, _WindowVal(aWindowId), w);
+	XSetTransientForHint(myDpy, __WindowVal(aWindowId), w);
 	LEAVE_XLIB();
 	RETURN ( self );
     }
@@ -11226,7 +11263,7 @@
      && __isExternalAddress(aWindowId)
      && __isSmallInteger(aColorIndex)) {
 	ENTER_XLIB();
-	XSetWindowBackground(myDpy, _WindowVal(aWindowId), __intVal(aColorIndex));
+	XSetWindowBackground(myDpy, __WindowVal(aWindowId), __intVal(aColorIndex));
 	LEAVE_XLIB();
 	RETURN ( self );
     }
@@ -11247,7 +11284,7 @@
      && __isExternalAddress(aWindowId)
      && __isExternalAddress(aPixmapId)) {
 	ENTER_XLIB();
-	XSetWindowBackgroundPixmap(myDpy, _WindowVal(aWindowId), _PixmapVal(aPixmapId));
+	XSetWindowBackgroundPixmap(myDpy, __WindowVal(aWindowId), __PixmapVal(aPixmapId));
 	LEAVE_XLIB();
 	RETURN ( self );
     }
@@ -11265,7 +11302,7 @@
      && __isExternalAddress(aWindowId)
      && __isSmallInteger(aColorIndex)) {
 	ENTER_XLIB();
-	XSetWindowBorder(myDpy, _WindowVal(aWindowId), __intVal(aColorIndex));
+	XSetWindowBorder(myDpy, __WindowVal(aWindowId), __intVal(aColorIndex));
 	LEAVE_XLIB();
 	RETURN ( self );
     }
@@ -11283,7 +11320,7 @@
      && __isExternalAddress(aWindowId)
      && __isExternalAddress(aPixmapId)) {
 	ENTER_XLIB();
-	XSetWindowBorderPixmap(myDpy, _WindowVal(aWindowId), _PixmapVal(aPixmapId));
+	XSetWindowBorderPixmap(myDpy, __WindowVal(aWindowId), __PixmapVal(aPixmapId));
 	LEAVE_XLIB();
 	RETURN ( self );
     }
@@ -11304,14 +11341,14 @@
     Pixmap shapeBitmap;
 
     if (__isExternalAddress(aPixmapId))
-	shapeBitmap = _PixmapVal(aPixmapId);
+	shapeBitmap = __PixmapVal(aPixmapId);
     else
 	shapeBitmap = (Pixmap)0;
 
     if (ISCONNECTED
      && __isExternalAddress(aWindowId)) {
 	ENTER_XLIB();
-	XShapeCombineMask(myDpy, _WindowVal(aWindowId), ShapeBounding,
+	XShapeCombineMask(myDpy, __WindowVal(aWindowId), ShapeBounding,
 			  0, 0, shapeBitmap, ShapeSet);
 	LEAVE_XLIB();
 	RETURN ( self );
@@ -11331,7 +11368,7 @@
      && __isExternalAddress(aWindowId)
      && __isSmallInteger(aNumber)) {
 	ENTER_XLIB();
-	XSetWindowBorderWidth(myDpy, _WindowVal(aWindowId), __intVal(aNumber));
+	XSetWindowBorderWidth(myDpy, __WindowVal(aWindowId), __intVal(aNumber));
 	LEAVE_XLIB();
 	RETURN ( self );
     }
@@ -11363,7 +11400,7 @@
 	    goto error;
 
 	ENTER_XLIB();
-	XSetClassHint(myDpy, _WindowVal(aWindowId), &classhint);
+	XSetClassHint(myDpy, __WindowVal(aWindowId), &classhint);
 	LEAVE_XLIB();
 	RETURN ( self );
 error:;
@@ -11406,7 +11443,7 @@
 
 
 	ENTER_XLIB();
-	XChangeWindowAttributes(myDpy, _WindowVal(aWindowId), CWWinGravity, &wa);
+	XChangeWindowAttributes(myDpy, __WindowVal(aWindowId), CWWinGravity, &wa);
 	LEAVE_XLIB();
 
 	RETURN ( self );
@@ -11431,10 +11468,10 @@
      && __isExternalAddress(aWindowId)) {
 	XWMHints hints;
 
-	hints.icon_pixmap = _PixmapVal(iconId);
+	hints.icon_pixmap = __PixmapVal(iconId);
 	hints.flags = IconPixmapHint;
 	ENTER_XLIB();
-	XSetWMHints(myDpy, _WindowVal(aWindowId), &hints);
+	XSetWMHints(myDpy, __WindowVal(aWindowId), &hints);
 	LEAVE_XLIB();
 	RETURN ( self );
     }
@@ -11461,15 +11498,15 @@
      && __isExternalAddress(aWindowId)) {
 	XWMHints hints;
 
-	hints.icon_pixmap = _PixmapVal(iconId);
+	hints.icon_pixmap = __PixmapVal(iconId);
 	hints.flags = IconPixmapHint;
 	if ((maskId != nil)
 	 && __isExternalAddress(maskId)) {
-	    hints.icon_mask = _PixmapVal(maskId);
+	    hints.icon_mask = __PixmapVal(maskId);
 	    hints.flags |= IconMaskHint;
 	}
 	ENTER_XLIB();
-	XSetWMHints(myDpy, _WindowVal(aWindowId), &hints);
+	XSetWMHints(myDpy, __WindowVal(aWindowId), &hints);
 	LEAVE_XLIB();
 	RETURN ( self );
     }
@@ -11494,10 +11531,10 @@
      && __isExternalAddress(aWindowId)) {
 	XWMHints wmhints;
 
-	wmhints.icon_window = _WindowVal(iconWindowId);
+	wmhints.icon_window = __WindowVal(iconWindowId);
 	wmhints.flags = IconWindowHint;
 	ENTER_XLIB();
-	XSetWMHints(myDpy, _WindowVal(aWindowId), &wmhints);
+	XSetWMHints(myDpy, __WindowVal(aWindowId), &wmhints);
 	LEAVE_XLIB();
 	RETURN ( self );
     }
@@ -11517,7 +11554,7 @@
 	XSizeHints szhints;
 	Window win;
 
-	win = _WindowVal(aWindowId);
+	win = __WindowVal(aWindowId);
 
 	szhints.flags = 0;
 	if (__bothSmallInteger(minW, minH)) {
@@ -11551,7 +11588,7 @@
      && (__qIsString(aString) || __qIsSymbol(aString))
      && __isExternalAddress(aWindowId)) {
 	ENTER_XLIB();
-	XStoreName(myDpy, _WindowVal(aWindowId), (char *) __stringVal(aString));
+	XStoreName(myDpy, __WindowVal(aWindowId), (char *) __stringVal(aString));
 	LEAVE_XLIB();
 	RETURN ( self );
     }
@@ -11574,14 +11611,14 @@
     Pixmap shapeBitmap;
 
     if (__isExternalAddress(aPixmapId))
-	shapeBitmap = _PixmapVal(aPixmapId);
+	shapeBitmap = __PixmapVal(aPixmapId);
     else
 	shapeBitmap = (Pixmap)0;
 
     if (ISCONNECTED
      && __isExternalAddress(aWindowId)) {
 	ENTER_XLIB();
-	XShapeCombineMask(myDpy, _WindowVal(aWindowId), ShapeClip,
+	XShapeCombineMask(myDpy, __WindowVal(aWindowId), ShapeClip,
 			  0, 0,
 			  shapeBitmap, ShapeSet);
 	LEAVE_XLIB();
@@ -11604,7 +11641,7 @@
 
     if (__isExternalAddress(aWindowId)) {
 	ENTER_XLIB();
-	XUnmapWindow(myDpy, _WindowVal(aWindowId));
+	XUnmapWindow(myDpy, __WindowVal(aWindowId));
 	LEAVE_XLIB();
 	RETURN ( self );
     }
@@ -11628,10 +11665,10 @@
 	Atom WM_STATE_Atom;
 
 	if (__INST(wmStateAtom) != nil) {
-	    WM_STATE_Atom = _AtomVal(__INST(wmStateAtom));
+	    WM_STATE_Atom = __AtomVal(__INST(wmStateAtom));
 
 	    ENTER_XLIB();
-	    XGetWindowProperty(myDpy, _WindowVal(aWindowId),
+	    XGetWindowProperty(myDpy, __WindowVal(aWindowId),
 			       WM_STATE_Atom,
 			       0L, 2L, False, AnyPropertyType,
 			       &JunkAtom,&JunkInt,&WinState,&JunkLong,
@@ -11652,6 +11689,6 @@
 !XWorkstation class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libview/XWorkstation.st,v 1.374 2000-09-28 16:24:27 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libview/XWorkstation.st,v 1.375 2000-09-29 12:23:16 stefan Exp $'
 ! !
 XWorkstation initialize!