diff options
Diffstat (limited to 'src/lib/ecore_cocoa/ecore_cocoa.m')
-rw-r--r-- | src/lib/ecore_cocoa/ecore_cocoa.m | 69 |
1 files changed, 42 insertions, 27 deletions
diff --git a/src/lib/ecore_cocoa/ecore_cocoa.m b/src/lib/ecore_cocoa/ecore_cocoa.m index 83a7e26876..d8ce7a6cf6 100644 --- a/src/lib/ecore_cocoa/ecore_cocoa.m +++ b/src/lib/ecore_cocoa/ecore_cocoa.m @@ -254,30 +254,41 @@ _ecore_cocoa_feed_events(void *anEvent) case NSEventTypeFlagsChanged: { NSUInteger flags = [event modifierFlags]; + EcoreCocoaWindow *window = (EcoreCocoaWindow *)[event window]; Ecore_Event_Key *evDown = NULL; Ecore_Event_Key *evUp = NULL; - - evDown = calloc(1, sizeof (Ecore_Event_Key)); - if (!evDown) return pass; + const char *key = NULL; + int keylen; // Turn special key flags on if (flags & NSEventModifierFlagShift) - evDown->key = "Shift_L"; + key = "Shift_L"; else if (flags & NSEventModifierFlagControl) - evDown->key = "Control_L"; + key = "Control_L"; else if (flags & NSEventModifierFlagOption) - evDown->key = "Alt_L"; + key = "Alt_L"; else if (flags & NSEventModifierFlagCommand) - evDown->key = "Super_L"; + key = "Super_L"; else if (flags & NSEventModifierFlagCapsLock) - evDown->key = "Caps_Lock"; + key = "Caps_Lock"; else if (flags & NSEventModifierFlagNumericPad) - evDown->key = "Num_Lock"; + key = "Num_Lock"; - if (evDown->key) + if (key) { - evDown->keyname = evDown->key; + keylen = strlen(key); + evDown = calloc(1, sizeof (Ecore_Event_Key) + (keylen * 2) + 2); + if (!evDown) return pass; + + evDown->keyname = (char *)(evDown + 1); + evDown->key = evDown->keyname + keylen + 1; + + strcpy((char *) evDown->keyname, key); + strcpy((char *) evDown->key, key); + + evDown->window = (Ecore_Window)window.ecore_window_data; + evDown->event_window = evDown->window; evDown->timestamp = time; evDown->string = NULL; ecore_event_add(ECORE_EVENT_KEY_DOWN, evDown, NULL, NULL); @@ -285,40 +296,44 @@ _ecore_cocoa_feed_events(void *anEvent) break; } - free(evDown); - - evUp = calloc(1, sizeof (Ecore_Event_Key)); - if (!evUp) - { - return pass; - } + key = NULL; NSUInteger changed_flags = flags ^ old_flags; // Turn special key flags off if (changed_flags & NSEventModifierFlagShift) - evUp->key = "Shift_L"; + key = "Shift_L"; else if (changed_flags & NSEventModifierFlagControl) - evUp->key = "Control_L"; + key = "Control_L"; else if (changed_flags & NSEventModifierFlagOption) - evUp->key = "Alt_L"; + key = "Alt_L"; else if (changed_flags & NSEventModifierFlagCommand) - evUp->key = "Super_L"; + key = "Super_L"; else if (changed_flags & NSEventModifierFlagCapsLock) - evUp->key = "Caps_Lock"; + key = "Caps_Lock"; else if (changed_flags & NSEventModifierFlagNumericPad) - evUp->key = "Num_Lock"; + key = "Num_Lock"; - if (evUp->key) + if (key) { - evUp->keyname = evUp->key; + keylen = strlen(key); + evUp = calloc(1, sizeof (Ecore_Event_Key) + (keylen * 2) + 2); + if (!evUp) return pass; + + evUp->keyname = (char *)(evUp + 1); + evUp->key = evUp->keyname + keylen + 1; + + strcpy((char *) evUp->keyname, key); + strcpy((char *) evUp->key, key); + + evUp->window = (Ecore_Window)window.ecore_window_data; + evUp->event_window = evUp->window; evUp->timestamp = time; evUp->string = NULL; ecore_event_add(ECORE_EVENT_KEY_UP, evUp, NULL, NULL); old_flags = flags; break; } - free(evUp); break; } |