HandMorph>>#processEvents

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

HandMorph>>#processEvents

philippeback
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
Reply | Threaded
Open this post in threaded view
|

Re: HandMorph>>#processEvents

stepharong
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 | Threaded
Open this post in threaded view
|

Re: HandMorph>>#processEvents

Denis Kudriashov
There is issue 19388.
According to Henrik problem is related to Morphic logic and not to window management.


2017-01-27 8:15 GMT+01:00 stepharong <[hidden email]>:
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/