Marcel Taeumel uploaded a new version of Morphic to project The Trunk: http://source.squeak.org/trunk/Morphic-mt.1181.mcz
==================== 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!
packages@lists.squeakfoundation.org