diff --git clutter/osx/clutter-event-osx.c clutter/osx/clutter-event-osx.c
index 65876ed..1f329b4 100644
|
|
|
115 | 115 | * to 'unicode_value' Instead of <Shift>a or <Shift>3 you'd get <Shift>A |
116 | 116 | * and <Shift># |
117 | 117 | */ |
| 118 | |
| 119 | if([self type] == NSFlagsChanged) |
| 120 | { |
| 121 | switch ([self keyCode]) { |
| 122 | case 54: // Right Command |
| 123 | return CLUTTER_KEY_Meta_R; |
| 124 | case 55: // Left Command |
| 125 | return CLUTTER_KEY_Meta_L; |
| 126 | case 57: // Capslock |
| 127 | return CLUTTER_KEY_Caps_Lock; |
| 128 | case 56: // Left Shift |
| 129 | return CLUTTER_KEY_Shift_L; |
| 130 | case 60: // Right Shift |
| 131 | return CLUTTER_KEY_Shift_R; |
| 132 | case 58: // Left Alt |
| 133 | return CLUTTER_KEY_Alt_L; |
| 134 | case 61: // Right Alt |
| 135 | return CLUTTER_KEY_Alt_R; |
| 136 | case 59: // Left Ctrl |
| 137 | return CLUTTER_KEY_Control_L; |
| 138 | case 62: // Right Ctrl |
| 139 | return CLUTTER_KEY_Control_R; |
| 140 | case 63: // Function |
| 141 | return CLUTTER_KEY_function; |
| 142 | } |
| 143 | return CLUTTER_KEY_VoidSymbol; |
| 144 | } |
| 145 | |
118 | 146 | unichar c = [[self charactersIgnoringModifiers] characterAtIndex:0]; |
119 | 147 | |
120 | 148 | /* Latin-1 characters, 1:1 mapping - this ought to be reliable */ |
… |
… |
clutter_event_osx_translate (NSEvent *nsevent, |
366 | 394 | process_scroll_event (event, FALSE); |
367 | 395 | break; |
368 | 396 | |
| 397 | case NSFlagsChanged: |
| 398 | // FIXME: This logic fails if the user presses both Shift keys at once, for example: |
| 399 | // we treat releasing one of them as keyDown. |
| 400 | switch ([nsevent keyCode]) { |
| 401 | case 54: // Right Command |
| 402 | case 55: // Left Command |
| 403 | if([nsevent modifierFlags] & NSCommandKeyMask) event->type = CLUTTER_KEY_PRESS; |
| 404 | break; |
| 405 | |
| 406 | case 57: // Capslock |
| 407 | if([nsevent modifierFlags] & NSAlphaShiftKeyMask) event->type = CLUTTER_KEY_PRESS; |
| 408 | break; |
| 409 | |
| 410 | case 56: // Left Shift |
| 411 | case 60: // Right Shift |
| 412 | if([nsevent modifierFlags] & NSShiftKeyMask) event->type = CLUTTER_KEY_PRESS; |
| 413 | break; |
| 414 | |
| 415 | case 58: // Left Alt |
| 416 | case 61: // Right Alt |
| 417 | if([nsevent modifierFlags] & NSAlternateKeyMask) event->type = CLUTTER_KEY_PRESS; |
| 418 | break; |
| 419 | |
| 420 | case 59: // Left Ctrl |
| 421 | case 62: // Right Ctrl |
| 422 | if([nsevent modifierFlags] & NSControlKeyMask) event->type = CLUTTER_KEY_PRESS; |
| 423 | break; |
| 424 | |
| 425 | case 63: // Function |
| 426 | if([nsevent modifierFlags] & NSFunctionKeyMask) event->type = CLUTTER_KEY_PRESS; |
| 427 | break; |
| 428 | } |
| 429 | /* fall through */ |
369 | 430 | case NSKeyDown: |
370 | | event->type = CLUTTER_KEY_PRESS; |
| 431 | if([nsevent type] == NSKeyDown) event->type = CLUTTER_KEY_PRESS; |
371 | 432 | /* fall through */ |
372 | 433 | case NSKeyUp: |
373 | 434 | if (event->type != CLUTTER_KEY_PRESS) |
… |
… |
clutter_event_osx_translate (NSEvent *nsevent, |
376 | 437 | event->key.hardware_keycode = [nsevent keyCode]; |
377 | 438 | event->key.modifier_state = [nsevent clutterModifierState]; |
378 | 439 | event->key.keyval = [nsevent clutterKeyVal]; |
379 | | event->key.unicode_value = [[nsevent characters] characterAtIndex:0]; |
| 440 | event->key.unicode_value = [nsevent type] == NSFlagsChanged ? (gunichar)'\0' : [[nsevent characters] characterAtIndex:0]; |
380 | 441 | clutter_event_set_device (event, manager_osx->core_keyboard); |
381 | 442 | |
382 | 443 | CLUTTER_NOTE (EVENT, "key %d (%s) (%s) %s, keyval %d", |
383 | 444 | [nsevent keyCode], |
384 | | [[nsevent characters] UTF8String], |
385 | | [[nsevent charactersIgnoringModifiers] UTF8String], |
| 445 | [nsevent type] == NSFlagsChanged ? "NULL" : [[nsevent characters] UTF8String], |
| 446 | [nsevent type] == NSFlagsChanged ? "NULL" : [[nsevent charactersIgnoringModifiers] UTF8String], |
386 | 447 | event->type == CLUTTER_KEY_PRESS ? "press" : "release", |
387 | 448 | event->key.keyval); |
388 | 449 | return TRUE; |