Probably a bug.
I started to clean this part 4 years ago and my changes got killed by SDL
+ OS Window and
now apparently SDL 20 is not good enough.
May be in 3 years from now it will be cleaned, who knows.
Stef
Why do we have this twice in processEvents?
self mouseOverHandler processMouseOver: lastMouseEvent
?
Well, maybe that is not there that things happen but if you spy on
mouseEnter and mouseLeave events, you will notice that they are both
sent **twice** all the time.
I think that this happens so often that we would benefit from getting
rid of that twice enter/leave thing (and it is really annoying to have
to deal with these two events when you expect only one. I >am not
"entering entering" a rectangle).
processEvents
"Process user input events from the local input devices."
| evt evtBuf type hadAny |
ActiveEvent ifNotNil: ["Meaning that we were invoked from within an
event response.
Make sure z-order is up to date"
self mouseOverHandler processMouseOver: lastMouseEvent].
hadAny := false.
[(evtBuf := Sensor nextEvent) isNil] whileFalse: [evt := nil. "for
unknown event types"
type := evtBuf first.
type = EventTypeMouse ifTrue: [recentModifiers := evtBuf sixth. evt
:= self generateMouseEvent: evtBuf].
type = EventTypeKeyboard ifTrue: [recentModifiers := evtBuf fifth.
evt := self generateKeyboardEvent: evtBuf].
type = EventTypeDragDropFiles ifTrue: [evt := self
generateDropFilesEvent: evtBuf].
type = EventTypeWindow
ifTrue:[evt := self generateWindowEvent:
evtBuf].
"All other events are ignored"
(type ~= EventTypeDragDropFiles and: [evt isNil])
ifTrue: [^self].
evt isNil ifFalse:
["Finally, handle it"
self handleEvent: evt.
hadAny := true.
"For better user feedback, return immediately after a mouse event
has been processed."
(evt isMouse and: [evt isMouseWheel
not]) ifTrue: [^self]]].
"note: if we come here we didn't have any mouse events"
mouseClickState notNil ifTrue: ["No mouse events during this cycle.
Make sure click states time out accordingly"
mouseClickState handleEvent: lastMouseEvent asMouseMove
from: self].
hadAny ifFalse: ["No pending events. Make
sure z-order is up to date"
self mouseOverHandler processMouseOver: lastMouseEvent]
Clues?
Phil
--
Using Opera's mail client: http://www.opera.com/mail/