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 {
 | 
			
		||||
        /* QEMU console emulation */
 | 
			
		||||
        if (down) {
 | 
			
		||||
            int numlock = vs->modifiers_state[0x45];
 | 
			
		||||
            switch (keycode) {
 | 
			
		||||
            case 0x2a:                          /* Left 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 */
 | 
			
		||||
                break;
 | 
			
		||||
            case 0xc8:
 | 
			
		||||
            case 0x48:
 | 
			
		||||
                kbd_put_keysym(QEMU_KEY_UP);
 | 
			
		||||
                break;
 | 
			
		||||
            case 0xd0:
 | 
			
		||||
            case 0x50:
 | 
			
		||||
                kbd_put_keysym(QEMU_KEY_DOWN);
 | 
			
		||||
                break;
 | 
			
		||||
            case 0xcb:
 | 
			
		||||
            case 0x4b:
 | 
			
		||||
                kbd_put_keysym(QEMU_KEY_LEFT);
 | 
			
		||||
                break;
 | 
			
		||||
            case 0xcd:
 | 
			
		||||
            case 0x4d:
 | 
			
		||||
                kbd_put_keysym(QEMU_KEY_RIGHT);
 | 
			
		||||
                break;
 | 
			
		||||
            case 0xd3:
 | 
			
		||||
            case 0x53:
 | 
			
		||||
                kbd_put_keysym(QEMU_KEY_DELETE);
 | 
			
		||||
                break;
 | 
			
		||||
            case 0xc7:
 | 
			
		||||
            case 0x47:
 | 
			
		||||
                kbd_put_keysym(QEMU_KEY_HOME);
 | 
			
		||||
                break;
 | 
			
		||||
            case 0xcf:
 | 
			
		||||
            case 0x4f:
 | 
			
		||||
                kbd_put_keysym(QEMU_KEY_END);
 | 
			
		||||
                break;
 | 
			
		||||
            case 0xc9:
 | 
			
		||||
            case 0x49:
 | 
			
		||||
                kbd_put_keysym(QEMU_KEY_PAGEUP);
 | 
			
		||||
                break;
 | 
			
		||||
            case 0xd1:
 | 
			
		||||
            case 0x51:
 | 
			
		||||
                kbd_put_keysym(QEMU_KEY_PAGEDOWN);
 | 
			
		||||
                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:
 | 
			
		||||
                kbd_put_keysym(sym);
 | 
			
		||||
                break;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue