--- 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!