[Newbies] Detecting keyboard state / finding older fixes

Bert Freudenberg bert at freudenbergs.de
Fri Mar 7 14:30:57 UTC 2008


On Mar 7, 2008, at 14:54 , stan shepherd wrote:

>
> Where I was confused is that checking if the key is pressed already  
> doesn't
> appear to differentiate between a 'real' key down and a repeat. For  
> example
> :
>
> keyDown: anEvent
> 	(keys includes: anEvent keyValue)
> 		ifTrue: [Transcript show: 'skipped ' , anEvent asString; cr]
> 		ifFalse: [keys add: anEvent keyValue. "
> 			Transcript show: 'key down ' , anEvent asString; cr.
> 			self changed]
>
> always takes the 'key down' branch, even for key held down.
>
> Was this what you meant?

Yes. The code above works as expected on Mac OS X, printing  
"skipped..." for auto-repeats.


> On the other hand, looping over this in a thread:
>
> keyStrokes
> 	keys
> 		do: [:key | key
> 				ifNotNil: [(oldKeys includes: key)
> 						ifFalse: [Transcript show: 'key added ' , key asString;
> 								 cr]]].
> 	oldKeys do: [:key | key
> 				ifNotNil: [(keys includes: key)
> 						ifFalse: [Transcript show: 'key removed ' , key asString;
> 								 cr]]].
> 	oldKeys := keys copy.
>
> has the desired effect of only showing real key moves.
>
> Is this over complicating things?

It indeed sounds overly complicated, unless your platform forces you  
to resort to such things. Are you on Linux by chance?

- Bert -


More information about the Beginners mailing list