ui/cocoa.m: switch to QKeyCode
This patch removes the pc/xt keycode map and replaces it with the QKeyCode keymap. Signed-off-by: John Arbuckle <programmingkidx@gmail.com> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
		
							parent
							
								
									a35412782d
								
							
						
					
					
						commit
						aaac714f31
					
				
							
								
								
									
										315
									
								
								ui/cocoa.m
									
									
									
									
									
								
							
							
						
						
									
										315
									
								
								ui/cocoa.m
									
									
									
									
									
								
							| @ -33,6 +33,7 @@ | ||||
| #include "sysemu/sysemu.h" | ||||
| #include "qmp-commands.h" | ||||
| #include "sysemu/blockdev.h" | ||||
| #include <Carbon/Carbon.h> | ||||
| 
 | ||||
| #ifndef MAC_OS_X_VERSION_10_5 | ||||
| #define MAC_OS_X_VERSION_10_5 1050 | ||||
| @ -72,178 +73,139 @@ bool stretch_video; | ||||
| NSTextField *pauseLabel; | ||||
| NSArray * supportedImageFileTypes; | ||||
| 
 | ||||
| // keymap conversion | ||||
| int keymap[] = | ||||
| { | ||||
| //  SdlI    macI    macH    SdlH    104xtH  104xtC  sdl | ||||
|     30, //  0       0x00    0x1e            A       QZ_a | ||||
|     31, //  1       0x01    0x1f            S       QZ_s | ||||
|     32, //  2       0x02    0x20            D       QZ_d | ||||
|     33, //  3       0x03    0x21            F       QZ_f | ||||
|     35, //  4       0x04    0x23            H       QZ_h | ||||
|     34, //  5       0x05    0x22            G       QZ_g | ||||
|     44, //  6       0x06    0x2c            Z       QZ_z | ||||
|     45, //  7       0x07    0x2d            X       QZ_x | ||||
|     46, //  8       0x08    0x2e            C       QZ_c | ||||
|     47, //  9       0x09    0x2f            V       QZ_v | ||||
|     0,  //  10      0x0A    Undefined | ||||
|     48, //  11      0x0B    0x30            B       QZ_b | ||||
|     16, //  12      0x0C    0x10            Q       QZ_q | ||||
|     17, //  13      0x0D    0x11            W       QZ_w | ||||
|     18, //  14      0x0E    0x12            E       QZ_e | ||||
|     19, //  15      0x0F    0x13            R       QZ_r | ||||
|     21, //  16      0x10    0x15            Y       QZ_y | ||||
|     20, //  17      0x11    0x14            T       QZ_t | ||||
|     2,  //  18      0x12    0x02            1       QZ_1 | ||||
|     3,  //  19      0x13    0x03            2       QZ_2 | ||||
|     4,  //  20      0x14    0x04            3       QZ_3 | ||||
|     5,  //  21      0x15    0x05            4       QZ_4 | ||||
|     7,  //  22      0x16    0x07            6       QZ_6 | ||||
|     6,  //  23      0x17    0x06            5       QZ_5 | ||||
|     13, //  24      0x18    0x0d            =       QZ_EQUALS | ||||
|     10, //  25      0x19    0x0a            9       QZ_9 | ||||
|     8,  //  26      0x1A    0x08            7       QZ_7 | ||||
|     12, //  27      0x1B    0x0c            -       QZ_MINUS | ||||
|     9,  //  28      0x1C    0x09            8       QZ_8 | ||||
|     11, //  29      0x1D    0x0b            0       QZ_0 | ||||
|     27, //  30      0x1E    0x1b            ]       QZ_RIGHTBRACKET | ||||
|     24, //  31      0x1F    0x18            O       QZ_o | ||||
|     22, //  32      0x20    0x16            U       QZ_u | ||||
|     26, //  33      0x21    0x1a            [       QZ_LEFTBRACKET | ||||
|     23, //  34      0x22    0x17            I       QZ_i | ||||
|     25, //  35      0x23    0x19            P       QZ_p | ||||
|     28, //  36      0x24    0x1c            ENTER   QZ_RETURN | ||||
|     38, //  37      0x25    0x26            L       QZ_l | ||||
|     36, //  38      0x26    0x24            J       QZ_j | ||||
|     40, //  39      0x27    0x28            '       QZ_QUOTE | ||||
|     37, //  40      0x28    0x25            K       QZ_k | ||||
|     39, //  41      0x29    0x27            ;       QZ_SEMICOLON | ||||
|     43, //  42      0x2A    0x2b            \       QZ_BACKSLASH | ||||
|     51, //  43      0x2B    0x33            ,       QZ_COMMA | ||||
|     53, //  44      0x2C    0x35            /       QZ_SLASH | ||||
|     49, //  45      0x2D    0x31            N       QZ_n | ||||
|     50, //  46      0x2E    0x32            M       QZ_m | ||||
|     52, //  47      0x2F    0x34            .       QZ_PERIOD | ||||
|     15, //  48      0x30    0x0f            TAB     QZ_TAB | ||||
|     57, //  49      0x31    0x39            SPACE   QZ_SPACE | ||||
|     41, //  50      0x32    0x29            `       QZ_BACKQUOTE | ||||
|     14, //  51      0x33    0x0e            BKSP    QZ_BACKSPACE | ||||
|     0,  //  52      0x34    Undefined | ||||
|     1,  //  53      0x35    0x01            ESC     QZ_ESCAPE | ||||
|     220, // 54      0x36    0xdc    E0,5C   R GUI   QZ_RMETA | ||||
|     219, // 55      0x37    0xdb    E0,5B   L GUI   QZ_LMETA | ||||
|     42, //  56      0x38    0x2a            L SHFT  QZ_LSHIFT | ||||
|     58, //  57      0x39    0x3a            CAPS    QZ_CAPSLOCK | ||||
|     56, //  58      0x3A    0x38            L ALT   QZ_LALT | ||||
|     29, //  59      0x3B    0x1d            L CTRL  QZ_LCTRL | ||||
|     54, //  60      0x3C    0x36            R SHFT  QZ_RSHIFT | ||||
|     184,//  61      0x3D    0xb8    E0,38   R ALT   QZ_RALT | ||||
|     157,//  62      0x3E    0x9d    E0,1D   R CTRL  QZ_RCTRL | ||||
|     0,  //  63      0x3F    Undefined | ||||
|     0,  //  64      0x40    Undefined | ||||
|     0,  //  65      0x41    Undefined | ||||
|     0,  //  66      0x42    Undefined | ||||
|     55, //  67      0x43    0x37            KP *    QZ_KP_MULTIPLY | ||||
|     0,  //  68      0x44    Undefined | ||||
|     78, //  69      0x45    0x4e            KP +    QZ_KP_PLUS | ||||
|     0,  //  70      0x46    Undefined | ||||
|     69, //  71      0x47    0x45            NUM     QZ_NUMLOCK | ||||
|     0,  //  72      0x48    Undefined | ||||
|     0,  //  73      0x49    Undefined | ||||
|     0,  //  74      0x4A    Undefined | ||||
|     181,//  75      0x4B    0xb5    E0,35   KP /    QZ_KP_DIVIDE | ||||
|     152,//  76      0x4C    0x9c    E0,1C   KP EN   QZ_KP_ENTER | ||||
|     0,  //  77      0x4D    undefined | ||||
|     74, //  78      0x4E    0x4a            KP -    QZ_KP_MINUS | ||||
|     0,  //  79      0x4F    Undefined | ||||
|     0,  //  80      0x50    Undefined | ||||
|     0,  //  81      0x51                            QZ_KP_EQUALS | ||||
|     82, //  82      0x52    0x52            KP 0    QZ_KP0 | ||||
|     79, //  83      0x53    0x4f            KP 1    QZ_KP1 | ||||
|     80, //  84      0x54    0x50            KP 2    QZ_KP2 | ||||
|     81, //  85      0x55    0x51            KP 3    QZ_KP3 | ||||
|     75, //  86      0x56    0x4b            KP 4    QZ_KP4 | ||||
|     76, //  87      0x57    0x4c            KP 5    QZ_KP5 | ||||
|     77, //  88      0x58    0x4d            KP 6    QZ_KP6 | ||||
|     71, //  89      0x59    0x47            KP 7    QZ_KP7 | ||||
|     0,  //  90      0x5A    Undefined | ||||
|     72, //  91      0x5B    0x48            KP 8    QZ_KP8 | ||||
|     73, //  92      0x5C    0x49            KP 9    QZ_KP9 | ||||
|     0,  //  93      0x5D    Undefined | ||||
|     0,  //  94      0x5E    Undefined | ||||
|     0,  //  95      0x5F    Undefined | ||||
|     63, //  96      0x60    0x3f            F5      QZ_F5 | ||||
|     64, //  97      0x61    0x40            F6      QZ_F6 | ||||
|     65, //  98      0x62    0x41            F7      QZ_F7 | ||||
|     61, //  99      0x63    0x3d            F3      QZ_F3 | ||||
|     66, //  100     0x64    0x42            F8      QZ_F8 | ||||
|     67, //  101     0x65    0x43            F9      QZ_F9 | ||||
|     0,  //  102     0x66    Undefined | ||||
|     87, //  103     0x67    0x57            F11     QZ_F11 | ||||
|     0,  //  104     0x68    Undefined | ||||
|     183,//  105     0x69    0xb7                    QZ_PRINT | ||||
|     0,  //  106     0x6A    Undefined | ||||
|     70, //  107     0x6B    0x46            SCROLL  QZ_SCROLLOCK | ||||
|     0,  //  108     0x6C    Undefined | ||||
|     68, //  109     0x6D    0x44            F10     QZ_F10 | ||||
|     0,  //  110     0x6E    Undefined | ||||
|     88, //  111     0x6F    0x58            F12     QZ_F12 | ||||
|     0,  //  112     0x70    Undefined | ||||
|     110,//  113     0x71    0x0                     QZ_PAUSE | ||||
|     210,//  114     0x72    0xd2    E0,52   INSERT  QZ_INSERT | ||||
|     199,//  115     0x73    0xc7    E0,47   HOME    QZ_HOME | ||||
|     201,//  116     0x74    0xc9    E0,49   PG UP   QZ_PAGEUP | ||||
|     211,//  117     0x75    0xd3    E0,53   DELETE  QZ_DELETE | ||||
|     62, //  118     0x76    0x3e            F4      QZ_F4 | ||||
|     207,//  119     0x77    0xcf    E0,4f   END     QZ_END | ||||
|     60, //  120     0x78    0x3c            F2      QZ_F2 | ||||
|     209,//  121     0x79    0xd1    E0,51   PG DN   QZ_PAGEDOWN | ||||
|     59, //  122     0x7A    0x3b            F1      QZ_F1 | ||||
|     203,//  123     0x7B    0xcb    e0,4B   L ARROW QZ_LEFT | ||||
|     205,//  124     0x7C    0xcd    e0,4D   R ARROW QZ_RIGHT | ||||
|     208,//  125     0x7D    0xd0    E0,50   D ARROW QZ_DOWN | ||||
|     200,//  126     0x7E    0xc8    E0,48   U ARROW QZ_UP | ||||
| /* completed according to http://www.libsdl.org/cgi/cvsweb.cgi/SDL12/src/video/quartz/SDL_QuartzKeys.h?rev=1.6&content-type=text/x-cvsweb-markup */ | ||||
| // Mac to QKeyCode conversion | ||||
| const int mac_to_qkeycode_map[] = { | ||||
|     [kVK_ANSI_A] = Q_KEY_CODE_A, | ||||
|     [kVK_ANSI_B] = Q_KEY_CODE_B, | ||||
|     [kVK_ANSI_C] = Q_KEY_CODE_C, | ||||
|     [kVK_ANSI_D] = Q_KEY_CODE_D, | ||||
|     [kVK_ANSI_E] = Q_KEY_CODE_E, | ||||
|     [kVK_ANSI_F] = Q_KEY_CODE_F, | ||||
|     [kVK_ANSI_G] = Q_KEY_CODE_G, | ||||
|     [kVK_ANSI_H] = Q_KEY_CODE_H, | ||||
|     [kVK_ANSI_I] = Q_KEY_CODE_I, | ||||
|     [kVK_ANSI_J] = Q_KEY_CODE_J, | ||||
|     [kVK_ANSI_K] = Q_KEY_CODE_K, | ||||
|     [kVK_ANSI_L] = Q_KEY_CODE_L, | ||||
|     [kVK_ANSI_M] = Q_KEY_CODE_M, | ||||
|     [kVK_ANSI_N] = Q_KEY_CODE_N, | ||||
|     [kVK_ANSI_O] = Q_KEY_CODE_O, | ||||
|     [kVK_ANSI_P] = Q_KEY_CODE_P, | ||||
|     [kVK_ANSI_Q] = Q_KEY_CODE_Q, | ||||
|     [kVK_ANSI_R] = Q_KEY_CODE_R, | ||||
|     [kVK_ANSI_S] = Q_KEY_CODE_S, | ||||
|     [kVK_ANSI_T] = Q_KEY_CODE_T, | ||||
|     [kVK_ANSI_U] = Q_KEY_CODE_U, | ||||
|     [kVK_ANSI_V] = Q_KEY_CODE_V, | ||||
|     [kVK_ANSI_W] = Q_KEY_CODE_W, | ||||
|     [kVK_ANSI_X] = Q_KEY_CODE_X, | ||||
|     [kVK_ANSI_Y] = Q_KEY_CODE_Y, | ||||
|     [kVK_ANSI_Z] = Q_KEY_CODE_Z, | ||||
| 
 | ||||
| /* Additional 104 Key XP-Keyboard Scancodes from http://www.computer-engineering.org/ps2keyboard/scancodes1.html */ | ||||
| /* | ||||
|     221 //          0xdd            e0,5d   APPS | ||||
|         //              E0,2A,E0,37         PRNT SCRN | ||||
|         //              E1,1D,45,E1,9D,C5   PAUSE | ||||
|     83  //          0x53    0x53            KP . | ||||
| // ACPI Scan Codes | ||||
|     222 //          0xde            E0, 5E  Power | ||||
|     223 //          0xdf            E0, 5F  Sleep | ||||
|     227 //          0xe3            E0, 63  Wake | ||||
| // Windows Multimedia Scan Codes | ||||
|     153 //          0x99            E0, 19  Next Track | ||||
|     144 //          0x90            E0, 10  Previous Track | ||||
|     164 //          0xa4            E0, 24  Stop | ||||
|     162 //          0xa2            E0, 22  Play/Pause | ||||
|     160 //          0xa0            E0, 20  Mute | ||||
|     176 //          0xb0            E0, 30  Volume Up | ||||
|     174 //          0xae            E0, 2E  Volume Down | ||||
|     237 //          0xed            E0, 6D  Media Select | ||||
|     236 //          0xec            E0, 6C  E-Mail | ||||
|     161 //          0xa1            E0, 21  Calculator | ||||
|     235 //          0xeb            E0, 6B  My Computer | ||||
|     229 //          0xe5            E0, 65  WWW Search | ||||
|     178 //          0xb2            E0, 32  WWW Home | ||||
|     234 //          0xea            E0, 6A  WWW Back | ||||
|     233 //          0xe9            E0, 69  WWW Forward | ||||
|     232 //          0xe8            E0, 68  WWW Stop | ||||
|     231 //          0xe7            E0, 67  WWW Refresh | ||||
|     230 //          0xe6            E0, 66  WWW Favorites | ||||
| */ | ||||
|     [kVK_ANSI_0] = Q_KEY_CODE_0, | ||||
|     [kVK_ANSI_1] = Q_KEY_CODE_1, | ||||
|     [kVK_ANSI_2] = Q_KEY_CODE_2, | ||||
|     [kVK_ANSI_3] = Q_KEY_CODE_3, | ||||
|     [kVK_ANSI_4] = Q_KEY_CODE_4, | ||||
|     [kVK_ANSI_5] = Q_KEY_CODE_5, | ||||
|     [kVK_ANSI_6] = Q_KEY_CODE_6, | ||||
|     [kVK_ANSI_7] = Q_KEY_CODE_7, | ||||
|     [kVK_ANSI_8] = Q_KEY_CODE_8, | ||||
|     [kVK_ANSI_9] = Q_KEY_CODE_9, | ||||
| 
 | ||||
|     [kVK_ANSI_Grave] = Q_KEY_CODE_GRAVE_ACCENT, | ||||
|     [kVK_ANSI_Minus] = Q_KEY_CODE_MINUS, | ||||
|     [kVK_ANSI_Equal] = Q_KEY_CODE_EQUAL, | ||||
|     [kVK_Delete] = Q_KEY_CODE_BACKSPACE, | ||||
|     [kVK_CapsLock] = Q_KEY_CODE_CAPS_LOCK, | ||||
|     [kVK_Tab] = Q_KEY_CODE_TAB, | ||||
|     [kVK_Return] = Q_KEY_CODE_RET, | ||||
|     [kVK_ANSI_LeftBracket] = Q_KEY_CODE_BRACKET_LEFT, | ||||
|     [kVK_ANSI_RightBracket] = Q_KEY_CODE_BRACKET_RIGHT, | ||||
|     [kVK_ANSI_Backslash] = Q_KEY_CODE_BACKSLASH, | ||||
|     [kVK_ANSI_Semicolon] = Q_KEY_CODE_SEMICOLON, | ||||
|     [kVK_ANSI_Quote] = Q_KEY_CODE_APOSTROPHE, | ||||
|     [kVK_ANSI_Comma] = Q_KEY_CODE_COMMA, | ||||
|     [kVK_ANSI_Period] = Q_KEY_CODE_DOT, | ||||
|     [kVK_ANSI_Slash] = Q_KEY_CODE_SLASH, | ||||
|     [kVK_Shift] = Q_KEY_CODE_SHIFT, | ||||
|     [kVK_RightShift] = Q_KEY_CODE_SHIFT_R, | ||||
|     [kVK_Control] = Q_KEY_CODE_CTRL, | ||||
|     [kVK_RightControl] = Q_KEY_CODE_CTRL_R, | ||||
|     [kVK_Option] = Q_KEY_CODE_ALT, | ||||
|     [kVK_RightOption] = Q_KEY_CODE_ALT_R, | ||||
|     [kVK_Command] = Q_KEY_CODE_META_L, | ||||
|     [0x36] = Q_KEY_CODE_META_R, /* There is no kVK_RightCommand */ | ||||
|     [kVK_Space] = Q_KEY_CODE_SPC, | ||||
| 
 | ||||
|     [kVK_ANSI_Keypad0] = Q_KEY_CODE_KP_0, | ||||
|     [kVK_ANSI_Keypad1] = Q_KEY_CODE_KP_1, | ||||
|     [kVK_ANSI_Keypad2] = Q_KEY_CODE_KP_2, | ||||
|     [kVK_ANSI_Keypad3] = Q_KEY_CODE_KP_3, | ||||
|     [kVK_ANSI_Keypad4] = Q_KEY_CODE_KP_4, | ||||
|     [kVK_ANSI_Keypad5] = Q_KEY_CODE_KP_5, | ||||
|     [kVK_ANSI_Keypad6] = Q_KEY_CODE_KP_6, | ||||
|     [kVK_ANSI_Keypad7] = Q_KEY_CODE_KP_7, | ||||
|     [kVK_ANSI_Keypad8] = Q_KEY_CODE_KP_8, | ||||
|     [kVK_ANSI_Keypad9] = Q_KEY_CODE_KP_9, | ||||
|     [kVK_ANSI_KeypadDecimal] = Q_KEY_CODE_KP_DECIMAL, | ||||
|     [kVK_ANSI_KeypadEnter] = Q_KEY_CODE_KP_ENTER, | ||||
|     [kVK_ANSI_KeypadPlus] = Q_KEY_CODE_KP_ADD, | ||||
|     [kVK_ANSI_KeypadMinus] = Q_KEY_CODE_KP_SUBTRACT, | ||||
|     [kVK_ANSI_KeypadMultiply] = Q_KEY_CODE_KP_MULTIPLY, | ||||
|     [kVK_ANSI_KeypadDivide] = Q_KEY_CODE_KP_DIVIDE, | ||||
|     [kVK_ANSI_KeypadEquals] = Q_KEY_CODE_KP_EQUALS, | ||||
|     [kVK_ANSI_KeypadClear] = Q_KEY_CODE_NUM_LOCK, | ||||
| 
 | ||||
|     [kVK_UpArrow] = Q_KEY_CODE_UP, | ||||
|     [kVK_DownArrow] = Q_KEY_CODE_DOWN, | ||||
|     [kVK_LeftArrow] = Q_KEY_CODE_LEFT, | ||||
|     [kVK_RightArrow] = Q_KEY_CODE_RIGHT, | ||||
| 
 | ||||
|     [kVK_Help] = Q_KEY_CODE_INSERT, | ||||
|     [kVK_Home] = Q_KEY_CODE_HOME, | ||||
|     [kVK_PageUp] = Q_KEY_CODE_PGUP, | ||||
|     [kVK_PageDown] = Q_KEY_CODE_PGDN, | ||||
|     [kVK_End] = Q_KEY_CODE_END, | ||||
|     [kVK_ForwardDelete] = Q_KEY_CODE_DELETE, | ||||
| 
 | ||||
|     [kVK_Escape] = Q_KEY_CODE_ESC, | ||||
| 
 | ||||
|     /* The Power key can't be used directly because the operating system uses | ||||
|      * it. This key can be emulated by using it in place of another key such as | ||||
|      * F1. Don't forget to disable the real key binding. | ||||
|      */ | ||||
|     /* [kVK_F1] = Q_KEY_CODE_POWER, */ | ||||
| 
 | ||||
|     [kVK_F1] = Q_KEY_CODE_F1, | ||||
|     [kVK_F2] = Q_KEY_CODE_F2, | ||||
|     [kVK_F3] = Q_KEY_CODE_F3, | ||||
|     [kVK_F4] = Q_KEY_CODE_F4, | ||||
|     [kVK_F5] = Q_KEY_CODE_F5, | ||||
|     [kVK_F6] = Q_KEY_CODE_F6, | ||||
|     [kVK_F7] = Q_KEY_CODE_F7, | ||||
|     [kVK_F8] = Q_KEY_CODE_F8, | ||||
|     [kVK_F9] = Q_KEY_CODE_F9, | ||||
|     [kVK_F10] = Q_KEY_CODE_F10, | ||||
|     [kVK_F11] = Q_KEY_CODE_F11, | ||||
|     [kVK_F12] = Q_KEY_CODE_F12, | ||||
|     [kVK_F13] = Q_KEY_CODE_PRINT, | ||||
|     [kVK_F14] = Q_KEY_CODE_SCROLL_LOCK, | ||||
|     [kVK_F15] = Q_KEY_CODE_PAUSE, | ||||
| 
 | ||||
|     /* | ||||
|      * The eject and volume keys can't be used here because they are handled at | ||||
|      * a lower level than what an Application can see. | ||||
|      */ | ||||
| }; | ||||
| 
 | ||||
| static int cocoa_keycode_to_qemu(int keycode) | ||||
| { | ||||
|     if (ARRAY_SIZE(keymap) <= keycode) { | ||||
|     if (ARRAY_SIZE(mac_to_qkeycode_map) <= keycode) { | ||||
|         fprintf(stderr, "(cocoa) warning unknown keycode 0x%x\n", keycode); | ||||
|         return 0; | ||||
|     } | ||||
|     return keymap[keycode]; | ||||
|     return mac_to_qkeycode_map[keycode]; | ||||
| } | ||||
| 
 | ||||
| /* Displays an alert dialog box with the specified message */ | ||||
| @ -557,21 +519,24 @@ QemuCocoaView *cocoaView; | ||||
|         case NSFlagsChanged: | ||||
|             keycode = cocoa_keycode_to_qemu([event keyCode]); | ||||
| 
 | ||||
|             if ((keycode == 219 || keycode == 220) && !isMouseGrabbed) { | ||||
|             if ((keycode == Q_KEY_CODE_META_L || keycode == Q_KEY_CODE_META_R) | ||||
|                && !isMouseGrabbed) { | ||||
|               /* Don't pass command key changes to guest unless mouse is grabbed */ | ||||
|               keycode = 0; | ||||
|             } | ||||
| 
 | ||||
|             if (keycode) { | ||||
|                 if (keycode == 58 || keycode == 69) { // emulate caps lock and num lock keydown and keyup | ||||
|                     qemu_input_event_send_key_number(dcl->con, keycode, true); | ||||
|                     qemu_input_event_send_key_number(dcl->con, keycode, false); | ||||
|                 // emulate caps lock and num lock keydown and keyup | ||||
|                 if (keycode == Q_KEY_CODE_CAPS_LOCK || | ||||
|                     keycode == Q_KEY_CODE_NUM_LOCK) { | ||||
|                     qemu_input_event_send_key_qcode(dcl->con, keycode, true); | ||||
|                     qemu_input_event_send_key_qcode(dcl->con, keycode, false); | ||||
|                 } else if (qemu_console_is_graphic(NULL)) { | ||||
|                     if (modifiers_state[keycode] == 0) { // keydown | ||||
|                         qemu_input_event_send_key_number(dcl->con, keycode, true); | ||||
|                         qemu_input_event_send_key_qcode(dcl->con, keycode, true); | ||||
|                         modifiers_state[keycode] = 1; | ||||
|                     } else { // keyup | ||||
|                         qemu_input_event_send_key_number(dcl->con, keycode, false); | ||||
|                         qemu_input_event_send_key_qcode(dcl->con, keycode, false); | ||||
|                         modifiers_state[keycode] = 0; | ||||
|                     } | ||||
|                 } | ||||
| @ -598,14 +563,14 @@ QemuCocoaView *cocoaView; | ||||
|                 switch (keycode) { | ||||
| 
 | ||||
|                     // enable graphic console | ||||
|                     case 0x02 ... 0x0a: // '1' to '9' keys | ||||
|                         console_select(keycode - 0x02); | ||||
|                     case Q_KEY_CODE_1 ... Q_KEY_CODE_9: // '1' to '9' keys | ||||
|                         console_select(keycode - 11); | ||||
|                         break; | ||||
|                 } | ||||
| 
 | ||||
|             // handle keys for graphic console | ||||
|             } else if (qemu_console_is_graphic(NULL)) { | ||||
|                 qemu_input_event_send_key_number(dcl->con, keycode, true); | ||||
|                 qemu_input_event_send_key_qcode(dcl->con, keycode, true); | ||||
| 
 | ||||
|             // handlekeys for Monitor | ||||
|             } else { | ||||
| @ -653,7 +618,7 @@ QemuCocoaView *cocoaView; | ||||
|             } | ||||
| 
 | ||||
|             if (qemu_console_is_graphic(NULL)) { | ||||
|                 qemu_input_event_send_key_number(dcl->con, keycode, false); | ||||
|                 qemu_input_event_send_key_qcode(dcl->con, keycode, false); | ||||
|             } | ||||
|             break; | ||||
|         case NSMouseMoved: | ||||
| @ -823,7 +788,7 @@ QemuCocoaView *cocoaView; | ||||
|    for (index = 0; index < max_index; index++) { | ||||
|        if (modifiers_state[index]) { | ||||
|            modifiers_state[index] = 0; | ||||
|            qemu_input_event_send_key_number(dcl->con, index, false); | ||||
|            qemu_input_event_send_key_qcode(dcl->con, index, false); | ||||
|        } | ||||
|    } | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 John Arbuckle
						John Arbuckle