EventSensor class(Object)>>doesNotUnderstand: #swapMouseButtonsChanged
Receiver: EventSensor Arguments and temporary variables: aMessage: swapMouseButtonsChanged exception: MessageNotUnderstood: EventSensor class>>swapMouseButtonsChanged resumeValue: nil Receiver's instance variables: superclass: Object methodDict: a MethodDictionary(#anyButtonPressed->(EventSensor>>#anyButtonPress...etc... format: 65545 instanceVariables: #('mouseButtons' 'mousePosition' 'keyboardBuffer' 'interrupt...etc... organization: ('accessing' eventQueue eventQueue: eventTicklerProcess flushAllB...etc... subclasses: nil name: #EventSensor classPool: a Dictionary(#ButtonDecodeTable->#[0 2 1 3 4 6 5 7 8 10 9 11 12 14 1...etc... sharedPools: an OrderedCollection(EventSensorConstants) environment: Smalltalk category: #'Kernel-Processes' Preference>>notifyInformeeOfChange Receiver: a Preference#swapMouseButtons false Arguments and temporary variables: Receiver's instance variables: name: #swapMouseButtons value: false defaultValue: false helpString: 'if true, swaps mouse buttons 2 and 3' localToProject: false categoryList: #(#general) changeInformee: EventSensor changeSelector: #swapMouseButtonsChanged type: #Boolean Preference>>togglePreferenceValue Receiver: a Preference#swapMouseButtons false Arguments and temporary variables: Receiver's instance variables: name: #swapMouseButtons value: false defaultValue: false helpString: 'if true, swaps mouse buttons 2 and 3' localToProject: false categoryList: #(#general) changeInformee: EventSensor changeSelector: #swapMouseButtonsChanged type: #Boolean [] in UpdatingThreePhaseButtonMorph(ThreePhaseButtonMorph)>>doButtonAction: Receiver: 3PButton(#togglePreferenceValue 2512237) Arguments and temporary variables: evt: [367@82 mouseUp 99776] moreArgs: #() Receiver's instance variables: bounds: 358@75 corner: 372@87 owner: a BorderedMorph(1400912) submorphs: #() fullBounds: 358@75 corner: 372@87 color: Color blue extension: nil image: ColorForm(12x12x1) offImage: ColorForm(12x12x1) pressedImage: ColorForm(12x12x1) state: #off target: a Preference#swapMouseButtons false actionSelector: #togglePreferenceValue arguments: #() actWhen: #buttonUp getSelector: #preferenceValue getArgument: nil BlockClosure>>ensure: Receiver: [closure] in UpdatingThreePhaseButtonMorph(ThreePhaseButtonMorph)>>doButtonAction: Arguments and temporary variables: aBlock: [closure] in CursorWithMask(Cursor)>>showWhile: complete: nil returnValue: nil Receiver's instance variables: outerContext: UpdatingThreePhaseButtonMorph(ThreePhaseButtonMorph)>>doButtonAct...etc... startpc: 62 numArgs: 0 CursorWithMask(Cursor)>>showWhile: Receiver: ((CursorWithMask extent: 16@16 depth: 1 fromArray: #( 2r0 2r10000000000000000000000...etc... Arguments and temporary variables: aBlock: [closure] in UpdatingThreePhaseButtonMorph(ThreePhaseButtonMorph)>>doBu...etc... oldcursor: ((CursorWithMask extent: 16@16 depth: 1 fromArray: #( 2r0 2r1...etc... Receiver's instance variables: bits: a Bitmap of length 16 width: 16 height: 16 depth: 1 offset: -1@ -1 maskForm: Form(16x16x1) UpdatingThreePhaseButtonMorph(ThreePhaseButtonMorph)>>doButtonAction: Receiver: 3PButton(#togglePreferenceValue 2512237) Arguments and temporary variables: evt: [367@82 mouseUp 99776] Receiver's instance variables: bounds: 358@75 corner: 372@87 owner: a BorderedMorph(1400912) submorphs: #() fullBounds: 358@75 corner: 372@87 color: Color blue extension: nil image: ColorForm(12x12x1) offImage: ColorForm(12x12x1) pressedImage: ColorForm(12x12x1) state: #off target: a Preference#swapMouseButtons false actionSelector: #togglePreferenceValue arguments: #() actWhen: #buttonUp getSelector: #preferenceValue getArgument: nil UpdatingThreePhaseButtonMorph(ThreePhaseButtonMorph)>>mouseUp: Receiver: 3PButton(#togglePreferenceValue 2512237) Arguments and temporary variables: evt: [367@82 mouseUp 99776] Receiver's instance variables: bounds: 358@75 corner: 372@87 owner: a BorderedMorph(1400912) submorphs: #() fullBounds: 358@75 corner: 372@87 color: Color blue extension: nil image: ColorForm(12x12x1) offImage: ColorForm(12x12x1) pressedImage: ColorForm(12x12x1) state: #off target: a Preference#swapMouseButtons false actionSelector: #togglePreferenceValue arguments: #() actWhen: #buttonUp getSelector: #preferenceValue getArgument: nil UpdatingThreePhaseButtonMorph>>mouseUp: Receiver: 3PButton(#togglePreferenceValue 2512237) Arguments and temporary variables: evt: [367@82 mouseUp 99776] Receiver's instance variables: bounds: 358@75 corner: 372@87 owner: a BorderedMorph(1400912) submorphs: #() fullBounds: 358@75 corner: 372@87 color: Color blue extension: nil image: ColorForm(12x12x1) offImage: ColorForm(12x12x1) pressedImage: ColorForm(12x12x1) state: #off target: a Preference#swapMouseButtons false actionSelector: #togglePreferenceValue arguments: #() actWhen: #buttonUp getSelector: #preferenceValue getArgument: nil UpdatingThreePhaseButtonMorph(Morph)>>handleMouseUp: Receiver: 3PButton(#togglePreferenceValue 2512237) Arguments and temporary variables: anEvent: [367@82 mouseUp 99776] Receiver's instance variables: bounds: 358@75 corner: 372@87 owner: a BorderedMorph(1400912) submorphs: #() fullBounds: 358@75 corner: 372@87 color: Color blue extension: nil image: ColorForm(12x12x1) offImage: ColorForm(12x12x1) pressedImage: ColorForm(12x12x1) state: #off target: a Preference#swapMouseButtons false actionSelector: #togglePreferenceValue arguments: #() actWhen: #buttonUp getSelector: #preferenceValue getArgument: nil MouseButtonEvent>>sentTo: Receiver: [367@82 mouseUp 99776] Arguments and temporary variables: anObject: 3PButton(#togglePreferenceValue 2512237) Receiver's instance variables: timeStamp: 99776 source: a HandMorph(3089952) type: #mouseUp buttons: 0 position: 367@82 handler: nil wasHandled: true whichButton: 4 UpdatingThreePhaseButtonMorph(Morph)>>handleEvent: Receiver: 3PButton(#togglePreferenceValue 2512237) Arguments and temporary variables: anEvent: [367@82 mouseUp 99776] Receiver's instance variables: bounds: 358@75 corner: 372@87 owner: a BorderedMorph(1400912) submorphs: #() fullBounds: 358@75 corner: 372@87 color: Color blue extension: nil image: ColorForm(12x12x1) offImage: ColorForm(12x12x1) pressedImage: ColorForm(12x12x1) state: #off target: a Preference#swapMouseButtons false actionSelector: #togglePreferenceValue arguments: #() actWhen: #buttonUp getSelector: #preferenceValue getArgument: nil UpdatingThreePhaseButtonMorph(Morph)>>handleFocusEvent: Receiver: 3PButton(#togglePreferenceValue 2512237) Arguments and temporary variables: anEvent: [367@82 mouseUp 99776] Receiver's instance variables: bounds: 358@75 corner: 372@87 owner: a BorderedMorph(1400912) submorphs: #() fullBounds: 358@75 corner: 372@87 color: Color blue extension: nil image: ColorForm(12x12x1) offImage: ColorForm(12x12x1) pressedImage: ColorForm(12x12x1) state: #off target: a Preference#swapMouseButtons false actionSelector: #togglePreferenceValue arguments: #() actWhen: #buttonUp getSelector: #preferenceValue getArgument: nil [] in HandMorph>>sendFocusEvent:to:clear: Receiver: a HandMorph(3089952) Arguments and temporary variables: <<error during printing> Receiver's instance variables: bounds: 263@150 corner: 279@166 owner: a PasteUpMorph(2434915) [world] submorphs: #() fullBounds: 263@150 corner: 279@166 color: Color blue extension: a MorphExtension (2063753) [eventHandler = an EventHandler] mouseFocus: nil keyboardFocus: a TextMorphForEditView(3602329) eventListeners: nil mouseListeners: nil keyboardListeners: a WeakArray(a DockingBarMorph(968081) a PluggableSystemWindo...etc... mouseClickState: nil mouseOverHandler: a MouseOverHandler lastMouseEvent: [262@150 263@150 mouseMove 174509] targetOffset: 158@90 damageRecorder: a DamageRecorder cacheCanvas: nil cachedCanvasHasHoles: false temporaryCursor: nil temporaryCursorOffset: nil hardwareCursor: nil hasChanged: true savedPatch: nil userInitials: '' lastEventBuffer: #(1 174509 263 150 0 0 0 1) genieGestureProcessor: nil keyboardInterpreter: an UTF32InputInterpreter BlockClosure>>on:do: Receiver: [closure] in HandMorph>>sendFocusEvent:to:clear: Arguments and temporary variables: exception: Error handlerAction: [closure] in PasteUpMorph>>becomeActiveDuring: handlerActive: false Receiver's instance variables: outerContext: HandMorph>>sendFocusEvent:to:clear: startpc: 67 numArgs: 0 PasteUpMorph>>becomeActiveDuring: Receiver: a PasteUpMorph(2434915) [world] Arguments and temporary variables: aBlock: [closure] in HandMorph>>sendFocusEvent:to:clear: priorWorld: a PasteUpMorph(2434915) [world] priorHand: a HandMorph(3089952) priorEvent: [637@211 mouseOver red nil] Receiver's instance variables: bounds: 0@0 corner: 801@600 owner: nil submorphs: {a PluggableSystemWindow<MessageNotUnderstood: EventSensor class>>sw...etc... fullBounds: 0@0 corner: 801@600 color: Color darkGray extension: a MorphExtension (3317156) [eventHandler = an EventHandler] [other:...etc... borderWidth: 0 borderColor: (Color r: 0.515 g: 0.181 b: 0.263) presenter: an EtoysPresenter (764729) model: a MorphicModel(1457048) cursor: 1 padding: 3 backgroundMorph: nil turtleTrailsForm: nil turtlePen: nil lastTurtlePositions: nil isPartsBin: nil indicateCursor: nil wantsMouseOverHalos: nil worldState: a WorldState griddingOn: nil HandMorph>>sendFocusEvent:to:clear: Receiver: a HandMorph(3089952) Arguments and temporary variables: anEvent: [637@211 mouseUp 99776] focusHolder: 3PButton(#togglePreferenceValue 2512237) aBlock: [closure] in HandMorph>>sendMouseEvent: w: a PasteUpMorph(2434915) [world] result: #(nil) Receiver's instance variables: bounds: 263@150 corner: 279@166 owner: a PasteUpMorph(2434915) [world] submorphs: #() fullBounds: 263@150 corner: 279@166 color: Color blue extension: a MorphExtension (2063753) [eventHandler = an EventHandler] mouseFocus: nil keyboardFocus: a TextMorphForEditView(3602329) eventListeners: nil mouseListeners: nil keyboardListeners: a WeakArray(a DockingBarMorph(968081) a PluggableSystemWindo...etc... mouseClickState: nil mouseOverHandler: a MouseOverHandler lastMouseEvent: [262@150 263@150 mouseMove 174509] targetOffset: 158@90 damageRecorder: a DamageRecorder cacheCanvas: nil cachedCanvasHasHoles: false temporaryCursor: nil temporaryCursorOffset: nil hardwareCursor: nil hasChanged: true savedPatch: nil userInitials: '' lastEventBuffer: #(1 174509 263 150 0 0 0 1) genieGestureProcessor: nil keyboardInterpreter: an UTF32InputInterpreter HandMorph>>sendEvent:focus:clear: Receiver: a HandMorph(3089952) Arguments and temporary variables: anEvent: [637@211 mouseUp 99776] focusHolder: 3PButton(#togglePreferenceValue 2512237) aBlock: [closure] in HandMorph>>sendMouseEvent: result: nil Receiver's instance variables: bounds: 263@150 corner: 279@166 owner: a PasteUpMorph(2434915) [world] submorphs: #() fullBounds: 263@150 corner: 279@166 color: Color blue extension: a MorphExtension (2063753) [eventHandler = an EventHandler] mouseFocus: nil keyboardFocus: a TextMorphForEditView(3602329) eventListeners: nil mouseListeners: nil keyboardListeners: a WeakArray(a DockingBarMorph(968081) a PluggableSystemWindo...etc... mouseClickState: nil mouseOverHandler: a MouseOverHandler lastMouseEvent: [262@150 263@150 mouseMove 174509] targetOffset: 158@90 damageRecorder: a DamageRecorder cacheCanvas: nil cachedCanvasHasHoles: false temporaryCursor: nil temporaryCursorOffset: nil hardwareCursor: nil hasChanged: true savedPatch: nil userInitials: '' lastEventBuffer: #(1 174509 263 150 0 0 0 1) genieGestureProcessor: nil keyboardInterpreter: an UTF32InputInterpreter HandMorph>>sendMouseEvent: Receiver: a HandMorph(3089952) Arguments and temporary variables: anEvent: [637@211 mouseUp 99776] Receiver's instance variables: bounds: 263@150 corner: 279@166 owner: a PasteUpMorph(2434915) [world] submorphs: #() fullBounds: 263@150 corner: 279@166 color: Color blue extension: a MorphExtension (2063753) [eventHandler = an EventHandler] mouseFocus: nil keyboardFocus: a TextMorphForEditView(3602329) eventListeners: nil mouseListeners: nil keyboardListeners: a WeakArray(a DockingBarMorph(968081) a PluggableSystemWindo...etc... mouseClickState: nil mouseOverHandler: a MouseOverHandler lastMouseEvent: [262@150 263@150 mouseMove 174509] targetOffset: 158@90 damageRecorder: a DamageRecorder cacheCanvas: nil cachedCanvasHasHoles: false temporaryCursor: nil temporaryCursorOffset: nil hardwareCursor: nil hasChanged: true savedPatch: nil userInitials: '' lastEventBuffer: #(1 174509 263 150 0 0 0 1) genieGestureProcessor: nil keyboardInterpreter: an UTF32InputInterpreter --- The full stack --- EventSensor class(Object)>>doesNotUnderstand: #swapMouseButtonsChanged Preference>>notifyInformeeOfChange Preference>>togglePreferenceValue [] in UpdatingThreePhaseButtonMorph(ThreePhaseButtonMorph)>>doButtonAction: BlockClosure>>ensure: CursorWithMask(Cursor)>>showWhile: UpdatingThreePhaseButtonMorph(ThreePhaseButtonMorph)>>doButtonAction: UpdatingThreePhaseButtonMorph(ThreePhaseButtonMorph)>>mouseUp: UpdatingThreePhaseButtonMorph>>mouseUp: UpdatingThreePhaseButtonMorph(Morph)>>handleMouseUp: MouseButtonEvent>>sentTo: UpdatingThreePhaseButtonMorph(Morph)>>handleEvent: UpdatingThreePhaseButtonMorph(Morph)>>handleFocusEvent: [] in HandMorph>>sendFocusEvent:to:clear: BlockClosure>>on:do: PasteUpMorph>>becomeActiveDuring: HandMorph>>sendFocusEvent:to:clear: HandMorph>>sendEvent:focus:clear: HandMorph>>sendMouseEvent: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - HandMorph>>handleEvent: HandMorph>>processEvents [] in WorldState>>doOneCycleNowFor: Array(SequenceableCollection)>>do: WorldState>>handsDo: WorldState>>doOneCycleNowFor: WorldState>>doOneCycleFor: PasteUpMorph>>doOneCycle [] in MorphicProject>>spawnNewProcess [] in BlockClosure>>newProcess |
It looks like the preference has changed. For the #swapMouseButtons preference,
the changeSelector was #installMouseDecodeTable, but now the selector is #swapMouseButtonsChanged. If I inspect the preference and change its changeSelector back to the original #installMouseDecodeTable, the preference works again. I cannot find where the preference gets initialized, and I do not know why it changed, but this does seem to be the cause of the problem. Dave On Tue, Mar 01, 2016 at 04:45:44PM -0600, Chris Muller wrote: > EventSensor class(Object)>>doesNotUnderstand: #swapMouseButtonsChanged > Receiver: EventSensor > Arguments and temporary variables: > aMessage: swapMouseButtonsChanged > exception: MessageNotUnderstood: EventSensor class>>swapMouseButtonsChanged > resumeValue: nil > Receiver's instance variables: > superclass: Object > methodDict: a MethodDictionary(#anyButtonPressed->(EventSensor>>#anyButtonPress...etc... > format: 65545 > instanceVariables: #('mouseButtons' 'mousePosition' 'keyboardBuffer' > 'interrupt...etc... > organization: ('accessing' eventQueue eventQueue: eventTicklerProcess > flushAllB...etc... > subclasses: nil > name: #EventSensor > classPool: a Dictionary(#ButtonDecodeTable->#[0 2 1 3 4 6 5 7 8 10 9 > 11 12 14 1...etc... > sharedPools: an OrderedCollection(EventSensorConstants) > environment: Smalltalk > category: #'Kernel-Processes' > > Preference>>notifyInformeeOfChange > Receiver: a Preference#swapMouseButtons false > Arguments and temporary variables: > > Receiver's instance variables: > name: #swapMouseButtons > value: false > defaultValue: false > helpString: 'if true, swaps mouse buttons 2 and 3' > localToProject: false > categoryList: #(#general) > changeInformee: EventSensor > changeSelector: #swapMouseButtonsChanged > type: #Boolean > > Preference>>togglePreferenceValue > Receiver: a Preference#swapMouseButtons false > Arguments and temporary variables: > > Receiver's instance variables: > name: #swapMouseButtons > value: false > defaultValue: false > helpString: 'if true, swaps mouse buttons 2 and 3' > localToProject: false > categoryList: #(#general) > changeInformee: EventSensor > changeSelector: #swapMouseButtonsChanged > type: #Boolean > > [] in UpdatingThreePhaseButtonMorph(ThreePhaseButtonMorph)>>doButtonAction: > Receiver: 3PButton(#togglePreferenceValue 2512237) > Arguments and temporary variables: > evt: [367@82 mouseUp 99776] > moreArgs: #() > Receiver's instance variables: > bounds: 358@75 corner: 372@87 > owner: a BorderedMorph(1400912) > submorphs: #() > fullBounds: 358@75 corner: 372@87 > color: Color blue > extension: nil > image: ColorForm(12x12x1) > offImage: ColorForm(12x12x1) > pressedImage: ColorForm(12x12x1) > state: #off > target: a Preference#swapMouseButtons false > actionSelector: #togglePreferenceValue > arguments: #() > actWhen: #buttonUp > getSelector: #preferenceValue > getArgument: nil > > BlockClosure>>ensure: > Receiver: [closure] in > UpdatingThreePhaseButtonMorph(ThreePhaseButtonMorph)>>doButtonAction: > Arguments and temporary variables: > aBlock: [closure] in CursorWithMask(Cursor)>>showWhile: > complete: nil > returnValue: nil > Receiver's instance variables: > outerContext: UpdatingThreePhaseButtonMorph(ThreePhaseButtonMorph)>>doButtonAct...etc... > startpc: 62 > numArgs: 0 > > CursorWithMask(Cursor)>>showWhile: > Receiver: ((CursorWithMask > extent: 16@16 > depth: 1 > fromArray: #( > 2r0 > 2r10000000000000000000000...etc... > Arguments and temporary variables: > aBlock: [closure] in > UpdatingThreePhaseButtonMorph(ThreePhaseButtonMorph)>>doBu...etc... > oldcursor: ((CursorWithMask > extent: 16@16 > depth: 1 > fromArray: #( > 2r0 > 2r1...etc... > Receiver's instance variables: > bits: a Bitmap of length 16 > width: 16 > height: 16 > depth: 1 > offset: -1@ -1 > maskForm: Form(16x16x1) > > UpdatingThreePhaseButtonMorph(ThreePhaseButtonMorph)>>doButtonAction: > Receiver: 3PButton(#togglePreferenceValue 2512237) > Arguments and temporary variables: > evt: [367@82 mouseUp 99776] > Receiver's instance variables: > bounds: 358@75 corner: 372@87 > owner: a BorderedMorph(1400912) > submorphs: #() > fullBounds: 358@75 corner: 372@87 > color: Color blue > extension: nil > image: ColorForm(12x12x1) > offImage: ColorForm(12x12x1) > pressedImage: ColorForm(12x12x1) > state: #off > target: a Preference#swapMouseButtons false > actionSelector: #togglePreferenceValue > arguments: #() > actWhen: #buttonUp > getSelector: #preferenceValue > getArgument: nil > > UpdatingThreePhaseButtonMorph(ThreePhaseButtonMorph)>>mouseUp: > Receiver: 3PButton(#togglePreferenceValue 2512237) > Arguments and temporary variables: > evt: [367@82 mouseUp 99776] > Receiver's instance variables: > bounds: 358@75 corner: 372@87 > owner: a BorderedMorph(1400912) > submorphs: #() > fullBounds: 358@75 corner: 372@87 > color: Color blue > extension: nil > image: ColorForm(12x12x1) > offImage: ColorForm(12x12x1) > pressedImage: ColorForm(12x12x1) > state: #off > target: a Preference#swapMouseButtons false > actionSelector: #togglePreferenceValue > arguments: #() > actWhen: #buttonUp > getSelector: #preferenceValue > getArgument: nil > > UpdatingThreePhaseButtonMorph>>mouseUp: > Receiver: 3PButton(#togglePreferenceValue 2512237) > Arguments and temporary variables: > evt: [367@82 mouseUp 99776] > Receiver's instance variables: > bounds: 358@75 corner: 372@87 > owner: a BorderedMorph(1400912) > submorphs: #() > fullBounds: 358@75 corner: 372@87 > color: Color blue > extension: nil > image: ColorForm(12x12x1) > offImage: ColorForm(12x12x1) > pressedImage: ColorForm(12x12x1) > state: #off > target: a Preference#swapMouseButtons false > actionSelector: #togglePreferenceValue > arguments: #() > actWhen: #buttonUp > getSelector: #preferenceValue > getArgument: nil > > UpdatingThreePhaseButtonMorph(Morph)>>handleMouseUp: > Receiver: 3PButton(#togglePreferenceValue 2512237) > Arguments and temporary variables: > anEvent: [367@82 mouseUp 99776] > Receiver's instance variables: > bounds: 358@75 corner: 372@87 > owner: a BorderedMorph(1400912) > submorphs: #() > fullBounds: 358@75 corner: 372@87 > color: Color blue > extension: nil > image: ColorForm(12x12x1) > offImage: ColorForm(12x12x1) > pressedImage: ColorForm(12x12x1) > state: #off > target: a Preference#swapMouseButtons false > actionSelector: #togglePreferenceValue > arguments: #() > actWhen: #buttonUp > getSelector: #preferenceValue > getArgument: nil > > MouseButtonEvent>>sentTo: > Receiver: [367@82 mouseUp 99776] > Arguments and temporary variables: > anObject: 3PButton(#togglePreferenceValue 2512237) > Receiver's instance variables: > timeStamp: 99776 > source: a HandMorph(3089952) > type: #mouseUp > buttons: 0 > position: 367@82 > handler: nil > wasHandled: true > whichButton: 4 > > UpdatingThreePhaseButtonMorph(Morph)>>handleEvent: > Receiver: 3PButton(#togglePreferenceValue 2512237) > Arguments and temporary variables: > anEvent: [367@82 mouseUp 99776] > Receiver's instance variables: > bounds: 358@75 corner: 372@87 > owner: a BorderedMorph(1400912) > submorphs: #() > fullBounds: 358@75 corner: 372@87 > color: Color blue > extension: nil > image: ColorForm(12x12x1) > offImage: ColorForm(12x12x1) > pressedImage: ColorForm(12x12x1) > state: #off > target: a Preference#swapMouseButtons false > actionSelector: #togglePreferenceValue > arguments: #() > actWhen: #buttonUp > getSelector: #preferenceValue > getArgument: nil > > UpdatingThreePhaseButtonMorph(Morph)>>handleFocusEvent: > Receiver: 3PButton(#togglePreferenceValue 2512237) > Arguments and temporary variables: > anEvent: [367@82 mouseUp 99776] > Receiver's instance variables: > bounds: 358@75 corner: 372@87 > owner: a BorderedMorph(1400912) > submorphs: #() > fullBounds: 358@75 corner: 372@87 > color: Color blue > extension: nil > image: ColorForm(12x12x1) > offImage: ColorForm(12x12x1) > pressedImage: ColorForm(12x12x1) > state: #off > target: a Preference#swapMouseButtons false > actionSelector: #togglePreferenceValue > arguments: #() > actWhen: #buttonUp > getSelector: #preferenceValue > getArgument: nil > > [] in HandMorph>>sendFocusEvent:to:clear: > Receiver: a HandMorph(3089952) > Arguments and temporary variables: > <<error during printing> > Receiver's instance variables: > bounds: 263@150 corner: 279@166 > owner: a PasteUpMorph(2434915) [world] > submorphs: #() > fullBounds: 263@150 corner: 279@166 > color: Color blue > extension: a MorphExtension (2063753) [eventHandler = an EventHandler] > mouseFocus: nil > keyboardFocus: a TextMorphForEditView(3602329) > eventListeners: nil > mouseListeners: nil > keyboardListeners: a WeakArray(a DockingBarMorph(968081) a > PluggableSystemWindo...etc... > mouseClickState: nil > mouseOverHandler: a MouseOverHandler > lastMouseEvent: [262@150 263@150 mouseMove 174509] > targetOffset: 158@90 > damageRecorder: a DamageRecorder > cacheCanvas: nil > cachedCanvasHasHoles: false > temporaryCursor: nil > temporaryCursorOffset: nil > hardwareCursor: nil > hasChanged: true > savedPatch: nil > userInitials: '' > lastEventBuffer: #(1 174509 263 150 0 0 0 1) > genieGestureProcessor: nil > keyboardInterpreter: an UTF32InputInterpreter > > BlockClosure>>on:do: > Receiver: [closure] in HandMorph>>sendFocusEvent:to:clear: > Arguments and temporary variables: > exception: Error > handlerAction: [closure] in PasteUpMorph>>becomeActiveDuring: > handlerActive: false > Receiver's instance variables: > outerContext: HandMorph>>sendFocusEvent:to:clear: > startpc: 67 > numArgs: 0 > > PasteUpMorph>>becomeActiveDuring: > Receiver: a PasteUpMorph(2434915) [world] > Arguments and temporary variables: > aBlock: [closure] in HandMorph>>sendFocusEvent:to:clear: > priorWorld: a PasteUpMorph(2434915) [world] > priorHand: a HandMorph(3089952) > priorEvent: [637@211 mouseOver red nil] > Receiver's instance variables: > bounds: 0@0 corner: 801@600 > owner: nil > submorphs: {a PluggableSystemWindow<MessageNotUnderstood: EventSensor > class>>sw...etc... > fullBounds: 0@0 corner: 801@600 > color: Color darkGray > extension: a MorphExtension (3317156) [eventHandler = an EventHandler] > [other:...etc... > borderWidth: 0 > borderColor: (Color r: 0.515 g: 0.181 b: 0.263) > presenter: an EtoysPresenter (764729) > model: a MorphicModel(1457048) > cursor: 1 > padding: 3 > backgroundMorph: nil > turtleTrailsForm: nil > turtlePen: nil > lastTurtlePositions: nil > isPartsBin: nil > indicateCursor: nil > wantsMouseOverHalos: nil > worldState: a WorldState > griddingOn: nil > > HandMorph>>sendFocusEvent:to:clear: > Receiver: a HandMorph(3089952) > Arguments and temporary variables: > anEvent: [637@211 mouseUp 99776] > focusHolder: 3PButton(#togglePreferenceValue 2512237) > aBlock: [closure] in HandMorph>>sendMouseEvent: > w: a PasteUpMorph(2434915) [world] > result: #(nil) > Receiver's instance variables: > bounds: 263@150 corner: 279@166 > owner: a PasteUpMorph(2434915) [world] > submorphs: #() > fullBounds: 263@150 corner: 279@166 > color: Color blue > extension: a MorphExtension (2063753) [eventHandler = an EventHandler] > mouseFocus: nil > keyboardFocus: a TextMorphForEditView(3602329) > eventListeners: nil > mouseListeners: nil > keyboardListeners: a WeakArray(a DockingBarMorph(968081) a > PluggableSystemWindo...etc... > mouseClickState: nil > mouseOverHandler: a MouseOverHandler > lastMouseEvent: [262@150 263@150 mouseMove 174509] > targetOffset: 158@90 > damageRecorder: a DamageRecorder > cacheCanvas: nil > cachedCanvasHasHoles: false > temporaryCursor: nil > temporaryCursorOffset: nil > hardwareCursor: nil > hasChanged: true > savedPatch: nil > userInitials: '' > lastEventBuffer: #(1 174509 263 150 0 0 0 1) > genieGestureProcessor: nil > keyboardInterpreter: an UTF32InputInterpreter > > HandMorph>>sendEvent:focus:clear: > Receiver: a HandMorph(3089952) > Arguments and temporary variables: > anEvent: [637@211 mouseUp 99776] > focusHolder: 3PButton(#togglePreferenceValue 2512237) > aBlock: [closure] in HandMorph>>sendMouseEvent: > result: nil > Receiver's instance variables: > bounds: 263@150 corner: 279@166 > owner: a PasteUpMorph(2434915) [world] > submorphs: #() > fullBounds: 263@150 corner: 279@166 > color: Color blue > extension: a MorphExtension (2063753) [eventHandler = an EventHandler] > mouseFocus: nil > keyboardFocus: a TextMorphForEditView(3602329) > eventListeners: nil > mouseListeners: nil > keyboardListeners: a WeakArray(a DockingBarMorph(968081) a > PluggableSystemWindo...etc... > mouseClickState: nil > mouseOverHandler: a MouseOverHandler > lastMouseEvent: [262@150 263@150 mouseMove 174509] > targetOffset: 158@90 > damageRecorder: a DamageRecorder > cacheCanvas: nil > cachedCanvasHasHoles: false > temporaryCursor: nil > temporaryCursorOffset: nil > hardwareCursor: nil > hasChanged: true > savedPatch: nil > userInitials: '' > lastEventBuffer: #(1 174509 263 150 0 0 0 1) > genieGestureProcessor: nil > keyboardInterpreter: an UTF32InputInterpreter > > HandMorph>>sendMouseEvent: > Receiver: a HandMorph(3089952) > Arguments and temporary variables: > anEvent: [637@211 mouseUp 99776] > Receiver's instance variables: > bounds: 263@150 corner: 279@166 > owner: a PasteUpMorph(2434915) [world] > submorphs: #() > fullBounds: 263@150 corner: 279@166 > color: Color blue > extension: a MorphExtension (2063753) [eventHandler = an EventHandler] > mouseFocus: nil > keyboardFocus: a TextMorphForEditView(3602329) > eventListeners: nil > mouseListeners: nil > keyboardListeners: a WeakArray(a DockingBarMorph(968081) a > PluggableSystemWindo...etc... > mouseClickState: nil > mouseOverHandler: a MouseOverHandler > lastMouseEvent: [262@150 263@150 mouseMove 174509] > targetOffset: 158@90 > damageRecorder: a DamageRecorder > cacheCanvas: nil > cachedCanvasHasHoles: false > temporaryCursor: nil > temporaryCursorOffset: nil > hardwareCursor: nil > hasChanged: true > savedPatch: nil > userInitials: '' > lastEventBuffer: #(1 174509 263 150 0 0 0 1) > genieGestureProcessor: nil > keyboardInterpreter: an UTF32InputInterpreter > > > --- The full stack --- > EventSensor class(Object)>>doesNotUnderstand: #swapMouseButtonsChanged > Preference>>notifyInformeeOfChange > Preference>>togglePreferenceValue > [] in UpdatingThreePhaseButtonMorph(ThreePhaseButtonMorph)>>doButtonAction: > BlockClosure>>ensure: > CursorWithMask(Cursor)>>showWhile: > UpdatingThreePhaseButtonMorph(ThreePhaseButtonMorph)>>doButtonAction: > UpdatingThreePhaseButtonMorph(ThreePhaseButtonMorph)>>mouseUp: > UpdatingThreePhaseButtonMorph>>mouseUp: > UpdatingThreePhaseButtonMorph(Morph)>>handleMouseUp: > MouseButtonEvent>>sentTo: > UpdatingThreePhaseButtonMorph(Morph)>>handleEvent: > UpdatingThreePhaseButtonMorph(Morph)>>handleFocusEvent: > [] in HandMorph>>sendFocusEvent:to:clear: > BlockClosure>>on:do: > PasteUpMorph>>becomeActiveDuring: > HandMorph>>sendFocusEvent:to:clear: > HandMorph>>sendEvent:focus:clear: > HandMorph>>sendMouseEvent: > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > HandMorph>>handleEvent: > HandMorph>>processEvents > [] in WorldState>>doOneCycleNowFor: > Array(SequenceableCollection)>>do: > WorldState>>handsDo: > WorldState>>doOneCycleNowFor: > WorldState>>doOneCycleFor: > PasteUpMorph>>doOneCycle > [] in MorphicProject>>spawnNewProcess > [] in BlockClosure>>newProcess |
The preference is made automatically. In ReleaseBuilder class setPreference Preference enable: #swapMouseButtons The preference is made if it is not in the image already. I think the #swapMouseButtonChanged is also made automatically and derived from the preference name if not set specifically. Best, Karl On Wed, Mar 2, 2016 at 1:35 AM, David T. Lewis <[hidden email]> wrote: It looks like the preference has changed. For the #swapMouseButtons preference, |
Hi, there!
I restored some other messages that got lost and made it consistent with the key-duplication things in EventSensor: http://forum.world.st/The-Trunk-Kernel-mt-1003-mcz-td4881980.html Best, Marcel |
Nice. BTW: there is a lot of empty categories in the Preferences class. We must remove those in a post script or something. Preferences organization removeEmptyCategories I'm not sure how to do it ? Add it in a package preamble ? Does we then need to remove the preamble again ? Best, Karl On Wed, Mar 2, 2016 at 12:44 PM, marcel.taeumel <[hidden email]> wrote: Hi, there! |
In reply to this post by marcel.taeumel
Marcel, do you know why I don't find any senders of #swapMouseButtonsChanged?
Is it some kind of magic assembling of some String somewhere and then sending it #asSymbol and then performing it? If so, how about we consider aligning our implementations with the IDE tools and the way people use them? With no senders, we know someone will feel inclined to "clean" this someday. If we must do that magic, perhaps at least putting some kind of marker statement like this in the relevant methods: 'this method performs ' -> #swapMouseButtonsChanged. so that all the usual tools will lead future readers to easily figure things out. On Wed, Mar 2, 2016 at 5:44 AM, marcel.taeumel <[hidden email]> wrote: > Hi, there! > > I restored some other messages that got lost and made it consistent with the > key-duplication things in EventSensor: > > http://forum.world.st/The-Trunk-Kernel-mt-1003-mcz-td4881980.html > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/swapMouseButtons-broken-in-trunk-tp4881884p4881981.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > |
> On 03.03.2016, at 21:42, Chris Muller <[hidden email]> wrote: > > Marcel, do you know why I don't find any senders of #swapMouseButtonsChanged? Inspect #swapMouseButtonsChanged and “explore pointers” ;) - Bert - smime.p7s (5K) Download Attachment |
In reply to this post by Karl Ramberg
On Thu, Mar 3, 2016 at 12:31 PM, karl ramberg <[hidden email]> wrote:
If I remember right, the preamble (and postlude?) only get run once - when they are first changed. After that, they are skipped. This means you want to leave them in and not remove them - otherwise a person later on would update from Trunk and just get the latest version - which doesn't have the preamble - and the work wouldn't be done. Or am I wrong, and this only happens with Class initialization? -cbc
|
I'm also not not sure how this works :-( Best, Karl On Thu, Mar 3, 2016 at 11:28 PM, Chris Cunningham <[hidden email]> wrote:
|
In reply to this post by cbc
On 03.03.2016, at 23:28, Chris Cunningham <[hidden email]> wrote:
It happens exactly the same as with class initialization: If the definition (of the script or method) changed, it gets executed. You cannot rely on it having executed, or it only executing once. It’s better to write it in a way that running it again does no harm. We can force execution by issuing an update map, but it’s better to avoid that. For the problem at hand (empty method categories) we also could just add a step to the release builder to ensure all categories are clean.
- Bert -
smime.p7s (5K) Download Attachment |
On Fri, Mar 4, 2016 at 3:25 PM, Bert Freudenberg <[hidden email]> wrote:
We could run this for all classes I guess. I don't see much value in keeping empty method categories around... Anyone objects ? Best, Karl
|
On 04.03.2016, at 15:59, karl ramberg <[hidden email]> wrote: > > > On Fri, Mar 4, 2016 at 3:25 PM, Bert Freudenberg <[hidden email]> wrote: > On 03.03.2016, at 23:28, Chris Cunningham <[hidden email]> wrote: >> >> On Thu, Mar 3, 2016 at 12:31 PM, karl ramberg <[hidden email]> wrote: >> Nice. >> BTW: there is a lot of empty categories in the Preferences class. >> We must remove those in a post script or something. >> Preferences organization removeEmptyCategories >> >> I'm not sure how to do it ? >> >> Add it in a package preamble ? >> Does we then need to remove the preamble again ? >> >> If I remember right, the preamble (and postlude?) only get run once - when they are first changed. After that, they are skipped. >> This means you want to leave them in and not remove them - otherwise a person later on would update from Trunk and just get the latest version - which doesn't have the preamble - and the work wouldn't be done. >> >> Or am I wrong, and this only happens with Class initialization? > > It happens exactly the same as with class initialization: > > If the definition (of the script or method) changed, it gets executed. > > You cannot rely on it having executed, or it only executing once. It’s better to write it in a way that running it again does no harm. > > We can force execution by issuing an update map, but it’s better to avoid that. > > For the problem at hand (empty method categories) we also could just add a step to the release builder to ensure all categories are clean. > > We could run this for all classes I guess. I don't see much value in keeping empty method categories around... > > Anyone objects ? "look at class side" … Best -Tobias > > Best, > Karl > > > - Bert - |
Ugh, of course there is stuff like "look at class side" ;-) Best. Karl On Fri, Mar 4, 2016 at 4:20 PM, Tobias Pape <[hidden email]> wrote:
|
In reply to this post by Chris Muller-3
Hi Chris,
sure. This selectors is constructed via the preference name + "Changed" and stored in changeSelector. Then changeSelector is performed on changeInformee. You will not find anything in the code and hence Senders does not give you anything. Best, Marcel |
Thanks Marcel, but my question was about the necessity of such black
magic, and what possible mitigations could be taken to reduce or eliminate it.. On Sat, Mar 5, 2016 at 6:55 PM, marcel.taeumel <[hidden email]> wrote: > Hi Chris, > > sure. This selectors is constructed via the preference name + "Changed" and > stored in changeSelector. Then changeSelector is performed on > changeInformee. You will not find anything in the code and hence Senders > does not give you anything. > > Best, > Marcel > > > > -- > View this message in context: http://forum.world.st/swapMouseButtons-broken-in-trunk-tp4881884p4882728.html > Sent from the Squeak - Dev mailing list archive at Nabble.com. > |
On 06.03.2016, at 17:51, Chris Muller <[hidden email]> wrote:
> > Thanks Marcel, but my question was about the necessity of such black > magic, and what possible mitigations could be taken to reduce or > eliminate it.. We could add it to setNotificationParametersForStandardPreferences for documentation. > On Sat, Mar 5, 2016 at 6:55 PM, marcel.taeumel <[hidden email]> wrote: >> Hi Chris, >> >> sure. This selectors is constructed via the preference name + "Changed" and >> stored in changeSelector. Then changeSelector is performed on >> changeInformee. Are you sure? I thought it would have been added by a changeset preamble. I don’t think it’s constructed. - Bert - smime.p7s (5K) Download Attachment |
On 06.03.2016, at 18:33, Bert Freudenberg <[hidden email]> wrote:
> > On 06.03.2016, at 17:51, Chris Muller <[hidden email]> wrote: >> >> Thanks Marcel, but my question was about the necessity of such black >> magic, and what possible mitigations could be taken to reduce or >> eliminate it.. > > We could add it to setNotificationParametersForStandardPreferences for documentation. Hmm, no, that’s only for Preferences as changeInformee … We could just add a comment to swapMouseButtonsChanged of course. Pragma prefs certainly have an advantage for documentation. - Bert - >> On Sat, Mar 5, 2016 at 6:55 PM, marcel.taeumel <[hidden email]> wrote: >>> Hi Chris, >>> >>> sure. This selectors is constructed via the preference name + "Changed" and >>> stored in changeSelector. Then changeSelector is performed on >>> changeInformee. > > Are you sure? I thought it would have been added by a changeset preamble. I don’t think it’s constructed. > > - Bert - smime.p7s (5K) Download Attachment |
In reply to this post by Chris Muller-3
Well, if that selector is missing, a debugger will be shown. Then you can fix it. Where is the black magic or the potential pitfall for the future? Hmm... we might want to provide symbol search through objects. This particular symbol is hold in a preference instance in the instVar changeSelector.
How can we detect that? Shouldn't be that hard... Best, Marcel |
It's actuallly really simple:
term := #swapMouseButtonsChanged. senders := OrderedCollection new. SystemNavigation default allObjectsDo: [:ea | 1 to: ea class instSize do: [:i | |val| val := ea instVarAt: i. val isSymbol ifTrue: [ val = term ifTrue: [senders add: ea]]]]. senders explore. On my laptop, it benches to '11.6 per second. 85.9 milliseconds per run.' Should we add this to trunk? We could filter out method additions or method references to produce cleaner results. The "Senders" shortcut might just spawn an additional explorer with the resulting objects. Fairly easy. Best, Marcel |
On Mon, Mar 07, 2016 at 03:13:10PM -0800, marcel.taeumel wrote:
> It's actuallly really simple: > > term := #swapMouseButtonsChanged. > senders := OrderedCollection new. > > SystemNavigation default allObjectsDo: [:ea | > 1 to: ea class instSize do: [:i | |val| > val := ea instVarAt: i. > val isSymbol ifTrue: [ > val = term ifTrue: [senders add: ea]]]]. > > senders explore. > > On my laptop, it benches to '11.6 per second. 85.9 milliseconds per run.' > > Should we add this to trunk? We could filter out method additions or method > references to produce cleaner results. The "Senders" shortcut might just > spawn an additional explorer with the resulting objects. Fairly easy. > It seems to make sense for "senders select: [ :e | e species == Preference ]" and there is no performance problem. So I guess is OK as long as there is a good method comment to explain why we do this for the special case of senders that originate from instances of Preference. Dave |
Free forum by Nabble | Edit this page |