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/ >
