'From Squeak3.6beta of ''4 July 2003'' [latest update: #5395] on 14 August 2003 at 8:14:03 am'! "Change Set: SelectionMorphHaloFix-nk Date: 14 August 2003 Author: Ned Konz This fixes three problems with SelectionMorphs: * Moving a selection after adding no morphs wouldn't properly invalidate the moved morphs. * using the blue halo button to add items got broken with the 5240MCP-Complete change set. * If you try to bring up a halo on a SelectionMorph you got a walkback. "! !Morph methodsFor: 'halos and balloon help' stamp: 'nk 8/13/2003 08:48'! transferHalo: event from: formerHaloOwner "Progressively transfer the halo to the next likely recipient" | localEvt w target | self flag: #workAround. "For halo's distinction between 'target' and 'innerTarget' we need to bypass any renderers." (formerHaloOwner == self and:[self isRenderer and:[self wantsHaloFromClick not]]) ifTrue:[ event shiftPressed ifTrue:[ target _ owner. localEvt _ event transformedBy: (self transformedFrom: owner). ] ifFalse:[ target _ self renderedMorph. localEvt _ event transformedBy: (target transformedFrom: self). ]. ^target transferHalo: localEvt from: target]. "Never transfer halo to top-most world" (self isWorldMorph and:[owner isNil]) ifFalse:[ (self wantsHaloFromClick and:[formerHaloOwner ~~ self]) ifTrue:[^self addHalo: event from: formerHaloOwner]]. event shiftPressed ifTrue:[ "Pass it outwards" owner ifNotNil:[^owner transferHalo: event from: formerHaloOwner]. "We're at the top level; throw the event back in to find recipient" formerHaloOwner removeHalo. ^self processEvent: event copy resetHandlerFields. ]. self submorphsDo:[:m| localEvt _ event transformedBy: (m transformedFrom: self). (m fullContainsPoint: localEvt position) ifTrue:[^m transferHalo: event from: formerHaloOwner]. ]. "We're at the bottom most level; throw the event back up to the root to find recipient" formerHaloOwner removeHalo. (w _ self world) ifNil: [ ^self ]. localEvt _ event transformedBy: (self transformedFrom: w) inverseTransformation. ^w processEvent: localEvt resetHandlerFields. ! ! !SelectionMorph methodsFor: 'private' stamp: 'nk 8/14/2003 08:12'! privateFullMoveBy: delta | griddedDelta griddingMorph | selectedItems isEmpty ifTrue: [^ super privateFullMoveBy: delta]. griddingMorph _ self pasteUpMorph. griddingMorph ifNil: [^ super privateFullMoveBy: delta]. griddedDelta _ (griddingMorph gridPoint: self position + delta + slippage) - (griddingMorph gridPoint: self position). slippage _ slippage + (delta - griddedDelta). "keep track of how we lag the true movement." griddedDelta = (0@0) ifTrue: [^ self]. super privateFullMoveBy: griddedDelta. selectedItems do: [:m | m position: (m position + griddedDelta) ] ! ! !SelectionMorph methodsFor: '*connectors-halo commands' stamp: 'nk 8/13/2003 08:46'! addOrRemoveItems: handOrEvent "Make a new selection extending the current one." | oldOwner hand | hand := (handOrEvent isMorphicEvent) ifFalse: [handOrEvent] ifTrue: [handOrEvent hand]. hand addMorphBack: ((self class newBounds: (hand lastEvent cursorPoint extent: 16 @ 16)) setOtherSelection: self). oldOwner := owner. self world abandonAllHalos. "Will delete me" oldOwner addMorph: self! !