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, | 	event xevent.KeyPressEvent, | ||||||
| ) { | ) { | ||||||
| 	keyEvent    := *event.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 { | 	backend.callbackManager.RunPress (button, stone.Modifiers { | ||||||
| 		// FIXME these may not be correct in all cases | 		// FIXME these may not be correct in all cases | ||||||
| 		Shift:   (keyEvent.State & xproto.ModMaskShift)   > 0, | 		Shift:   (keyEvent.State & xproto.ModMaskShift)   > 0, | ||||||
| @ -120,6 +120,7 @@ func (backend *Backend) handleKeyPress ( | |||||||
| 		// Meta:    (keyEvent.State & xproto.??)       > 0, | 		// Meta:    (keyEvent.State & xproto.??)       > 0, | ||||||
| 		Super:   (keyEvent.State & xproto.ModMask4)       > 0, | 		Super:   (keyEvent.State & xproto.ModMask4)       > 0, | ||||||
| 		// Hyper:   (keyEvent.State & xproto.??)       > 0, | 		// Hyper:   (keyEvent.State & xproto.??)       > 0, | ||||||
|  | 		NumberPad: num, | ||||||
| 	}) | 	}) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -128,7 +129,7 @@ func (backend *Backend) handleKeyRelease ( | |||||||
| 	event xevent.KeyReleaseEvent, | 	event xevent.KeyReleaseEvent, | ||||||
| ) { | ) { | ||||||
| 	keyEvent  := *event.KeyReleaseEvent | 	keyEvent  := *event.KeyReleaseEvent | ||||||
| 	button   := backend.keycodeToButton(keyEvent.Detail, keyEvent.State) | 	button, _ := backend.keycodeToButton(keyEvent.Detail, keyEvent.State) | ||||||
| 	backend.callbackManager.RunRelease(button) | 	backend.callbackManager.RunRelease(button) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -71,11 +71,51 @@ var buttonCodeTable = map[xproto.Keysym] stone.Button { | |||||||
| 	0xFF20: stone.KeyDead, | 	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 ( | func (backend *Backend) keycodeToButton ( | ||||||
| 	keycode xproto.Keycode, | 	keycode xproto.Keycode, | ||||||
| 	state   uint16, | 	state   uint16, | ||||||
| ) ( | ) ( | ||||||
| 	button    stone.Button, | 	button    stone.Button, | ||||||
|  | 	numberPad bool, | ||||||
| ) { | ) { | ||||||
| 	// FIXME: also set shift to true if the lock modifier is on and the lock | 	// FIXME: also set shift to true if the lock modifier is on and the lock | ||||||
| 	// modifier is interpreted as shiftLock | 	// modifier is interpreted as shiftLock | ||||||
| @ -168,14 +208,17 @@ func (backend *Backend) keycodeToButton ( | |||||||
| 		selectedRune   = symbol2Rune | 		selectedRune   = symbol2Rune | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// look up in table | 	// look up in control code table | ||||||
| 	var isControl bool | 	var isControl bool | ||||||
| 	button, isControl = buttonCodeTable[selectedKeysym] | 	button, isControl = buttonCodeTable[selectedKeysym] | ||||||
|  | 	if isControl { return } | ||||||
| 
 | 
 | ||||||
| 	// if it wasn't found,  | 	// look up in keypad table | ||||||
| 	if !isControl { | 	button, numberPad = keypadCodeTable[selectedKeysym] | ||||||
|  | 	if numberPad { return } | ||||||
|  | 
 | ||||||
|  | 	// otherwise, use the rune | ||||||
| 	button = stone.Button(selectedRune) | 	button = stone.Button(selectedRune) | ||||||
| 	} |  | ||||||
| 	 | 	 | ||||||
| 	return | 	return | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										6
									
								
								input.go
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								input.go
									
									
									
									
									
								
							| @ -94,4 +94,10 @@ type Modifiers struct { | |||||||
| 	Meta    bool | 	Meta    bool | ||||||
| 	Super   bool | 	Super   bool | ||||||
| 	Hyper   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