[squeak-dev] The Trunk: Morphic-mt.1181.mcz
asqueaker at gmail.com
Wed Jun 15 15:36:59 UTC 2016
Great! And if it is necessary to create a new Event to extend
attributes of an original Event, it could wrap it. I always felt
Event data should be basically immutable..
On Wed, Jun 15, 2016 at 4:20 AM, <commits at source.squeak.org> wrote:
> Marcel Taeumel uploaded a new version of Morphic to project The Trunk:
> ==================== Summary ====================
> Name: Morphic-mt.1181
> Author: mt
> Time: 15 June 2016, 11:20:40.050378 am
> UUID: 855f8338-73de-5947-9dc5-99e912d115a2
> Ancestors: Morphic-mt.1180
> ixes regression in event dispatching and coordinate transformations. Do not reset transformation in the event copy delivered to submorphs. They need those for, e.g., double click, drag-and-drop, etc.
> Our events do, more or less, not change after being created and initialized. The only exception is #wasHandled, #wasIgnored, and #position during event dispatching. Keep it that way. If you plan to change some event state in an event filter, create a new event instead and do not mess around with the current one.
> =============== Diff against Morphic-mt.1180 ===============
> Item was changed:
> ----- Method: MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: (in category 'private') -----
> dispatchEvent: anEvent toSubmorphsOf: aMorph
> + "Dispatch the given event to the submorphs of the given morph. For coordinate transformations, work only with copies. Either return the given event or a copy of any filtered event to employ immutability to some extent. --- PRIVATE!!"
> - "Dispatch the given event to the submorphs of the given morph. --- PRIVATE!!"
> + | localEvent filteredEvent |
> - | filteredEvent |
> aMorph submorphsDo: [:child |
> + localEvent := anEvent transformedBy: (child transformedFrom: aMorph).
> filteredEvent := child
> + processEvent: localEvent
> - processEvent: (anEvent transformedBy: (child transformedFrom: aMorph))
> using: self. "use same dispatcher"
> + filteredEvent == #rejected ifFalse: [ "some event or #rejected symbol"
> + self flag: #overlappingChildren. "mt: We cannot give two overlapping siblings the chance to handle the event!!"
> + filteredEvent == localEvent
> + ifTrue: [
> + localEvent wasHandled ifTrue: [anEvent copyHandlerState: localEvent].
> + anEvent wasIgnored: localEvent wasIgnored.
> + ^ anEvent]
> + ifFalse: [
> + filteredEvent := filteredEvent copy.
> + filteredEvent translateTo: anEvent position. "restore to untransformed coordinates"
> + filteredEvent wasHandled ifFalse: [filteredEvent copyHandlerState: anEvent]. "restore handler if needed"
> + ^ filteredEvent]]].
> - filteredEvent == #rejected ifFalse: [ "filteredEvent or #rejected"
> - filteredEvent translateTo: anEvent position. "restore to untransformed coordinates"
> - filteredEvent wasHandled ifFalse: [filteredEvent copyHandlerState: anEvent]. "restore handler if needed"
> - self flag: #overlappingChildren. "mt: We cannot give two overlapping siblings the chance to handle the event!!"
> - ^ filteredEvent]].
> ^ #rejected!
More information about the Squeak-dev