'From etoys2.3 of 3 December 2007 [latest update: #1873] on 9 January 2008 at 3:40:30 pm'! !HandMorph methodsFor: 'grabbing/dropping' stamp: 'ar 9/14/2000 11:22'! dropMorphs: anEvent "Drop the morphs at the hands position" self submorphsReverseDo:[:m| "Drop back to front to maintain z-order" self dropMorph: m event: anEvent. ].! ! !HandMorph methodsFor: 'grabbing/dropping' stamp: 'bf 1/9/2008 15:26'! dropMorph: aMorph event: anEvent "Drop the given morph which was carried by the hand" | event dropped | self handleDropOutMorph: aMorph. (anEvent isMouseUp and:[aMorph shouldDropOnMouseUp not]) ifTrue:[^self]. "Note: For robustness in drag and drop handling we remove the morph BEFORE we drop him, but we keep his owner set to the hand. This prevents system lockups when there is a problem in drop handling (for example if there's an error in #wantsToBeDroppedInto:). THIS TECHNIQUE IS NOT RECOMMENDED FOR CASUAL USE." self privateRemove: aMorph. aMorph privateOwner: self. dropped _ aMorph. (dropped hasProperty: #addedFlexAtGrab) ifTrue:[dropped _ aMorph removeFlexShell]. event _ DropEvent new setPosition: self position contents: dropped hand: self. self sendEvent: event focus: nil. event wasHandled ifFalse:[aMorph rejectDropMorphEvent: event]. aMorph owner == self ifTrue:[aMorph delete]. self mouseOverHandler processMouseOver: anEvent.! !