We now take into account keypad keys
However, num lock is not accounted for. This still needs to be implemented.
This commit is contained in:
		
							parent
							
								
									5a76bd0c22
								
							
						
					
					
						commit
						33ed2af075
					
				| @ -111,7 +111,7 @@ func (backend *Backend) handleKeyPress ( | ||||
| 	event xevent.KeyPressEvent, | ||||
| ) { | ||||
| 	keyEvent    := *event.KeyPressEvent | ||||
| 	button   := backend.keycodeToButton(keyEvent.Detail, keyEvent.State) | ||||
| 	button, num := backend.keycodeToButton(keyEvent.Detail, keyEvent.State) | ||||
| 	backend.callbackManager.RunPress (button, stone.Modifiers { | ||||
| 		// FIXME these may not be correct in all cases | ||||
| 		Shift:   (keyEvent.State & xproto.ModMaskShift)   > 0, | ||||
| @ -120,6 +120,7 @@ func (backend *Backend) handleKeyPress ( | ||||
| 		// Meta:    (keyEvent.State & xproto.??)       > 0, | ||||
| 		Super:   (keyEvent.State & xproto.ModMask4)       > 0, | ||||
| 		// Hyper:   (keyEvent.State & xproto.??)       > 0, | ||||
| 		NumberPad: num, | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| @ -128,7 +129,7 @@ func (backend *Backend) handleKeyRelease ( | ||||
| 	event xevent.KeyReleaseEvent, | ||||
| ) { | ||||
| 	keyEvent  := *event.KeyReleaseEvent | ||||
| 	button   := backend.keycodeToButton(keyEvent.Detail, keyEvent.State) | ||||
| 	button, _ := backend.keycodeToButton(keyEvent.Detail, keyEvent.State) | ||||
| 	backend.callbackManager.RunRelease(button) | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -71,11 +71,51 @@ var buttonCodeTable = map[xproto.Keysym] stone.Button { | ||||
| 	0xFF20: stone.KeyDead, | ||||
| } | ||||
| 
 | ||||
| var keypadCodeTable = map[xproto.Keysym] stone.Button { | ||||
| 	0xff80: stone.Button(' '), | ||||
| 	0xff89: stone.KeyTab, | ||||
| 	0xff8d: stone.KeyEnter, | ||||
| 	0xff91: stone.KeyF1, | ||||
| 	0xff92: stone.KeyF2, | ||||
| 	0xff93: stone.KeyF3, | ||||
| 	0xff94: stone.KeyF4, | ||||
| 	0xff95: stone.KeyHome, | ||||
| 	0xff96: stone.KeyLeft, | ||||
| 	0xff97: stone.KeyUp, | ||||
| 	0xff98: stone.KeyRight, | ||||
| 	0xff99: stone.KeyDown, | ||||
| 	0xff9a: stone.KeyPageUp, | ||||
| 	0xff9b: stone.KeyPageDown, | ||||
| 	0xff9c: stone.KeyEnd, | ||||
| 	0xff9d: stone.KeyHome, | ||||
| 	0xff9e: stone.KeyInsert, | ||||
| 	0xff9f: stone.KeyDelete, | ||||
| 	0xffbd: stone.Button('='), | ||||
| 	0xffaa: stone.Button('*'), | ||||
| 	0xffab: stone.Button('+'), | ||||
| 	0xffac: stone.Button(','), | ||||
| 	0xffad: stone.Button('-'), | ||||
| 	0xffae: stone.Button('.'), | ||||
| 	0xffaf: stone.Button('/'), | ||||
| 
 | ||||
| 	0xffb0: stone.Button('0'), | ||||
| 	0xffb1: stone.Button('1'), | ||||
| 	0xffb2: stone.Button('2'), | ||||
| 	0xffb3: stone.Button('3'), | ||||
| 	0xffb4: stone.Button('4'), | ||||
| 	0xffb5: stone.Button('5'), | ||||
| 	0xffb6: stone.Button('6'), | ||||
| 	0xffb7: stone.Button('7'), | ||||
| 	0xffb8: stone.Button('8'), | ||||
| 	0xffb9: stone.Button('9'), | ||||
| } | ||||
| 
 | ||||
| func (backend *Backend) keycodeToButton ( | ||||
| 	keycode xproto.Keycode, | ||||
| 	state   uint16, | ||||
| ) ( | ||||
| 	button    stone.Button, | ||||
| 	numberPad bool, | ||||
| ) { | ||||
| 	// FIXME: also set shift to true if the lock modifier is on and the lock | ||||
| 	// modifier is interpreted as shiftLock | ||||
| @ -168,14 +208,17 @@ func (backend *Backend) keycodeToButton ( | ||||
| 		selectedRune   = symbol2Rune | ||||
| 	} | ||||
| 
 | ||||
| 	// look up in table | ||||
| 	// look up in control code table | ||||
| 	var isControl bool | ||||
| 	button, isControl = buttonCodeTable[selectedKeysym] | ||||
| 	if isControl { return } | ||||
| 
 | ||||
| 	// if it wasn't found,  | ||||
| 	if !isControl { | ||||
| 	// look up in keypad table | ||||
| 	button, numberPad = keypadCodeTable[selectedKeysym] | ||||
| 	if numberPad { return } | ||||
| 
 | ||||
| 	// otherwise, use the rune | ||||
| 	button = stone.Button(selectedRune) | ||||
| 	} | ||||
| 	 | ||||
| 	return | ||||
| } | ||||
|  | ||||
							
								
								
									
										6
									
								
								input.go
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								input.go
									
									
									
									
									
								
							| @ -94,4 +94,10 @@ type Modifiers struct { | ||||
| 	Meta    bool | ||||
| 	Super   bool | ||||
| 	Hyper   bool | ||||
| 
 | ||||
| 	// NumberPad does not represent a key, but it behaves like one. If it is | ||||
| 	// set to true, the button was pressed on the number pad. It is treated | ||||
| 	// as a modifier key because if you don't care whether a key was pressed | ||||
| 	// on the number pad or not, you can just ignore this value. | ||||
| 	NumberPad bool | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user