[squeak-dev] The Trunk: Morphic-ul.246.mcz
commits at source.squeak.org
commits at source.squeak.org
Mon Nov 23 04:02:35 UTC 2009
Andreas Raab uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-ul.246.mcz
==================== Summary ====================
Name: Morphic-ul.246
Author: ul
Time: 23 November 2009, 2:58:55 am
UUID: 2b77c9e7-a9d9-e840-a68e-c33ad6d4f837
Ancestors: Morphic-dtl.245
- fix: don't raise an error if the primitive can't open a stream for a dropped file (http://lists.squeakfoundation.org/pipermail/squeak-dev/2009-September/139207.html)
- fix: MouseOverHandler >> #noticeMouseOver:event: sent #includes: to a possibly nil object. Fixed the same way the pharo guys did, but without splitting #processMouseOver: into a lot of small methods. Bug reports:
http://bugs.squeak.org/view.php?id=2697
http://bugs.squeak.org/view.php?id=6186
http://bugs.squeak.org/view.php?id=7415
http://code.google.com/p/pharo/issues/detail?id=889
=============== Diff against Morphic-dtl.245 ===============
Item was added:
+ ----- Method: MouseOverHandler>>initializeTrackedMorphs (in category 'initialize-release') -----
+ initializeTrackedMorphs
+
+ leftMorphs := OrderedCollection new.
+ overMorphs := WriteStream on: #().
+ enteredMorphs := WriteStream on: #().!
Item was changed:
----- Method: MouseOverHandler>>initialize (in category 'initialize-release') -----
initialize
+
+ mouseOverMorphs := Array new.
+ self initializeTrackedMorphs!
- mouseOverMorphs := #().!
Item was changed:
----- Method: PasteUpMorph>>dropFiles: (in category 'event handling') -----
dropFiles: anEvent
"Handle a number of dropped files from the OS.
TODO:
- use a more general mechanism for figuring out what to do with the file (perhaps even offering a choice from a menu)
- remember the resource location or (when in browser) even the actual file handle
"
| numFiles stream handler |
numFiles := anEvent contents.
+ 1 to: numFiles do: [ :i |
+ (stream := FileStream requestDropStream: i) ifNotNil: [
+ handler := ExternalDropHandler lookupExternalDropHandler: stream.
+ [ handler ifNotNil: [handler handle: stream in: self dropEvent: anEvent ] ]
+ ensure: [ stream close ] ] ].!
- 1 to: numFiles do: [:i |
- stream := FileStream requestDropStream: i.
- handler := ExternalDropHandler lookupExternalDropHandler: stream.
- [handler ifNotNil: [handler handle: stream in: self dropEvent: anEvent]]
- ensure: [stream close]].!
Item was changed:
----- Method: MouseOverHandler>>noticeMouseOver:event: (in category 'event handling') -----
noticeMouseOver: aMorph event: anEvent
"Remember that the mouse is currently over some morph"
+
+ leftMorphs remove: aMorph ifAbsent: [
+ enteredMorphs nextPut: aMorph ].
- (leftMorphs includes: aMorph)
- ifTrue:[leftMorphs remove: aMorph]
- ifFalse:[enteredMorphs nextPut: aMorph].
overMorphs nextPut: aMorph.
!
Item was changed:
----- Method: MouseOverHandler>>processMouseOver: (in category 'event handling') -----
processMouseOver: anEvent
"Re-establish the z-order for all morphs wrt the given event"
| hand localEvt focus evt |
hand := anEvent hand.
leftMorphs := mouseOverMorphs asIdentitySet.
"Assume some coherence for the number of objects in over list"
overMorphs := WriteStream on: (Array new: leftMorphs size).
enteredMorphs := WriteStream on: #().
"Now go looking for eventual mouse overs"
hand handleEvent: anEvent asMouseOver.
"Get out early if there's no change"
+ (leftMorphs isEmpty and: [ enteredMorphs position = 0 ])
+ ifTrue: [ ^self initializeTrackedMorphs ].
- (leftMorphs isEmpty and: [enteredMorphs position = 0])
- ifTrue: [^leftMorphs := enteredMorphs := overMorphs := nil].
focus := hand mouseFocus.
"Send #mouseLeave as appropriate"
evt := anEvent asMouseLeave.
"Keep the order of the left morphs by recreating it from the mouseOverMorphs"
leftMorphs size > 1
ifTrue: [leftMorphs := mouseOverMorphs select: [:m | leftMorphs includes: m]].
+ leftMorphs do: [ :m |
+ (m == focus or: [m hasOwner: focus])
+ ifFalse: [ overMorphs nextPut: m ]
+ ifTrue: [
+ localEvt := evt transformedBy: (m transformedFrom: hand).
+ m handleEvent: localEvt ] ].
+ enteredMorphs ifNil: [ "inform: was called in handleEvent:"
+ ^self initializeTrackedMorphs ].
- leftMorphs do:
- [:m |
- (m == focus or: [m hasOwner: focus])
- ifTrue:
- [localEvt := evt transformedBy: (m transformedFrom: hand).
- m handleEvent: localEvt]
- ifFalse: [overMorphs nextPut: m]].
"Send #mouseEnter as appropriate"
evt := anEvent asMouseEnter.
- enteredMorphs ifNil:
- ["inform: was called in handleEvent:"
-
- ^leftMorphs := enteredMorphs := overMorphs := nil].
enteredMorphs := enteredMorphs contents.
+ enteredMorphs reverseDo: [ :m |
+ (m == focus or: [m hasOwner: focus]) ifTrue: [
+ localEvt := evt transformedBy: (m transformedFrom: hand).
+ m handleEvent: localEvt ] ].
- enteredMorphs reverseDo:
- [:m |
- (m == focus or: [m hasOwner: focus])
- ifTrue:
- [localEvt := evt transformedBy: (m transformedFrom: hand).
- m handleEvent: localEvt]].
"And remember the over list"
+ overMorphs ifNotNil: [
+ mouseOverMorphs := overMorphs contents ].
+ self initializeTrackedMorphs!
- overMorphs ifNil:
- ["inform: was called in handleEvent:"
-
- ^leftMorphs := enteredMorphs := overMorphs := nil].
- mouseOverMorphs := overMorphs contents.
- leftMorphs := enteredMorphs := overMorphs := nil!
More information about the Squeak-dev
mailing list
|