diff -r 9a1006b2d9de -r f64b74292537 XWorkstation.st --- 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!