6739 } |
6739 } |
6740 %}. |
6740 %}. |
6741 self primitiveFailed |
6741 self primitiveFailed |
6742 ! |
6742 ! |
6743 |
6743 |
6744 grabPointerIn:aWindowId withCursor:aCursorId pointerMode:pMode keyboardMode:kMode confineTo:confineId |
6744 grabPointerIn:aWindowId withCursor:aCursorId eventMask:eventMask pointerMode:pMode keyboardMode:kMode confineTo:confineId |
6745 "grap the pointer - return true if ok" |
6745 "grap the pointer - return true if ok" |
6746 |
6746 |
6747 %{ /* NOCONTEXT */ |
6747 %{ /* NOCONTEXT */ |
6748 |
6748 |
6749 int result, ok; |
6749 int result, ok, evMask; |
6750 Window confineWin; |
6750 Window confineWin; |
6751 Cursor curs; |
6751 Cursor curs; |
6752 int pointer_mode, keyboard_mode; |
6752 int pointer_mode, keyboard_mode; |
6753 |
6753 |
6754 if (ISCONNECTED) { |
6754 if (ISCONNECTED) { |
6755 if (__isExternalAddress(aWindowId)) { |
6755 if (__isExternalAddress(aWindowId)) { |
6756 if (__isExternalAddress(confineId)) |
6756 if (__isExternalAddress(confineId)) |
6757 confineWin = _WindowVal(confineId); |
6757 confineWin = _WindowVal(confineId); |
6758 else |
6758 else |
6759 confineWin = (Window) None; |
6759 confineWin = (Window) None; |
6760 |
6760 |
6761 if (__isExternalAddress(aCursorId)) |
6761 if (__isExternalAddress(aCursorId)) |
6762 curs = _CursorVal(aCursorId); |
6762 curs = _CursorVal(aCursorId); |
6763 else |
6763 else |
6764 curs = (Cursor) None; |
6764 curs = (Cursor) None; |
6765 |
6765 |
6766 if (pMode == @symbol(sync)) |
6766 if (pMode == @symbol(sync)) |
6767 pointer_mode = GrabModeSync; |
6767 pointer_mode = GrabModeSync; |
6768 else |
6768 else |
6769 pointer_mode = GrabModeAsync; |
6769 pointer_mode = GrabModeAsync; |
6770 |
6770 |
6771 if (kMode == @symbol(sync)) |
6771 if (kMode == @symbol(sync)) |
6772 keyboard_mode = GrabModeSync; |
6772 keyboard_mode = GrabModeSync; |
6773 else |
6773 else |
6774 keyboard_mode = GrabModeAsync; |
6774 keyboard_mode = GrabModeAsync; |
6775 |
6775 |
6776 BEGIN_INTERRUPTSBLOCKED |
6776 if (__isSmallInteger(eventMask)) |
6777 ENTER_XLIB(); |
6777 evMask = __intVal(eventMask); |
6778 result = XGrabPointer(myDpy, |
6778 else |
6779 _WindowVal(aWindowId), |
6779 evMask = ButtonPressMask | ButtonMotionMask | PointerMotionMask | ButtonReleaseMask; |
6780 False, |
6780 |
6781 ButtonPressMask | ButtonMotionMask | ButtonReleaseMask, |
6781 BEGIN_INTERRUPTSBLOCKED |
6782 pointer_mode, keyboard_mode, |
6782 /* |
6783 confineWin, |
6783 ENTER_XLIB(); |
6784 curs, |
6784 */ |
6785 CurrentTime); |
6785 result = XGrabPointer(myDpy, |
6786 LEAVE_XLIB(); |
6786 _WindowVal(aWindowId), |
6787 END_INTERRUPTSBLOCKED |
6787 False, |
6788 |
6788 evMask, |
6789 ok = 0; |
6789 pointer_mode, keyboard_mode, |
6790 switch (result) { |
6790 confineWin, |
6791 case AlreadyGrabbed: |
6791 curs, |
6792 if (@global(ErrorPrinting) == true) { |
6792 CurrentTime); |
6793 fprintf(stderr, "XWorkstation [warning]: grab pointer: AlreadyGrabbed\n"); |
6793 /* |
6794 } |
6794 LEAVE_XLIB(); |
6795 break; |
6795 */ |
6796 case GrabNotViewable: |
6796 END_INTERRUPTSBLOCKED |
6797 if (@global(ErrorPrinting) == true) { |
6797 |
6798 fprintf(stderr, "XWorkstation [warning]: grab pointer: GrabNotViewable\n"); |
6798 ok = 0; |
6799 } |
6799 switch (result) { |
6800 break; |
6800 case AlreadyGrabbed: |
6801 case GrabInvalidTime: |
6801 if (@global(ErrorPrinting) == true) { |
6802 if (@global(ErrorPrinting) == true) { |
6802 fprintf(stderr, "XWorkstation [warning]: grab pointer: AlreadyGrabbed\n"); |
6803 fprintf(stderr, "XWorkstation [warning]: grab pointer: InvalidTime\n"); |
6803 } |
6804 } |
6804 break; |
6805 break; |
6805 case GrabNotViewable: |
6806 case GrabFrozen: |
6806 if (@global(ErrorPrinting) == true) { |
6807 if (@global(ErrorPrinting) == true) { |
6807 fprintf(stderr, "XWorkstation [warning]: grab pointer: GrabNotViewable\n"); |
6808 fprintf(stderr, "XWorkstation [warning]: grab pointer: Frozen\n"); |
6808 } |
6809 } |
6809 break; |
6810 break; |
6810 case GrabInvalidTime: |
6811 default: |
6811 if (@global(ErrorPrinting) == true) { |
6812 ok = 1; |
6812 fprintf(stderr, "XWorkstation [warning]: grab pointer: InvalidTime\n"); |
6813 break; |
6813 } |
6814 } |
6814 break; |
6815 |
6815 case GrabFrozen: |
6816 if (! ok) { |
6816 if (@global(ErrorPrinting) == true) { |
6817 ENTER_XLIB(); |
6817 fprintf(stderr, "XWorkstation [warning]: grab pointer: Frozen\n"); |
6818 XUngrabPointer(myDpy, CurrentTime); |
6818 } |
6819 LEAVE_XLIB(); |
6819 break; |
6820 RETURN (false); |
6820 default: |
6821 } |
6821 ok = 1; |
6822 RETURN ( true ); |
6822 break; |
6823 } |
6823 } |
|
6824 |
|
6825 if (! ok) { |
|
6826 /* |
|
6827 ENTER_XLIB(); |
|
6828 */ |
|
6829 XUngrabPointer(myDpy, CurrentTime); |
|
6830 /* |
|
6831 LEAVE_XLIB(); |
|
6832 */ |
|
6833 RETURN (false); |
|
6834 } |
|
6835 RETURN ( true ); |
|
6836 } |
6824 } |
6837 } |
6825 %}. |
6838 %}. |
6826 self primitiveFailed |
6839 self primitiveFailed |
|
6840 ! |
|
6841 |
|
6842 grabPointerIn:aWindowId withCursor:aCursorId pointerMode:pMode keyboardMode:kMode confineTo:confineId |
|
6843 "grap the pointer - return true if ok" |
|
6844 |
|
6845 ^ self |
|
6846 grabPointerIn:aWindowId |
|
6847 withCursor:aCursorId |
|
6848 eventMask:nil |
|
6849 pointerMode:pMode |
|
6850 keyboardMode:kMode |
|
6851 confineTo:confineId |
|
6852 |
|
6853 "Modified: / 28.7.1998 / 02:47:51 / cg" |
6827 ! |
6854 ! |
6828 |
6855 |
6829 ungrabKeyboard |
6856 ungrabKeyboard |
6830 "release the keyboard" |
6857 "release the keyboard" |
6831 |
6858 |