--- a/WindowGroup.st Wed Sep 19 20:14:30 2001 +0200
+++ b/WindowGroup.st Mon Sep 24 10:24:13 2001 +0200
@@ -16,7 +16,7 @@
instanceVariableNames:'graphicsDevice views topViews myProcess mySensor isModal
previousGroup focusView focusSequence preEventHook postEventHook
pointerView isForModalSubview focusByTab groupHasFocus busyHook
- busyHookTimeout inModalLoop'
+ busyHookTimeout inModalLoop preEventHooks postEventHooks'
classVariableNames:'LastActiveGroup LastActiveProcess LeaveSignal
WindowGroupQuerySignal LastEventQuerySignal BusyHookTime'
poolDictionaries:''
@@ -597,6 +597,28 @@
!WindowGroup methodsFor:'accessing-hooks'!
+addPostEventHook:anEventProcessor
+ "add another postEventHook"
+
+ postEventHooks isNil ifTrue:[
+ postEventHooks := OrderedCollection new.
+ ].
+ (postEventHooks includesIdentical:anEventProcessor) ifFalse:[
+ postEventHooks add:anEventProcessor
+ ].
+!
+
+addPreEventHook:anEventProcessor
+ "add another preEventHook"
+
+ preEventHooks isNil ifTrue:[
+ preEventHooks := OrderedCollection new.
+ ].
+ (preEventHooks includesIdentical:anEventProcessor) ifFalse:[
+ preEventHooks add:anEventProcessor
+ ].
+!
+
busyHook
"return the busyHook if any"
@@ -656,6 +678,32 @@
preEventHook := anObject
!
+preEventHooks
+ "return the preEventHooks if any"
+
+ ^ preEventHooks
+
+ "Created: 7.3.1996 / 14:42:42 / cg"
+!
+
+removePostEventHook:anEventProcessor
+ "remove a postEventHook"
+
+ postEventHooks notNil ifTrue:[
+ postEventHooks removeIdentical:anEventProcessor ifAbsent:nil.
+ postEventHooks isEmpty ifTrue:[ postEventHooks := nil ].
+ ].
+!
+
+removePreEventHook:anEventProcessor
+ "remove a preEventHook"
+
+ preEventHooks notNil ifTrue:[
+ preEventHooks removeIdentical:anEventProcessor ifAbsent:nil.
+ preEventHooks isEmpty ifTrue:[ preEventHooks := nil ].
+ ].
+!
+
showWaitCursorWhenBusyForMillis:millis
"setup a busyHook, which automatically shows a waitCursor,
whenever some action takes longer than millis"
@@ -1343,6 +1391,29 @@
"Modified: / 5.2.1999 / 22:32:07 / cg"
!
+executePostEventHooksFor:anEvent
+ postEventHook notNil ifTrue:[
+ postEventHook processEvent:anEvent
+ ].
+ postEventHooks notNil ifTrue:[
+ postEventHooks do:[:eachHook |
+ eachHook processEvent:anEvent
+ ]
+ ].
+!
+
+executePreEventHooksFor:anEvent
+ preEventHook notNil ifTrue:[
+ (preEventHook processEvent:anEvent) ifTrue:[ ^ true ].
+ ].
+ preEventHooks notNil ifTrue:[
+ preEventHooks do:[:eachHook |
+ (eachHook processEvent:anEvent) ifTrue:[ ^ true ].
+ ]
+ ].
+ ^ false
+!
+
leaveEventLoop
"immediately leave the event loop, returning way back.
This can be used to leave (and closedown) a modal group.
@@ -1454,11 +1525,7 @@
"/ give eventRecorders, catchers etc.
"/ a chance to eat or modify that event
- (preEventHook notNil
- and:[preEventHook processEvent:event]) ifTrue:[
- ignore := true.
- ].
-
+ ignore := (self executePreEventHooksFor:event).
ignore ifFalse:[
evView := event view.
@@ -1559,10 +1626,7 @@
"/ give eventRecorders, postProcessors
"/ a chance to see that event
-
- postEventHook notNil ifTrue:[
- postEventHook processEvent:event
- ].
+ self executePostEventHooksFor:event
]
].
].
@@ -1611,8 +1675,7 @@
LastEventQuerySignal handle:[:ex |
ex proceedWith:event
] do:[
- (preEventHook notNil
- and:[preEventHook processEvent:event]) ifFalse:[
+ (self executePreEventHooksFor:event) ifFalse:[
"/
"/ if the view is no longer shown (iconified or closed),
"/ this is a leftover event and ignored.
@@ -1625,11 +1688,9 @@
view dispatchEvent:event withFocusOn:nil delegate:true.
].
- ]
+ ].
+ self executePostEventHooksFor:event.
].
- postEventHook notNil ifTrue:[
- postEventHook processEvent:event
- ]
]
]
]
@@ -1675,8 +1736,7 @@
LastEventQuerySignal handle:[:ex |
ex proceedWith:event
] do:[
- (preEventHook notNil
- and:[preEventHook processEvent:event]) ifFalse:[
+ (self executePreEventHooksFor:event) ifFalse:[
view := event view.
"/
"/ if the view is no longer shown (iconified or closed),
@@ -1697,9 +1757,7 @@
]
]
].
- postEventHook notNil ifTrue:[
- postEventHook processEvent:event
- ]
+ self executePostEventHooksFor:event.
]
]
]
@@ -2598,6 +2656,6 @@
!WindowGroup class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libview/WindowGroup.st,v 1.231 2001-09-10 16:08:33 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libview/WindowGroup.st,v 1.232 2001-09-24 08:24:13 cg Exp $'
! !
WindowGroup initialize!