vnc: improve numpad support for qemu console.
Reorganize qemu console emulation code. Make it look at the numlock state and interpret numpad keys as arrow+friends (numlock off) or digits (numlock on). While being at it also wind up the other numpad keys. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
		
							parent
							
								
									5c5dafdc5e
								
							
						
					
					
						commit
						bb0a18e110
					
				
							
								
								
									
										61
									
								
								vnc.c
									
									
									
									
									
								
							
							
						
						
									
										61
									
								
								vnc.c
									
									
									
									
									
								
							@ -1361,6 +1361,7 @@ static void do_key_event(VncState *vs, int down, int keycode, int sym)
 | 
				
			|||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        /* QEMU console emulation */
 | 
					        /* QEMU console emulation */
 | 
				
			||||||
        if (down) {
 | 
					        if (down) {
 | 
				
			||||||
 | 
					            int numlock = vs->modifiers_state[0x45];
 | 
				
			||||||
            switch (keycode) {
 | 
					            switch (keycode) {
 | 
				
			||||||
            case 0x2a:                          /* Left Shift */
 | 
					            case 0x2a:                          /* Left Shift */
 | 
				
			||||||
            case 0x36:                          /* Right Shift */
 | 
					            case 0x36:                          /* Right Shift */
 | 
				
			||||||
@ -1370,41 +1371,83 @@ static void do_key_event(VncState *vs, int down, int keycode, int sym)
 | 
				
			|||||||
            case 0xb8:                          /* Right ALT */
 | 
					            case 0xb8:                          /* Right ALT */
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            case 0xc8:
 | 
					            case 0xc8:
 | 
				
			||||||
            case 0x48:
 | 
					 | 
				
			||||||
                kbd_put_keysym(QEMU_KEY_UP);
 | 
					                kbd_put_keysym(QEMU_KEY_UP);
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            case 0xd0:
 | 
					            case 0xd0:
 | 
				
			||||||
            case 0x50:
 | 
					 | 
				
			||||||
                kbd_put_keysym(QEMU_KEY_DOWN);
 | 
					                kbd_put_keysym(QEMU_KEY_DOWN);
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            case 0xcb:
 | 
					            case 0xcb:
 | 
				
			||||||
            case 0x4b:
 | 
					 | 
				
			||||||
                kbd_put_keysym(QEMU_KEY_LEFT);
 | 
					                kbd_put_keysym(QEMU_KEY_LEFT);
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            case 0xcd:
 | 
					            case 0xcd:
 | 
				
			||||||
            case 0x4d:
 | 
					 | 
				
			||||||
                kbd_put_keysym(QEMU_KEY_RIGHT);
 | 
					                kbd_put_keysym(QEMU_KEY_RIGHT);
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            case 0xd3:
 | 
					            case 0xd3:
 | 
				
			||||||
            case 0x53:
 | 
					 | 
				
			||||||
                kbd_put_keysym(QEMU_KEY_DELETE);
 | 
					                kbd_put_keysym(QEMU_KEY_DELETE);
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            case 0xc7:
 | 
					            case 0xc7:
 | 
				
			||||||
            case 0x47:
 | 
					 | 
				
			||||||
                kbd_put_keysym(QEMU_KEY_HOME);
 | 
					                kbd_put_keysym(QEMU_KEY_HOME);
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            case 0xcf:
 | 
					            case 0xcf:
 | 
				
			||||||
            case 0x4f:
 | 
					 | 
				
			||||||
                kbd_put_keysym(QEMU_KEY_END);
 | 
					                kbd_put_keysym(QEMU_KEY_END);
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            case 0xc9:
 | 
					            case 0xc9:
 | 
				
			||||||
            case 0x49:
 | 
					 | 
				
			||||||
                kbd_put_keysym(QEMU_KEY_PAGEUP);
 | 
					                kbd_put_keysym(QEMU_KEY_PAGEUP);
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            case 0xd1:
 | 
					            case 0xd1:
 | 
				
			||||||
            case 0x51:
 | 
					 | 
				
			||||||
                kbd_put_keysym(QEMU_KEY_PAGEDOWN);
 | 
					                kbd_put_keysym(QEMU_KEY_PAGEDOWN);
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            case 0x47:
 | 
				
			||||||
 | 
					                kbd_put_keysym(numlock ? '7' : QEMU_KEY_HOME);
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            case 0x48:
 | 
				
			||||||
 | 
					                kbd_put_keysym(numlock ? '8' : QEMU_KEY_UP);
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            case 0x49:
 | 
				
			||||||
 | 
					                kbd_put_keysym(numlock ? '9' : QEMU_KEY_PAGEUP);
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            case 0x4b:
 | 
				
			||||||
 | 
					                kbd_put_keysym(numlock ? '4' : QEMU_KEY_LEFT);
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            case 0x4c:
 | 
				
			||||||
 | 
					                kbd_put_keysym('5');
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            case 0x4d:
 | 
				
			||||||
 | 
					                kbd_put_keysym(numlock ? '6' : QEMU_KEY_RIGHT);
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            case 0x4f:
 | 
				
			||||||
 | 
					                kbd_put_keysym(numlock ? '1' : QEMU_KEY_END);
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            case 0x50:
 | 
				
			||||||
 | 
					                kbd_put_keysym(numlock ? '2' : QEMU_KEY_DOWN);
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            case 0x51:
 | 
				
			||||||
 | 
					                kbd_put_keysym(numlock ? '3' : QEMU_KEY_PAGEDOWN);
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            case 0x52:
 | 
				
			||||||
 | 
					                kbd_put_keysym('0');
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            case 0x53:
 | 
				
			||||||
 | 
					                kbd_put_keysym(numlock ? '.' : QEMU_KEY_DELETE);
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            case 0xb5:
 | 
				
			||||||
 | 
					                kbd_put_keysym('/');
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            case 0x37:
 | 
				
			||||||
 | 
					                kbd_put_keysym('*');
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            case 0x4a:
 | 
				
			||||||
 | 
					                kbd_put_keysym('-');
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            case 0x4e:
 | 
				
			||||||
 | 
					                kbd_put_keysym('+');
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            case 0x9c:
 | 
				
			||||||
 | 
					                kbd_put_keysym('\n');
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            default:
 | 
					            default:
 | 
				
			||||||
                kbd_put_keysym(sym);
 | 
					                kbd_put_keysym(sym);
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user