[Q] Making a button immune to mouse clicks

Ned Konz ned at bike-nomad.com
Sun Apr 14 14:23:20 UTC 2002

On Sunday 14 April 2002 07:08 am, I wrote:

> Any plain Morph (one that doesn't override handlesMouseDown: and
> mouseDown: et. al.) can be sensitized to mouse clicks. Just say:
> myMorph on: #mouseDown send: #doSomething to: someObject.

Just to clarify:

The #doSomething selector can actually have an arity (number of 
arguments) of 0, 1, 2, or 3. So you can pass the event itself, the 
morph that received the event, and a single parameter. But there is 
only one parameter shared between all the event types. To pass a 
parameter you use the form #on:send:to:withValue: .

These are passed as:

	arity = 0 ifTrue:
		[^ recipient perform: selector].
	arity = 1 ifTrue:
		[^ recipient perform: selector with: event].
	arity = 2 ifTrue:
		[^ recipient perform: selector with: event with: sourceMorph].
	arity = 3 ifTrue:
		[^ recipient perform: selector with: valueParameter with: event 
with: sourceMorph].

Unfortunately, the error message in 
EventHandler>>on:send:to:withValue: that says 'Warning: value 
parameters are passed as last of 3 arguments' is incorrect, as is the 
class comment in EventHandler which says it's:
	mouseDownRecipient perform: mouseDownSelector3 with: event with: 
targetMorph with: valueParameter

This is to keep you on your toes.
Ned Konz

More information about the Squeak-dev mailing list