Chris, all,
Here's a fix that chris pointed out to me. (Thanks Chris!). Everyone doesn't have print defined on object (which is a great little method - thanks to whoever posted that!), and there were a few situations where UndefinedObject was sent a message oooppps!.
How's this? (I'm embarassed to have left the 'blah2' print. in there)
My FileList works. Are you opening your FileList with a special size? If so, how can I do that!?!
I fixed the boom!
cheers, Rob
"Norton, Chris" wrote:
Hi Robert.
Thanks for the goodie. I ran it on a fairly clean 2.7 and ran into a problem filing it in (fix is attached). I also noticed that the File List dialog wasn't rising, so I added your enhancement to SystemWindow>>openInWorldExtent:.
BTW: I found another bug, but I'm too tired tonight to look into it. Here are the steps to reproduce it:
- Using the morphic File List, load your change set into a clean image
(you will need to fix the file in problem before you do this). 2. Load in my change set (this will add support for the File List dialog). 3. Use the global flap tab (left side of your world) to launch the preferences dialog. 4. Click on the 'auto raise windows' 'false' (it will turn to 'true') 5. Float your mouse over the File List dialog.
Ka-boom... The WindowRaiser class>>installOnMorph: method will fail. The problem seems to be returning self from inside a removeKey:ifAbsent:[] block. Apparently, you can't do this. I tried removing the code that returns self, but, of course, this causes a walk back too (nil doesn't understand 'stop').
Thanks again!
---==> Chris
<<WindowRaiserFixes.cs>>
Name: WindowRaiserFixes.cs
WindowRaiserFixes.cs Type: unspecified type (application/octet-stream) Encoding: quoted-printable
Robert Withers wrote:
Chris, all,
Here's a fix that chris pointed out to me. (Thanks Chris!). Everyone doesn't have print defined on object (which is a great little method - thanks to whoever posted that!), and there were a few situations where UndefinedObject was sent a message oooppps!.
How's this? (I'm embarassed to have left the 'blah2' print. in there)
My FileList works. Are you opening your FileList with a special size? If so, how can I do that!?!
I fixed the boom!
cheers, Rob
"Norton, Chris" wrote:
Hi Robert.
Thanks for the goodie. I ran it on a fairly clean 2.7 and ran into a problem filing it in (fix is attached). I also noticed that the File List dialog wasn't rising, so I added your enhancement to SystemWindow>>openInWorldExtent:.
BTW: I found another bug, but I'm too tired tonight to look into it. Here are the steps to reproduce it:
- Using the morphic File List, load your change set into a clean image
(you will need to fix the file in problem before you do this). 2. Load in my change set (this will add support for the File List dialog). 3. Use the global flap tab (left side of your world) to launch the preferences dialog. 4. Click on the 'auto raise windows' 'false' (it will turn to 'true') 5. Float your mouse over the File List dialog.
Ka-boom... The WindowRaiser class>>installOnMorph: method will fail. The problem seems to be returning self from inside a removeKey:ifAbsent:[] block. Apparently, you can't do this. I tried removing the code that returns self, but, of course, this causes a walk back too (nil doesn't understand 'stop').
Thanks again!
---==> Chris
<<WindowRaiserFixes.cs>>
Name: WindowRaiserFixes.cs
WindowRaiserFixes.cs Type: unspecified type (application/octet-stream) Encoding: quoted-printable
--
Smalltalking by choice. Isn't it nice to have one!
Name: WindowRaiserTool.5.cs
WindowRaiserTool.5.cs Type: Plain Text (text/plain) Encoding: 7bit
Reposting for the sqfixes page
Robert Withers wrote:
Chris, all,
Here's a fix that chris pointed out to me. (Thanks Chris!). Everyone doesn't have print defined on object (which is a great little method - thanks to whoever posted that!), and there were a few situations where UndefinedObject was sent a message oooppps!.
How's this? (I'm embarassed to have left the 'blah2' print. in there)
My FileList works. Are you opening your FileList with a special size? If so, how can I do that!?!
I fixed the boom!
cheers, Rob
'From Squeak2.7 of 5 January 2000 [latest update: #1762] on 31 January 2000 at 1:37:20 am'! "Change Set: WindowRaiserTool Date: 30 January 2000 Author: Robert Withers
Beta: Ok folks. We are into the Preferences now. On load the WindowRaiser installs a preference which defaults to disabled. You have to enable it in help...preferences... Special thanks goes to Stan Heckman, and Torge Husfeldt.
Special Warning: This changeset modifies Morph>>#openInWorld: aWorld, which is a core Morphic method. It also modifies Preferences class>>noteThatFlag:justChangedTo:"!
Object subclass: #WindowRaiser instanceVariableNames: 'view isRaising ' classVariableNames: 'EventRegister ' poolDictionaries: '' category: 'Morphic-Support'!
!Morph methodsFor: 'event handling' stamp: 'rww 1/30/2000 02:14'! autoRiseOnMouseEntry WindowRaiser installOnMorph: self. ! !
!Morph methodsFor: 'event handling' stamp: 'rww 1/30/2000 02:18'! cancelAutoRiseOnMouseEntry WindowRaiser deinstallOnMorph: self. ! !
!Preferences class methodsFor: 'preferences dictionary' stamp: 'ccn 1/30/2000 22:08'! noteThatFlag: prefSymbol justChangedTo: aBoolean "Provides a hook so that a user's toggling of a preference might precipitate some immediate action" | keep | prefSymbol == #useGlobalFlaps ifTrue: [aBoolean ifFalse: "Turning off use of flaps" [keep _ self confirm: 'Do you want to preserve the existing global flaps for future use?'. Utilities globalFlapTabsIfAny do: [:aFlapTab | Utilities removeFlapTab: aFlapTab keepInList: keep. aFlapTab isInWorld ifTrue: [self error: 'Flap problem']]. keep ifFalse: [Utilities clobberFlapTabList]]
ifTrue: "Turning on use of flaps" [Smalltalk isMorphic ifTrue: [self currentWorld addGlobalFlaps]]].
prefSymbol == #roundedWindowCorners ifTrue: [World ifNotNil: [World fullRepaintNeeded]].
prefSymbol == #optionalButtons ifTrue: [Utilities replacePartSatisfying: [:el | (el isKindOf: MorphThumbnail) and: [(el morphRepresented isKindOf: SystemWindow) and: [el morphRepresented model isKindOf: FileList]]] inGlobalFlapSatisfying: [:f1 | f1 wording = 'Tools'] with: FileList openAsMorph applyModelExtent].
(prefSymbol == #optionalButtons or: [prefSymbol == #useAnnotationPanes]) ifTrue: [Utilities replaceBrowserInToolsFlap].
(prefSymbol == #smartUpdating) ifTrue: [SystemWindow allSubInstancesDo: [:aWindow | aWindow amendSteppingStatus]].
(prefSymbol == #autoRaiseWindows) ifTrue: [aBoolean ifTrue: [WindowRaiser startAutoRise] ifFalse: [WindowRaiser stopAutoRise]]! !
!SystemWindow methodsFor: 'open/close' stamp: 'rww 1/30/2000 02:29'! openInWorld: aWorld "This msg and its callees result in the window being activeOnlyOnTop" self autoRiseOnMouseEntry. self bounds: (RealEstateAgent initialFrameFor: self). aWorld addMorph: self. self activate. aWorld startSteppingSubmorphsOf: self! !
!SystemWindow methodsFor: 'open/close' stamp: 'ccn 1/30/2000 22:10'! openInWorldExtent: extent "This msg and its callees result in the window being activeOnlyOnTop"
Smalltalk isMorphic ifFalse: [^self openInMVCExtent: extent]. self autoRiseOnMouseEntry. self position: (RealEstateAgent initialFrameFor: self) topLeft; extent: extent. World addMorph: self. self activate. World startSteppingSubmorphsOf: self.! !
!WindowRaiser commentStamp: '<historical>' prior: 0! To turn on window raising: WindowRaiser startAutoRise.
To turn window raising off again: WindowRaiser stopAutoRise.!
!WindowRaiser methodsFor: 'accessing' stamp: 'rww 1/30/2000 02:41'! isRaising "Answer the receiver's instance variable isRaising."
^isRaising! !
!WindowRaiser methodsFor: 'accessing' stamp: 'rww 1/30/2000 02:41'! isRaising: aBoolean "Set the receiver's instance variable isRaising to aBoolean."
isRaising := aBoolean! !
!WindowRaiser methodsFor: 'accessing' stamp: 'rww 1/28/2000 01:33'! view "Answer the receiver's instance variable view."
^view! !
!WindowRaiser methodsFor: 'accessing' stamp: 'rww 1/28/2000 01:33'! view: anObject "Set the receiver's instance variable view to anObject."
view := anObject! !
!WindowRaiser methodsFor: 'action' stamp: 'rww 1/30/2000 02:39'! raiseInMilliseconds: millisecondTime
self isRaising: true. [(Delay forMilliseconds: millisecondTime) wait. self isRaising ifTrue: [self raiseView]] fork.! !
!WindowRaiser methodsFor: 'action' stamp: 'rww 1/31/2000 01:35'! raiseView
self view ifNotNil: [self view activate]. ! !
!WindowRaiser methodsFor: 'action' stamp: 'rww 1/30/2000 02:39'! stop
self isRaising: false.! !
!WindowRaiser methodsFor: 'initialize' stamp: 'rww 1/30/2000 02:40'! initializeOn: aView
self view: aView. self isRaising: false.! !
!WindowRaiser class methodsFor: 'as yet unclassified' stamp: 'rww 1/30/2000 02:24'! deinstallOnMorph: aMorph |raiser| raiser := self eventRegister removeKey: aMorph ifAbsent: [nil]. raiser ifNotNil: [raiser stop].
aMorph on: #mouseEnter send: nil to: nil. aMorph on: #mouseLeave send: nil to: nil.
! !
!WindowRaiser class methodsFor: 'as yet unclassified' stamp: 'rww 1/30/2000 02:10'! eventRegister ^EventRegister. ! !
!WindowRaiser class methodsFor: 'as yet unclassified' stamp: 'rww 1/30/2000 10:48'! initialize EventRegister := Dictionary new. Preferences disable: #autoRaiseWindows.! !
!WindowRaiser class methodsFor: 'as yet unclassified' stamp: 'rww 1/31/2000 01:34'! installOnMorph: aMorph (Preferences autoRaiseWindows) ifTrue: [ aMorph on: #mouseEnter send: #value to: [self eventRegister at: aMorph put: ((WindowRaiser newOn: aMorph) raiseInMilliseconds: 400)]. aMorph on: #mouseLeave send: #value to: [|raiser| raiser _ self eventRegister removeKey: aMorph ifAbsent: [nil]. raiser ifNotNil: [raiser stop]]].! !
!WindowRaiser class methodsFor: 'as yet unclassified' stamp: 'rww 1/28/2000 01:32'! newOn: aView
^super new initializeOn: aView ! !
!WindowRaiser class methodsFor: 'as yet unclassified' stamp: 'rww 1/30/2000 10:44'! startAutoRise SystemWindow allSubInstancesDo: [:aWindow | aWindow autoRiseOnMouseEntry]. ! !
!WindowRaiser class methodsFor: 'as yet unclassified' stamp: 'rww 1/30/2000 10:44'! stopAutoRise SystemWindow allSubInstancesDo: [:aWindow | aWindow cancelAutoRiseOnMouseEntry]. ! !
WindowRaiser initialize!
squeak-dev@lists.squeakfoundation.org