summaryrefslogtreecommitdiff
path: root/src/lib/ecore_cocoa/ecore_cocoa.m
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/ecore_cocoa/ecore_cocoa.m')
-rw-r--r--src/lib/ecore_cocoa/ecore_cocoa.m69
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;
}