There is issue 19388
<https://pharo.fogbugz.com/f/cases/19388/MouseEnter-and-MouseLeave-are-triggered-twice>
.
According to Henrik problem is related to Morphic logic and not to window
management.


2017-01-27 8:15 GMT+01:00 stepharong <[email protected]>:

> 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