--- a/XWorkstation.st Sun Jul 02 14:54:33 2000 +0200
+++ b/XWorkstation.st Sun Jul 02 14:55:42 2000 +0200
@@ -1115,6 +1115,431 @@
"Created: 10.6.1996 / 21:06:48 / cg"
!
+queryAtom:atomName
+%{
+ Display *dpy;
+
+ if (ISCONNECTED) {
+ dpy = myDpy;
+ RETURN ( __MKATOMOBJ( XInternAtom(dpy, __stringVal(atomName), True) ));
+ }
+%}.
+ ^ nil
+
+ "
+ Display queryAtom:'PRIMARY'
+ "
+!
+
+queryBlackPixel
+%{ /* NOCONTEXT */
+
+ if (ISCONNECTED) {
+ Display *dpy;
+ int scr;
+
+ dpy = myDpy;
+ scr = DefaultScreen(dpy);
+ RETURN ( __MKSMALLINT(BlackPixel(dpy, scr)));
+ }
+%}.
+ ^ nil
+
+ "
+ Display queryBlackPixel
+ "
+!
+
+queryCells
+%{ /* NOCONTEXT */
+
+ if (ISCONNECTED) {
+ Display *dpy;
+ int scr;
+
+ dpy = myDpy;
+ scr = DefaultScreen(dpy);
+ RETURN ( __MKSMALLINT(DisplayCells(dpy, scr)));
+ }
+%}.
+ ^ nil
+
+ "
+ Display queryCells
+ "
+!
+
+queryDPSExtension
+%{ /* NOCONTEXT */
+
+#ifdef DPS
+ if (ISCONNECTED) {
+ Display *dpy;
+ int dummy;
+
+ dpy = myDpy;
+
+ if (XQueryExtension(dpy, "DPSExtension", &dummy, &dummy, &dummy)) {
+ _RETURN ( true );
+ }
+ }
+#endif
+%}.
+ ^ false
+
+ "
+ Display queryDPSExtension
+ "
+!
+
+queryDefaultScreen
+%{ /* NOCONTEXT */
+
+ if (ISCONNECTED) {
+ Display *dpy;
+
+ dpy = myDpy;
+ RETURN ( __MKSMALLINT(DefaultScreen(dpy)));
+ }
+%}.
+ ^ nil
+
+ "
+ Display queryDefaultScreen
+ "
+!
+
+queryDefaultVisualType
+%{ /* NOCONTEXT */
+
+ if (ISCONNECTED) {
+ Display *dpy;
+ Visual *visual;
+
+ dpy = myDpy;
+ visual = DefaultVisualOfScreen(DefaultScreenOfDisplay(dpy));
+ switch (visual->class) {
+ case StaticGray:
+ RETURN ( @symbol(StaticGray) );
+ case GrayScale:
+ RETURN ( @symbol(GrayScale) );
+ case StaticColor:
+ RETURN ( @symbol(StaticColor) );
+ case PseudoColor:
+ RETURN ( @symbol(PseudoColor) );
+ case TrueColor:
+ RETURN ( @symbol(TrueColor) );
+ case DirectColor:
+ RETURN ( @symbol(DirectColor) );
+ }
+ }
+%}.
+ ^ nil
+
+ "
+ Display queryDefaultVisualType
+ "
+!
+
+queryDepth
+%{ /* NOCONTEXT */
+
+ if (ISCONNECTED) {
+ Display *dpy;
+ int scr;
+
+ dpy = myDpy;
+ scr = DefaultScreen(dpy);
+ RETURN ( __MKSMALLINT(DisplayPlanes(dpy, scr)));
+ }
+%}.
+ ^ nil
+
+ "
+ Display queryDepth
+ "
+!
+
+queryHeight
+%{ /* NOCONTEXT */
+
+ if (ISCONNECTED) {
+ Display *dpy;
+ int scr;
+
+ dpy = myDpy;
+ scr = DefaultScreen(dpy);
+ RETURN ( __MKSMALLINT(DisplayHeight(dpy, scr)));
+ }
+%}.
+ ^ nil
+
+ "
+ Display queryHeight
+ "
+!
+
+queryHeightMM
+%{ /* NOCONTEXT */
+
+ if (ISCONNECTED) {
+ Display *dpy;
+ int scr;
+
+ dpy = myDpy;
+ scr = DefaultScreen(dpy);
+ RETURN ( __MKSMALLINT(DisplayHeightMM(dpy, scr)));
+ }
+%}.
+ ^ nil
+
+ "
+ Display queryHeightMM
+ "
+!
+
+queryMBUFExtension
+%{ /* NOCONTEXT */
+
+#ifdef MBUF
+ if (ISCONNECTED) {
+ Display *dpy;
+ int dummy;
+
+ dpy = myDpy;
+
+ if (XQueryExtension(dpy, "Multi-Buffering", &dummy, &dummy, &dummy)) {
+ _RETURN ( true );
+ }
+ }
+#endif
+%}.
+ ^ false
+
+ "
+ Display queryMBUFExtension
+ "
+!
+
+queryPEXExtension
+%{ /* NOCONTEXT */
+
+#ifdef PEX5
+ if (ISCONNECTED) {
+ Display *dpy;
+ int dummy;
+
+ dpy = myDpy;
+
+ if (XQueryExtension(dpy, PEX_NAME_STRING, &dummy, &dummy, &dummy)) {
+ _RETURN ( true );
+ }
+ }
+#endif
+%}.
+ ^ false
+
+ "
+ Display queryPEXExtension
+ "
+!
+
+queryRGBMasks
+%{ /* NOCONTEXT */
+
+ if (ISCONNECTED) {
+ Display *dpy;
+ Visual *visual;
+ OBJ redMask, greenMask, blueMask, bprgb;
+
+ dpy = myDpy;
+ visual = DefaultVisualOfScreen(DefaultScreenOfDisplay(dpy));
+ redMask = __MKSMALLINT(visual->red_mask);
+ greenMask = __MKSMALLINT(visual->green_mask);
+ blueMask = __MKSMALLINT(visual->blue_mask);
+ bprgb = __MKSMALLINT(visual->bits_per_rgb);
+ RETURN ( __ARRAY_WITH4(redMask, greenMask, blueMask, bprgb) );
+ }
+%}.
+ ^ nil
+
+ "
+ Display queryRGBMasks
+ "
+!
+
+querySHMExtension
+%{ /* NOCONTEXT */
+
+#ifdef xxSHM
+ if (ISCONNECTED) {
+ Display *dpy;
+ int dummy;
+
+ dpy = myDpy;
+
+ if (XQueryExtension(dpy, "MIT_SHM", &dummy, &dummy, &dummy)) {
+ _RETURN ( true );
+ }
+ }
+#endif
+%}.
+ ^ false
+
+ "
+ Display querySHMExtension
+ "
+!
+
+queryShapeExtension
+%{ /* NOCONTEXT */
+
+#ifdef SHAPE
+ if (ISCONNECTED) {
+ Display *dpy;
+ int dummy;
+
+ dpy = myDpy;
+
+ if (XShapeQueryExtension(dpy, &dummy, &dummy)) {
+ _RETURN ( true );
+ }
+ }
+#endif
+%}.
+ ^ false
+
+ "
+ Display queryShapeExtension
+ "
+!
+
+queryWhitePixel
+%{ /* NOCONTEXT */
+
+ if (ISCONNECTED) {
+ Display *dpy;
+ int scr;
+
+ dpy = myDpy;
+ scr = DefaultScreen(dpy);
+ RETURN ( __MKSMALLINT(WhitePixel(dpy, scr)));
+ }
+%}.
+ ^ nil
+
+ "
+ Display queryWhitePixel
+ "
+!
+
+queryWidth
+%{ /* NOCONTEXT */
+
+ if (ISCONNECTED) {
+ Display *dpy;
+ int scr;
+
+ dpy = myDpy;
+ scr = DefaultScreen(dpy);
+ RETURN ( __MKSMALLINT(DisplayWidth(dpy, scr)));
+ }
+%}.
+ ^ nil
+
+ "
+ Display queryWidth
+ "
+!
+
+queryWidthMM
+%{ /* NOCONTEXT */
+
+ if (ISCONNECTED) {
+ Display *dpy;
+ int scr;
+
+ dpy = myDpy;
+ scr = DefaultScreen(dpy);
+ RETURN ( __MKSMALLINT(DisplayWidthMM(dpy, scr)));
+ }
+%}.
+ ^ nil
+
+ "
+ Display queryWidthMM
+ "
+!
+
+queryXIEExtension
+%{ /* NOCONTEXT */
+
+#ifdef XIE
+ if (ISCONNECTED) {
+ Display *dpy;
+ int dummy;
+
+ dpy = myDpy;
+
+ if (XQueryExtension(dpy, xieExtName, &dummy, &dummy, &dummy)) {
+ _RETURN ( true );
+ }
+ }
+#endif
+%}.
+ ^ false
+
+ "
+ Display queryXIEExtension
+ "
+!
+
+queryXIExtension
+%{ /* NOCONTEXT */
+
+#ifdef XI
+ if (ISCONNECTED) {
+ Display *dpy;
+ int dummy;
+
+ dpy = myDpy;
+
+ if (XQueryExtension(dpy, "XInputExtension", &dummy, &dummy, &dummy)) {
+ _RETURN ( true );
+ }
+ }
+#endif
+%}.
+ ^ false
+
+ "
+ Display queryXIExtension
+ "
+!
+
+queryXVideoExtension
+%{ /* NOCONTEXT */
+
+#ifdef XVIDEO
+ if (ISCONNECTED) {
+ Display *dpy;
+ int dummy;
+
+ dpy = myDpy;
+
+ if (XQueryExtension(dpy, "XVideo", &dummy, &dummy, &dummy)) {
+ _RETURN ( true );
+ }
+ }
+#endif
+%}.
+ ^ false
+
+ "
+ Display queryXVideoExtension
+ "
+!
+
scrollsAsynchronous
"return true, if this display asynchronously sends expose events after a
scroll operation. False otherwise. Asynchronous expose events are an X
@@ -7467,7 +7892,7 @@
].
].
- self openConnectionTo:dpyName.
+ displayId := self openConnectionTo:dpyName.
displayId isNil ifTrue:[
"/ could not connect.
@@ -7565,8 +7990,69 @@
!
initializeScreenProperties
+ |masks|
+
super initializeScreenProperties.
+ hasShapeExtension := self queryShapeExtension.
+ hasShmExtension := self querySHMExtension.
+ hasDPSExtension := self queryDPSExtension.
+ hasXVideoExtension := self queryXVideoExtension.
+ hasMbufExtension := self queryMBUFExtension.
+ hasPEXExtension := self queryPEXExtension.
+ 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'.
+
+ altModifierMask := self modifier2Mask.
+ metaModifierMask := self modifier1Mask.
+
+ screen := self queryDefaultScreen.
+ depth := self queryDepth.
+ ncells := self queryCells.
+ width := self queryWidth.
+ height := self queryHeight.
+ widthMM := self queryWidthMM.
+ heightMM := self queryHeightMM.
+ blackpixel := self queryBlackPixel.
+ whitepixel := self queryWhitePixel.
+
+ monitorType := #unknown.
+ visualType := self queryDefaultVisualType.
+
+ hasColors := hasGreyscales := true.
+ (visualType == #StaticGray
+ or:[ visualType == #GrayScale]) ifTrue:[
+ hasColors := false.
+ monitorType := #monochrome.
+ ].
+
+ ncells == 2 ifTrue:[
+ hasColors := hasGreyscales := false.
+ ].
+
+ masks := self queryRGBMasks.
+ redMask := masks at:1.
+ greenMask := masks at:2.
+ blueMask := masks at:3.
+ bitsPerRGB := masks at:4.
+
+ visualType == #TrueColor ifTrue:[
+ redShift := redMask lowBit - 1.
+ greenShift := greenMask lowBit - 1.
+ blueShift := blueMask lowBit - 1.
+
+ bitsRed := redMask highBit - redMask lowBit + 1.
+ bitsGreen := greenMask highBit - greenMask lowBit + 1.
+ bitsBlue := blueMask highBit - blueMask lowBit + 1.
+ ].
+
%{
Display *dpy;
@@ -7578,228 +8064,37 @@
int rgbRedMask, rgbGreenMask, rgbBlueMask;
int rgbVisualID;
int nvi, i;
- int shapeEventBase, shapeErrorBase;
- int shmEventBase, shmErrorBase;
char *type, *nm;
int dummy;
- int mask, shift, nBits;
if (ISCONNECTED) {
- dpy = myDpy;
-
- __INST(altModifierMask) = __MKSMALLINT(Mod2Mask);
- __INST(metaModifierMask) = __MKSMALLINT(Mod1Mask);
-
-
-
- __INST(screen) = __MKSMALLINT(scr = DefaultScreen(dpy));
- __INST(depth) = __MKSMALLINT(DisplayPlanes(dpy, scr));
- __INST(ncells) = __MKSMALLINT(DisplayCells(dpy, scr));
- __INST(width) = __MKSMALLINT(DisplayWidth(dpy, scr));
- __INST(height) = __MKSMALLINT(DisplayHeight(dpy, scr));
- __INST(widthMM) = __MKSMALLINT(DisplayWidthMM(dpy, scr));
- __INST(heightMM) = __MKSMALLINT(DisplayHeightMM(dpy, scr));
- __INST(blackpixel) = __MKSMALLINT(BlackPixel(dpy, scr));
- __INST(whitepixel) = __MKSMALLINT(WhitePixel(dpy, scr));
-
-#ifdef SHAPE
- if (XShapeQueryExtension(dpy, &dummy, &dummy))
- __INST(hasShapeExtension) = true;
- else
-#endif
- __INST(hasShapeExtension) = false;
-
-#ifdef SHM
- if (XQueryExtension(dpy, "MIT_SHM", &dummy, &dummy, &dummy))
- __INST(hasShmExtension) = true;
- else
-#endif
- __INST(hasShmExtension) = false;
-
-#ifdef DPS
- if (XQueryExtension(dpy, "DPSExtension", &dummy, &dummy, &dummy))
- __INST(hasDPSExtension) = true;
- else
-#endif
- __INST(hasDPSExtension) = false;
-
-#ifdef XVIDEO
- if (XQueryExtension(dpy, "XVideo", &dummy, &dummy, &dummy))
- __INST(hasXVideoExtension) = true;
- else
-#endif
- __INST(hasXVideoExtension) = false;
-
-#ifdef MBUF
- if (XQueryExtension(dpy, "Multi-Buffering", &dummy, &dummy, &dummy))
- __INST(hasMbufExtension) = true;
- else
-#endif
- __INST(hasMbufExtension) = false;
-
-#ifdef PEX5
- if (XQueryExtension(dpy, PEX_NAME_STRING, &dummy, &dummy, &dummy))
- __INST(hasPEXExtension) = true;
- else
-#endif
- __INST(hasPEXExtension) = false;
-
-#ifdef XIE
- if (XQueryExtension(dpy, xieExtName, &dummy, &dummy, &dummy))
- __INST(hasImageExtension) = true;
- else
-#endif
- __INST(hasImageExtension) = false;
-
-#ifdef XI
- if (XQueryExtension(dpy, "XInputExtension", &dummy, &dummy, &dummy))
- __INST(hasInputExtension) = true;
- else
-#endif
- __INST(hasInputExtension) = false;
-
- /*
- * look for RGB visual
- */
- nvi = 0;
- viproto.screen = scr;
- vip = XGetVisualInfo (dpy, VisualScreenMask, &viproto, &nvi);
- maxRGBDepth = 0;
- for (i = 0; i < nvi; i++) {
- switch (vip[i].class) {
- case TrueColor:
- if (vip[i].depth > maxRGBDepth) {
- maxRGBDepth = vip[i].depth;
- rgbRedMask = vip[i].red_mask;
- rgbGreenMask = vip[i].green_mask;
- rgbBlueMask = vip[i].blue_mask;
- rgbVisualID = vip[i].visualid;
- }
- break;
- }
- }
- if (vip) XFree ((char *) vip);
-
- if (maxRGBDepth) {
- __INST(rgbVisual) = __MKEXTERNALADDRESS(rgbVisualID); __STORESELF(rgbVisual);
- }
-
- visual = DefaultVisualOfScreen(DefaultScreenOfDisplay(dpy));
- __INST(monitorType) = @symbol(unknown);
- __INST(hasColors) = true;
- __INST(hasGreyscales) = true;
- switch (visual->class) {
- case StaticGray:
- __INST(visualType) = @symbol(StaticGray);
- __INST(hasColors) = false;
- __INST(monitorType) = @symbol(monochrome);
- break;
- case GrayScale:
- __INST(visualType) = @symbol(GrayScale);
- __INST(hasColors) = false;
- __INST(monitorType) = @symbol(monochrome);
- break;
- case StaticColor:
- __INST(visualType) = @symbol(StaticColor);
- break;
- case PseudoColor:
- __INST(visualType) = @symbol(PseudoColor);
- break;
- case TrueColor:
- __INST(visualType) = @symbol(TrueColor);
- break;
- case DirectColor:
- __INST(visualType) = @symbol(DirectColor);
- break;
- }
- if (DisplayCells(dpy, scr) == 2) {
- __INST(hasColors) = false;
- __INST(hasGreyscales) = false;
- __INST(monitorType) = @symbol(monochrome);
- }
- __INST(bitsPerRGB) = __MKSMALLINT(visual->bits_per_rgb);
- __INST(redMask) = __MKSMALLINT(visual->red_mask);
- __INST(greenMask) = __MKSMALLINT(visual->green_mask);
- __INST(blueMask) = __MKSMALLINT(visual->blue_mask);
- switch (visual->class) {
- case TrueColor:
- /* extract number of bits and shift counts */
- mask = visual->red_mask;
- shift = 0;
- while (mask && ((mask & 1) == 0)) {
- mask >>= 1;
- shift++;
- }
- __INST(redShift) = __MKSMALLINT(shift);
- nBits = 0;
- while (mask) {
- mask >>= 1;
- nBits++;
- }
- __INST(bitsRed) = __MKSMALLINT(nBits);
-
- mask = visual->green_mask;
- shift = 0;
- while (mask && ((mask & 1) == 0)) {
- mask >>= 1;
- shift++;
- }
- __INST(greenShift) = __MKSMALLINT(shift);
- nBits = 0;
- while (mask) {
- mask >>= 1;
- nBits++;
- }
- __INST(bitsGreen) = __MKSMALLINT(nBits);
-
- mask = visual->blue_mask;
- shift = 0;
- while (mask && ((mask & 1) == 0)) {
- mask >>= 1;
- shift++;
- }
- __INST(blueShift) = __MKSMALLINT(shift);
- nBits = 0;
- while (mask) {
- mask >>= 1;
- nBits++;
- }
- __INST(bitsBlue) = __MKSMALLINT(nBits);
- break;
- }
-
-#ifndef XA_PRIMARY
- __INST(primaryAtom) = __MKATOMOBJ( XInternAtom(dpy, "PRIMARY", True) );
-#else
- __INST(primaryAtom) = __MKATOMOBJ( XA_PRIMARY );
-#endif
-#ifndef XA_SECONDARY
- __INST(secondaryAtom) = __MKATOMOBJ( XInternAtom(dpy, "SECONDARY", True) );
-#else
- __INST(secondaryAtom) = __MKATOMOBJ( XA_SECONDARY );
-#endif
-#ifndef XA_CUT_BUFFER0
- __INST(cutBuffer0Atom) = __MKATOMOBJ( XInternAtom(dpy, "CUT_BUFFER0", True) );
-#else
- __INST(cutBuffer0Atom) = __MKATOMOBJ( XA_CUT_BUFFER0 );
-#endif
-#ifndef XA_STRING
- __INST(stringAtom) = __MKATOMOBJ( XInternAtom(dpy, "STRING", True) );
-#else
- __INST(stringAtom) = __MKATOMOBJ( XA_STRING );
-#endif
-#ifndef XA_LENGTH
- __INST(lengthAtom) = __MKATOMOBJ( XInternAtom(dpy, "LENGTH", True) );
-#else
- __INST(lengthAtom) = __MKATOMOBJ( XA_LENGTH );
-#endif
-#ifndef WM_STATE
- __INST(wmStateAtom) = __MKATOMOBJ( XInternAtom(dpy, "WM_STATE", True) );
-#else
- __INST(wmStateAtom) = __MKATOMOBJ( WM_STATE );
-#endif
-
-
+ dpy = myDpy;
+
+ /*
+ * look for RGB visual
+ */
+ nvi = 0;
+ viproto.screen = scr;
+ vip = XGetVisualInfo (dpy, VisualScreenMask, &viproto, &nvi);
+ maxRGBDepth = 0;
+ for (i = 0; i < nvi; i++) {
+ switch (vip[i].class) {
+ case TrueColor:
+ if (vip[i].depth > maxRGBDepth) {
+ maxRGBDepth = vip[i].depth;
+ rgbRedMask = vip[i].red_mask;
+ rgbGreenMask = vip[i].green_mask;
+ rgbBlueMask = vip[i].blue_mask;
+ rgbVisualID = vip[i].visualid;
+ }
+ break;
+ }
+ }
+ if (vip) XFree ((char *) vip);
+
+ if (maxRGBDepth) {
+ __INST(rgbVisual) = __MKEXTERNALADDRESS(rgbVisualID); __STORESELF(rgbVisual);
+ }
}
%}.
!
@@ -7824,23 +8119,13 @@
openConnectionTo:dpyName
"open a connection to some display;
- set my displayId if ok; leaves it as nil of not ok"
+ return displayId if ok, nil of not ok"
%{
Display *dpy;
int i;
char *nm;
- if (__INST(displayId) != nil) {
- /*
- * already connected - you bad guy try to
- * trick me manually ?
- */
- RETURN ( self );
- }
-
-
-
if (__isString(dpyName))
nm = (char *) __stringVal(dpyName);
else {
@@ -7852,17 +8137,17 @@
static int firstCall = 1;
OBJ dpyID;
- __INST(displayId) = dpyID = __MKEXTERNALADDRESS(dpy); __STORE(self, dpyID);
+ dpyID = __MKEXTERNALADDRESS(dpy);
if (firstCall) {
firstCall = 0;
XSetErrorHandler(__XErrorHandler__);
XSetIOErrorHandler(__XIOErrorHandler__);
}
- }
-
-
-%}
+ RETURN (dpyID);
+ }
+%}.
+ ^ nil
!
reinitialize
@@ -7950,49 +8235,61 @@
|modifierKeyMap maxKeyPerMod ret nextKey|
+ modifierKeyMap := self rawModifierMapping.
+ maxKeyPerMod := modifierKeyMap size // 8.
+ modifierKeyMap isNil ifTrue:[^ nil].
+
+ 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.
+ ].
+
+ ^ ret
+
+ "
+ Display modifierMapping
+ "
+!
+
+rawModifierMapping
+ "Get the raw Modifier Mapping."
+
+ |modifierKeyMap maxKeyPerMod |
+
%{
XModifierKeymap *modmap;
OBJ __BYTEARRAY_UNINITIALIZED_NEW_INT();
if (ISCONNECTED) {
- Display *dpy = myDpy;
-
- if ((modmap = XGetModifierMapping(dpy)) != 0) {
- maxKeyPerMod = __MKSMALLINT(modmap->max_keypermod);
- modifierKeyMap = __BYTEARRAY_UNINITIALIZED_NEW_INT(modmap->max_keypermod * 8);
- if (modifierKeyMap != nil) {
- maxKeyPerMod = __MKSMALLINT(modmap->max_keypermod);
- memcpy((char *)__ByteArrayInstPtr(modifierKeyMap)->ba_element,
- (char *)modmap->modifiermap, modmap->max_keypermod * 8);
- }
- XFreeModifiermap(modmap);
- }
- }
-%}.
-
- modifierKeyMap isNil ifTrue:[^ nil].
-
- 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.
- ].
-
- ^ ret
-
- "
- Display modifierMapping
+ Display *dpy = myDpy;
+
+ if ((modmap = XGetModifierMapping(dpy)) != 0) {
+ maxKeyPerMod = __MKSMALLINT(modmap->max_keypermod);
+ modifierKeyMap = __BYTEARRAY_UNINITIALIZED_NEW_INT(modmap->max_keypermod * 8);
+ if (modifierKeyMap != nil) {
+ memcpy((char *)__ByteArrayInstPtr(modifierKeyMap)->ba_element,
+ (char *)modmap->modifiermap, modmap->max_keypermod * 8);
+ }
+ XFreeModifiermap(modmap);
+ }
+ }
+%}.
+ ^ modifierKeyMap
+
+ "
+ Display rawModifierMapping
"
!
@@ -10224,6 +10521,6 @@
!XWorkstation class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libview/XWorkstation.st,v 1.349 2000-05-30 20:29:31 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libview/XWorkstation.st,v 1.350 2000-07-02 12:55:15 cg Exp $'
! !
XWorkstation initialize!