XWorkstation.st
changeset 2195 f64b74292537
parent 2176 80290576c9db
child 2231 817b5fad2fb7
--- a/XWorkstation.st	Mon Jul 27 20:22:45 1998 +0200
+++ b/XWorkstation.st	Tue Jul 28 11:59:42 1998 +0200
@@ -6741,91 +6741,118 @@
     self primitiveFailed
 !
 
-grabPointerIn:aWindowId withCursor:aCursorId pointerMode:pMode keyboardMode:kMode confineTo:confineId
+grabPointerIn:aWindowId withCursor:aCursorId eventMask:eventMask pointerMode:pMode keyboardMode:kMode confineTo:confineId
     "grap the pointer - return true if ok"
 
 %{  /* NOCONTEXT */
 
-    int result, ok;
+    int result, ok, evMask;
     Window confineWin;
     Cursor curs;
     int pointer_mode, keyboard_mode;
 
     if (ISCONNECTED) {
-	if (__isExternalAddress(aWindowId)) {
-	    if (__isExternalAddress(confineId)) 
-		confineWin = _WindowVal(confineId);
-	    else
-		confineWin = (Window) None;
-
-	    if (__isExternalAddress(aCursorId)) 
-		curs = _CursorVal(aCursorId);
-	    else
-		curs = (Cursor) None;
-
-	    if (pMode == @symbol(sync))
-		pointer_mode = GrabModeSync;
-	    else
-		pointer_mode = GrabModeAsync;
-
-	    if (kMode == @symbol(sync))
-		keyboard_mode = GrabModeSync;
-	    else
-		keyboard_mode = GrabModeAsync;
-
-	    BEGIN_INTERRUPTSBLOCKED
-	    ENTER_XLIB();
-	    result = XGrabPointer(myDpy,
-				  _WindowVal(aWindowId), 
-				  False, 
-				  ButtonPressMask | ButtonMotionMask | ButtonReleaseMask,
-				  pointer_mode, keyboard_mode,
-				  confineWin,
-				  curs,
-				  CurrentTime);
-	    LEAVE_XLIB();
-	    END_INTERRUPTSBLOCKED
-
-	    ok = 0;
-	    switch (result) {
-		case AlreadyGrabbed: 
-		    if (@global(ErrorPrinting) == true) {
-			fprintf(stderr, "XWorkstation [warning]: grab pointer: AlreadyGrabbed\n");
-		    }
-		    break;
-		case GrabNotViewable: 
-		    if (@global(ErrorPrinting) == true) {
-			fprintf(stderr, "XWorkstation [warning]: grab pointer: GrabNotViewable\n");
-		    }
-		    break;
-		case GrabInvalidTime: 
-		    if (@global(ErrorPrinting) == true) {
-			fprintf(stderr, "XWorkstation [warning]: grab pointer: InvalidTime\n");
-		    }
-		    break;
-		case GrabFrozen: 
-		    if (@global(ErrorPrinting) == true) {
-			fprintf(stderr, "XWorkstation [warning]: grab pointer: Frozen\n");
-		    }
-		    break;
-		default:
-		    ok = 1;
-		    break;
-	    }
-
-	    if (! ok) {
-	        ENTER_XLIB();
-		XUngrabPointer(myDpy, CurrentTime);
-	        LEAVE_XLIB();
-		RETURN (false);
-	    }
-	    RETURN ( true );
-	}
+        if (__isExternalAddress(aWindowId)) {
+            if (__isExternalAddress(confineId)) 
+                confineWin = _WindowVal(confineId);
+            else
+                confineWin = (Window) None;
+
+            if (__isExternalAddress(aCursorId)) 
+                curs = _CursorVal(aCursorId);
+            else
+                curs = (Cursor) None;
+
+            if (pMode == @symbol(sync))
+                pointer_mode = GrabModeSync;
+            else
+                pointer_mode = GrabModeAsync;
+
+            if (kMode == @symbol(sync))
+                keyboard_mode = GrabModeSync;
+            else
+                keyboard_mode = GrabModeAsync;
+
+            if (__isSmallInteger(eventMask))
+                evMask = __intVal(eventMask);
+            else
+                evMask = ButtonPressMask | ButtonMotionMask | PointerMotionMask | ButtonReleaseMask;
+
+            BEGIN_INTERRUPTSBLOCKED
+/*
+            ENTER_XLIB();
+*/
+            result = XGrabPointer(myDpy,
+                                  _WindowVal(aWindowId), 
+                                  False, 
+                                  evMask,
+                                  pointer_mode, keyboard_mode,
+                                  confineWin,
+                                  curs,
+                                  CurrentTime);
+/*
+            LEAVE_XLIB();
+*/
+            END_INTERRUPTSBLOCKED
+
+            ok = 0;
+            switch (result) {
+                case AlreadyGrabbed: 
+                    if (@global(ErrorPrinting) == true) {
+                        fprintf(stderr, "XWorkstation [warning]: grab pointer: AlreadyGrabbed\n");
+                    }
+                    break;
+                case GrabNotViewable: 
+                    if (@global(ErrorPrinting) == true) {
+                        fprintf(stderr, "XWorkstation [warning]: grab pointer: GrabNotViewable\n");
+                    }
+                    break;
+                case GrabInvalidTime: 
+                    if (@global(ErrorPrinting) == true) {
+                        fprintf(stderr, "XWorkstation [warning]: grab pointer: InvalidTime\n");
+                    }
+                    break;
+                case GrabFrozen: 
+                    if (@global(ErrorPrinting) == true) {
+                        fprintf(stderr, "XWorkstation [warning]: grab pointer: Frozen\n");
+                    }
+                    break;
+                default:
+                    ok = 1;
+                    break;
+            }
+
+            if (! ok) {
+/*
+                ENTER_XLIB();
+*/
+                XUngrabPointer(myDpy, CurrentTime);
+/*
+                LEAVE_XLIB();
+*/
+                RETURN (false);
+            }
+            RETURN ( true );
+        }
     }
 %}.
     self primitiveFailed
 !
 
+grabPointerIn:aWindowId withCursor:aCursorId pointerMode:pMode keyboardMode:kMode confineTo:confineId
+    "grap the pointer - return true if ok"
+
+    ^ self
+        grabPointerIn:aWindowId 
+        withCursor:aCursorId 
+        eventMask:nil
+        pointerMode:pMode 
+        keyboardMode:kMode 
+        confineTo:confineId
+
+    "Modified: / 28.7.1998 / 02:47:51 / cg"
+!
+
 ungrabKeyboard
     "release the keyboard"
 
@@ -9906,6 +9933,6 @@
 !XWorkstation class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libview/XWorkstation.st,v 1.285 1998-07-17 10:14:04 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libview/XWorkstation.st,v 1.286 1998-07-28 09:59:42 cg Exp $'
 ! !
 XWorkstation initialize!