--- a/DeviceWorkstation.st Wed Feb 22 21:24:07 2017 +0100
+++ b/DeviceWorkstation.st Thu Feb 23 14:08:40 2017 +0100
@@ -1259,12 +1259,18 @@
waitButton
"wait for any button to be pressed"
- [self anyButtonPressed] whileFalse:[Delay waitForSeconds:0.05].
+ |delay|
+
+ delay := Delay forSeconds:0.05.
+
+ [self anyButtonPressed] whileFalse:[delay wait].
"
Sensor waitButton.
Sensor waitNoButton
"
+
+ "Modified: / 23-02-2017 / 13:31:56 / stefan"
!
waitClickButton
@@ -1288,12 +1294,18 @@
waitNoButton
"wait for no button to be pressed"
- [self anyButtonPressed] whileTrue:[Delay waitForSeconds:0.05].
+ |delay|
+
+ delay := Delay forSeconds:0.05.
+
+ [self anyButtonPressed] whileTrue:[delay wait].
"
Sensor waitButton.
Sensor waitNoButton
"
+
+ "Modified: / 23-02-2017 / 13:32:33 / stefan"
! !
!DeviceWorkstation methodsFor:'Signal constants'!
@@ -6409,14 +6421,15 @@
Start with initialRectangle.
Can be used for dragging operations."
- |curs origin root rect prevGrab|
-
+ |curs origin root rect prevGrab delay|
+
+ delay := Delay forSeconds:0.05.
curs := Cursor origin onDevice:self.
"
just in case; wait for button to be down ...
"
- [self leftButtonPressed] whileFalse:[Delay waitForSeconds:0.05].
+ [self leftButtonPressed] whileFalse:[delay wait].
root := self rootView.
@@ -6456,7 +6469,7 @@
self flush.
origin := newOrigin.
] ifFalse:[
- Delay waitForSeconds:0.05
+ delay wait.
]
].
root displayRectangle:rect.
@@ -6480,7 +6493,8 @@
Display originFromUser:200@200
"
- "Modified: / 18.8.1998 / 15:00:14 / cg"
+ "Modified: / 18-08-1998 / 15:00:14 / cg"
+ "Modified: / 23-02-2017 / 13:27:39 / stefan"
!
pointFromUser
@@ -6524,7 +6538,7 @@
Show aCursor while waiting. Pressing shift or ctrl cancels the operation,
and aborts"
- |p prevGrab prevKbdGrab|
+ |p prevGrab prevKbdGrab delay|
prevGrab := activePointerGrab.
prevKbdGrab := activeKeyboardGrab.
@@ -6532,43 +6546,44 @@
self ungrabPointer.
self grabPointerInView:(self rootView) withCursor:(aCursor onDevice:self).
+ delay := Delay forSeconds:0.05.
"
wait for no leftButton...
"
[self leftButtonPressed] whileTrue:[
- Delay waitForSeconds:0.05.
+ delay wait.
].
[
- self grabKeyboardInView:(self rootView).
-
- "
- wait for leftButton...
- ctrl, shift or escape terminate that operation
- "
- [self leftButtonPressed] whileFalse:[
- (self ctrlDown or:[self shiftDown or:[activePointerGrab == nil]]) ifTrue:[
- AbortOperationRequest raise.
- ^ nil
- ].
- feedbackBlockOrNil notNil ifTrue:[
- feedbackBlockOrNil value:(self pointerPosition)
- ].
- Delay waitForSeconds:0.05.
- ].
-
- p := self pointerPosition.
+ self grabKeyboardInView:(self rootView).
+
+ "
+ wait for leftButton...
+ ctrl, shift or escape terminate that operation
+ "
+ [self leftButtonPressed] whileFalse:[
+ (self ctrlDown or:[self shiftDown or:[activePointerGrab == nil]]) ifTrue:[
+ AbortOperationRequest raise.
+ ^ nil
+ ].
+ feedbackBlockOrNil notNil ifTrue:[
+ feedbackBlockOrNil value:(self pointerPosition)
+ ].
+ delay wait.
+ ].
+
+ p := self pointerPosition.
] ensure:[
- self ungrabKeyboard.
- prevKbdGrab notNil ifTrue:[
- self grabKeyboardInView:prevKbdGrab
- ].
- self ungrabPointer.
- prevGrab notNil ifTrue:[
- self grabPointerInView:prevGrab
- ].
- "flush all events pending on myself"
- self disposeButtonEventsFor:nil.
+ self ungrabKeyboard.
+ prevKbdGrab notNil ifTrue:[
+ self grabKeyboardInView:prevKbdGrab
+ ].
+ self ungrabPointer.
+ prevGrab notNil ifTrue:[
+ self grabPointerInView:prevGrab
+ ].
+ "flush all events pending on myself"
+ self disposeButtonEventsFor:nil.
].
^ p
@@ -6581,6 +6596,7 @@
"
"Modified: / 08-02-2011 / 21:48:08 / cg"
+ "Modified: / 23-02-2017 / 13:28:33 / stefan"
!
rectangleFromUser
@@ -6631,7 +6647,7 @@
Start with initialRectangle.
A helper for rectangleFromUser; can also be used for resizing operations."
- |curs1 origin corner root rect doRegrab prevGrab|
+ |curs1 origin corner root rect doRegrab prevGrab delay|
"/ regrabbing leads to horrible flicker and
"/ events being sent to applications under the mouse.
@@ -6639,9 +6655,9 @@
doRegrab := self class ~~ WinWorkstation.
keepExtent ifTrue:[
- curs1 := Cursor origin
+ curs1 := Cursor origin
] ifFalse:[
- curs1 := Cursor corner
+ curs1 := Cursor corner
].
curs1 := curs1 onDevice:self.
root := self rootView.
@@ -6654,92 +6670,94 @@
root clippedByChildren:false.
root foreground:blackColor background:whiteColor.
+ delay := Delay forSeconds:0.05.
+
root xoring:[
- |left right top bottom newOrigin newCorner p curs|
-
- keepExtent ifFalse:[
- corner := origin.
- rect := origin corner:corner.
- root displayRectangle:rect.
- ].
-
- prevGrab := activePointerGrab.
- self grabPointerInView:root withCursor:curs1.
-
- "
- just in case; wait for button to be down ...
- "
- [self leftButtonPressed] whileFalse:[Delay waitForSeconds:0.05].
-
- keepExtent ifTrue:[
- p := self pointerPosition.
- origin := p.
- corner := origin + initialRectangle extent.
- rect := origin corner:corner.
- root displayRectangle:rect.
- ].
-
- [self leftButtonPressed] whileTrue:[
- left := initialRectangle origin x.
- top := initialRectangle origin y.
- right := initialRectangle corner x.
- bottom := initialRectangle corner y.
-
- p := self pointerPosition.
- keepExtent ifTrue:[
- newOrigin := p.
- newCorner := newOrigin + initialRectangle extent.
- curs := curs1.
- ] ifFalse:[
- p x < initialRectangle left ifTrue:[
- p y < initialRectangle top ifTrue:[
- curs := Cursor topLeft.
- left := p x.
- top := p y.
- ] ifFalse:[
- curs := Cursor bottomLeft.
- left := p x.
- bottom := p y
- ]
- ] ifFalse:[
- p y < initialRectangle top ifTrue:[
- curs := Cursor topRight.
- right := p x.
- top := p y
- ] ifFalse:[
- curs := Cursor bottomRight.
- right := p x.
- bottom := p y
- ]
- ].
-
- newOrigin := left @ top.
- newCorner := right @ bottom.
- ].
-
- ((newOrigin ~= origin) or:[newCorner ~= corner]) ifTrue:[
- root displayRectangle:rect.
- doRegrab ifTrue:[
- self grabPointerInView:root withCursor:curs1.
- ].
-
- origin := newOrigin.
- corner := newCorner.
- rect := origin corner:corner.
- root displayRectangle:rect.
- self disposeButtonEventsFor:nil.
- self flush.
- ] ifFalse:[
- Delay waitForSeconds:0.05
- ]
- ].
- root displayRectangle:rect.
+ |left right top bottom newOrigin newCorner p curs|
+
+ keepExtent ifFalse:[
+ corner := origin.
+ rect := origin corner:corner.
+ root displayRectangle:rect.
+ ].
+
+ prevGrab := activePointerGrab.
+ self grabPointerInView:root withCursor:curs1.
+
+ "
+ just in case; wait for button to be down ...
+ "
+ [self leftButtonPressed] whileFalse:[delay wait].
+
+ keepExtent ifTrue:[
+ p := self pointerPosition.
+ origin := p.
+ corner := origin + initialRectangle extent.
+ rect := origin corner:corner.
+ root displayRectangle:rect.
+ ].
+
+ [self leftButtonPressed] whileTrue:[
+ left := initialRectangle origin x.
+ top := initialRectangle origin y.
+ right := initialRectangle corner x.
+ bottom := initialRectangle corner y.
+
+ p := self pointerPosition.
+ keepExtent ifTrue:[
+ newOrigin := p.
+ newCorner := newOrigin + initialRectangle extent.
+ curs := curs1.
+ ] ifFalse:[
+ p x < initialRectangle left ifTrue:[
+ p y < initialRectangle top ifTrue:[
+ curs := Cursor topLeft.
+ left := p x.
+ top := p y.
+ ] ifFalse:[
+ curs := Cursor bottomLeft.
+ left := p x.
+ bottom := p y
+ ]
+ ] ifFalse:[
+ p y < initialRectangle top ifTrue:[
+ curs := Cursor topRight.
+ right := p x.
+ top := p y
+ ] ifFalse:[
+ curs := Cursor bottomRight.
+ right := p x.
+ bottom := p y
+ ]
+ ].
+
+ newOrigin := left @ top.
+ newCorner := right @ bottom.
+ ].
+
+ ((newOrigin ~= origin) or:[newCorner ~= corner]) ifTrue:[
+ root displayRectangle:rect.
+ doRegrab ifTrue:[
+ self grabPointerInView:root withCursor:curs1.
+ ].
+
+ origin := newOrigin.
+ corner := newCorner.
+ rect := origin corner:corner.
+ root displayRectangle:rect.
+ self disposeButtonEventsFor:nil.
+ self flush.
+ ] ifFalse:[
+ delay wait.
+ ]
+ ].
+ root displayRectangle:rect.
].
self ungrabPointer.
prevGrab notNil ifTrue:[
- self grabPointerInView:prevGrab
+ self grabPointerInView:prevGrab
].
"flush all events pending on my display"
@@ -6757,8 +6775,9 @@
Display rectangleFromUser:(100@100 corner:300@300) keepExtent:true
"
- "Created: / 24.7.1997 / 15:26:47 / cg"
- "Modified: / 10.9.1998 / 17:38:41 / cg"
+ "Created: / 24-07-1997 / 15:26:47 / cg"
+ "Modified: / 10-09-1998 / 17:38:41 / cg"
+ "Modified: / 23-02-2017 / 13:30:21 / stefan"
!
topviewFromUser