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/

Reply via email to