[squeak-dev] Dropping a morph gives me a funny menu
H. Hirzel
hannes.hirzel at gmail.com
Wed Mar 29 13:36:31 UTC 2017
To summarize:
FileServices unregisterFileReader: CornerGripMorph
solves the issue.
The use case in detail
ExternalDropHandler>>handleDroppedItem:event:
http://wiki.squeak.org/squeak/4283
See also thread
'ExternalDropHandler chooseServiceFrom:'
--Hannes
On 3/25/17, H. Hirzel <hannes.hirzel at gmail.com> wrote:
> FileServices allInstances size
>
> gives
>
> 0
>
> only class methods.
>
> There is
>
> FileServices initialize.
>
> The #initialize method looks for classes which implement
> #fileReaderServicesForFile:suffix: and asks them to register.
>
>
> The list of classes which implement #fileReaderServicesForFile:suffix:
> is given by
>
>
> (Smalltalk allClasses select: [:aClass|
> (aClass class includesSelector: #fileReaderServicesForFile:suffix:)])
> sorted: [:a :b | a name < b name]
>
>
> It is
>
> {AnimatedImageMorph . ArchiveViewer . BookMorph . ChangeList .
> ChangeSet . DummyToolWorkingWithFileList . EventRecorderMorph .
> FileContentsBrowser . FileDirectory . FilePackage . FileStream . Form
> . GZipReadStream . GZipWriteStream . InternalTranslator .
> MCVersionReader . MczInstaller . Morph . NaturalLanguageTranslator .
> Object . Preferences . ProjectViewMorph . SARInstaller . ScorePlayer .
> ScorePlayerMorph . TTCFont . TTFontReader}
>
> in Squeak 5.1.
> The CornerGripMorph is _not_ in this list.
>
>
> So
>
> FileService initialize
>
>
> should do the job.
>
> It has as code
>
> initialize
> "FileServices initialize"
>
> Smalltalk allClassesDo:[:aClass|
> (aClass class includesSelector: #fileReaderServicesForFile:suffix:)
> ifTrue:[self registerFileReader: aClass]].
>
>
> It does not do it. The double entry of 'Load as morph' still appears.
>
> What #initialize needs to do it to reset the FileReaderRegistry class
> variable
>
> FileReaderRegistry := nil.
>
>
> So the updated #initialize method should look like
>
>
> initialize
> "FileServices initialize"
>
> FileReaderRegistry := nil.
>
> Smalltalk allClassesDo:[:aClass|
> (aClass class includesSelector: #fileReaderServicesForFile:suffix:)
> ifTrue:[self registerFileReader: aClass]].
>
>
> Then after
>
> FileServices initialize
>
> the CornerGripMorph is no longer included.
>
>
> Note: In spite of this generic direct initialisation mechanism 10
> #initialize methods on the class side directly reference FileServices.
> And MczInstaller has #registerForFileList which references
> FileServices.
>
> So we would need to check if with this change
>
> FileReaderRegistry := nil.
>
>
> we still get enough registrations. That is to check each class which
> references FileServices.
>
> On 3/25/17, Edgar De Cleene <edgardec2005 at gmail.com> wrote:
>> You are right.
>> FileServices unregisterFileReader: CornerGripMorph solves the issue and
>> can’t see any use of having a CornerGripMorph outside of the .image
>>
>>> On Mar 25, 2017, at 08:31, Tobias Pape <Das.Linux at gmx.de> wrote:
>>>
>>> CornerGripMorph
>>
>>
>
More information about the Squeak-dev
mailing list
|