Guillermo Polito
unread,Jan 25, 2012, 3:59:27 PM1/25/12Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to Pharo Development
Hi!
I was looking why alt and ctrl keys behave the same in unix, jeje, so I looked at the vm and everything seemed to be alright, but in the image I always had Cmd+a key when doing alt+akey :S. And this is pretty annoying since it limits the ammount of shortcuts I can work with, and I also make things work different than the rest of the OS.
So, searching I found a KeyDecodeTable in InputEventSensor, which was built with this method:
installDuplicateKeyEntryFor: c
| key |
key := c asInteger.
"first do control->alt key"
KeyDecodeTable at: { key bitAnd: 16r9F . 2 } put: { key . 8 }.
"then alt->alt key"
KeyDecodeTable at: { key . 8 } put: { key . 8 }
So, every character keypress that had a 2 as a modifier (a control) is converted as a command in here:
processEvent: evt
"Process a single event. This method is run at high priority."
| type |
type := evt at: 1.
"Treat menu events first"
type = EventTypeMenu
ifTrue: [
self processMenuEvent: evt.
^nil].
"Tackle mouse events first"
type = EventTypeMouse
ifTrue: [
"Transmogrify the button state according to the platform's button map definition"
evt at: 5 put: (ButtonDecodeTable at: (evt at: 5) + 1).
"Map the mouse buttons depending on modifiers"
evt at: 5 put: (self mapButtons: (evt at: 5) modifiers: (evt at: 6)).
"Update state for polling calls"
mousePosition := (evt at: 3) @ (evt at: 4).
modifiers := evt at: 6.
mouseButtons := evt at: 5.
^evt].
"Finally keyboard"
type = EventTypeKeyboard
ifTrue: [
"Sswap ctrl/alt keys if neeeded"
KeyDecodeTable
at: {evt at: 3. evt at: 5}
ifPresent: [:a |
evt
at: 3 put: a first;
at: 5 put: a second].
"Update state for polling calls"
modifiers := evt at: 5.
^evt].
"Handle all events other than Keyborad or Mouse."
^evt.
Now, I think this hack is there to allow the same behavior cross platform, but it is very ugly :( And bring a lot of UI limitations to the people who only have alt and ctrl and no Cmd button :P... Ok, removing this ugly code made my shortcuts work now with only with alt (cmd to the vm) and not with control, hehe, but I think that to fix things we have to clean them first :).
Does anyone know the reason of the existance of this table (besides cross platform hacking)? Is this really useful? Can it be removed? Do I open a ticket?
Guille