XWorkstation.st
changeset 2195 f64b74292537
parent 2176 80290576c9db
child 2231 817b5fad2fb7
equal deleted inserted replaced
2194:9a1006b2d9de 2195:f64b74292537
  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 
  9904 ! !
  9931 ! !
  9905 
  9932 
  9906 !XWorkstation class methodsFor:'documentation'!
  9933 !XWorkstation class methodsFor:'documentation'!
  9907 
  9934 
  9908 version
  9935 version
  9909     ^ '$Header: /cvs/stx/stx/libview/XWorkstation.st,v 1.285 1998-07-17 10:14:04 cg Exp $'
  9936     ^ '$Header: /cvs/stx/stx/libview/XWorkstation.st,v 1.286 1998-07-28 09:59:42 cg Exp $'
  9910 ! !
  9937 ! !
  9911 XWorkstation initialize!
  9938 XWorkstation initialize!