diff -r 5996b2afa4fb -r cbf495fe3b64 Workspace.st --- a/Workspace.st Tue Feb 28 22:52:21 1995 +0100 +++ b/Workspace.st Mon Mar 06 20:29:54 1995 +0100 @@ -23,7 +23,7 @@ COPYRIGHT (c) 1989 by Claus Gittinger All Rights Reserved -$Header: /cvs/stx/stx/libwidg/Workspace.st,v 1.16 1995-02-27 10:41:52 claus Exp $ +$Header: /cvs/stx/stx/libwidg/Workspace.st,v 1.17 1995-03-06 19:29:50 claus Exp $ '! !Workspace class methodsFor:'documentation'! @@ -44,7 +44,7 @@ version " -$Header: /cvs/stx/stx/libwidg/Workspace.st,v 1.16 1995-02-27 10:41:52 claus Exp $ +$Header: /cvs/stx/stx/libwidg/Workspace.st,v 1.17 1995-03-06 19:29:50 claus Exp $ " ! @@ -134,30 +134,31 @@ ]. ! -initializeMiddleButtonMenu - |idx| +editMenu + |m idx| - super initializeMiddleButtonMenu. + m := super editMenu. " workspaces support #doIt, #printIt and #inspectIt add them after paste. " - idx := middleButtonMenu indexOf:#paste. - middleButtonMenu addLabel:'-' - selector:nil - after:idx. - middleButtonMenu addLabel:(resources string:'doIt') - selector:#doIt - after:idx + 1. - middleButtonMenu addLabel:(resources string:'printIt') - selector:#printIt - after:idx + 2. - middleButtonMenu addLabel:(resources string:'inspectIt') - selector:#inspectIt - after:idx + 3. + idx := m indexOf:#paste. + m addLabel:'-' selector:nil after:idx. + m addLabel:(resources string:'doIt') selector:#doIt after:idx + 1. + m addLabel:(resources string:'printIt') selector:#printIt after:idx + 2. + m addLabel:(resources string:'inspectIt') selector:#inspectIt after:idx + 3. - self enableOrDisableSelectionMenuEntries + self hasSelection ifFalse:[ + m disable:#doIt. + m disable:#printIt. + m disable:#inspectIt. + ]. + readOnly ifTrue:[ + m disable:#printIt. + ]. + + ^ m. ! initializeDoITAction @@ -176,37 +177,6 @@ ]. ! ! -!Workspace methodsFor:'selections'! - -disableSelectionMenuEntries - "disable relevant menu entries for a selection" - - super disableSelectionMenuEntries. - middleButtonMenu notNil ifTrue:[ - middleButtonMenu disable:#doIt. - middleButtonMenu disable:#printIt. - middleButtonMenu disable:#inspectIt - ] -! - -enableSelectionMenuEntries - "enable relevant menu entries for a selection" - - super enableSelectionMenuEntries. - middleButtonMenu notNil ifTrue:[ - middleButtonMenu enable:#doIt. - " - printit not allowed if readonly, since it pastes its result - " - readOnly ifTrue:[ - middleButtonMenu disable:#printIt. - ] ifFalse:[ - middleButtonMenu enable:#printIt. - ]. - middleButtonMenu enable:#inspectIt - ] -! ! - !Workspace methodsFor:'accessing'! doItAction:aBlock @@ -365,6 +335,9 @@ cCol := cursorCol. cLine := cursorLine. + " + cleanup: restore previous selection and cursor positions + " cleanUp := [ self selectFromLine:selLine col:selCol toLine:endLine col:endCol. cLine notNil ifTrue:[ @@ -372,14 +345,24 @@ ]. ]. + " + perform the action. + Be careful to release the reference to the value; + otherwise, we could keep lots of garbage from being freed + until the view gets closed + " self topView withCursor:Cursor execute do:[ - Object abortSignal catch:[ - [ + [ + AbortSignal handle:[:ex | + ex return + ] do:[ value := doItAction value:code asString. - cleanUp value. + cleanUp value. cleanUp := nil. aBlock value:value. - value := nil. - ] valueOnUnwindDo:cleanUp + ] + ] valueNowOrOnUnwindDo:[ + cleanUp notNil ifTrue:[cleanUp value. cleanUp := nil]. + value := nil ] ]. ]