summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Aguirre <aguirre.nicolas@gmail.com>2014-01-11 10:17:04 +0100
committerCedric BAIL <c.bail@partner.samsung.com>2014-06-18 11:34:06 +0200
commite4538b94d1a8ed7983c39e44e30df47f8536915c (patch)
tree1b0674aea5fc6facf5d2f17687dff95f1ba09540
parent795f97e22a30f62d5b3792c79e2f89d66d0804b9 (diff)
downloadefl-e4538b94d1a8ed7983c39e44e30df47f8536915c.tar.gz
ecore_cocoa: fix button order.
-rw-r--r--src/lib/ecore_cocoa/ecore_cocoa.m176
1 files changed, 94 insertions, 82 deletions
diff --git a/src/lib/ecore_cocoa/ecore_cocoa.m b/src/lib/ecore_cocoa/ecore_cocoa.m
index 2cc5b73bbf..59bc02814b 100644
--- a/src/lib/ecore_cocoa/ecore_cocoa.m
+++ b/src/lib/ecore_cocoa/ecore_cocoa.m
@@ -23,6 +23,54 @@ static int _ecore_cocoa_init_count = 0;
static int old_flags;
+static unsigned int
+_ecore_cocoa_event_modifiers(int mod)
+{
+ unsigned int modifiers = 0;
+
+ if(mod & NSShiftKeyMask) modifiers |= ECORE_EVENT_MODIFIER_SHIFT;
+ if(mod & NSControlKeyMask) modifiers |= ECORE_EVENT_MODIFIER_CTRL;
+ if(mod & NSAlternateKeyMask) modifiers |= ECORE_EVENT_MODIFIER_ALT;
+ if(mod & NSAlphaShiftKeyMask) modifiers |= ECORE_EVENT_LOCK_CAPS;
+
+ return modifiers;
+}
+
+static Ecore_Event_Key*
+_ecore_cocoa_event_key(NSEvent *nsevent, double timestamp)
+{
+ Ecore_Event_Key *ev;
+ unsigned int i;
+ int flags = [nsevent modifierFlags];
+
+ ev = malloc(sizeof(Ecore_Event_Key));
+ if (!ev) return NULL;
+
+ ev->timestamp = timestamp;
+ ev->window = 0;
+ ev->event_window = 0;
+ ev->modifiers = _ecore_cocoa_event_modifiers(flags);
+ ev->key = NULL;
+ ev->compose = NULL;
+
+ printf("key code : %d\n", [[nsevent charactersIgnoringModifiers] characterAtIndex:0]);
+
+ for (i = 0; i < EINA_C_ARRAY_LENGTH(keystable); ++i)
+ if (keystable[i].code == [[nsevent charactersIgnoringModifiers] characterAtIndex:0])
+ {
+ printf("keycode : %d key pressed : %s\n", keystable[i].code, keystable[i].name);
+ ev->keyname = keystable[i].name;
+ ev->key = ev->keyname;
+ ev->string = keystable[i].compose;
+
+ return ev;
+ }
+ free(ev);
+ return NULL;
+}
+
+
+
EAPI int
ecore_cocoa_init(void)
{
@@ -115,7 +163,17 @@ ecore_cocoa_feed_events(void)
ev->root.x = ev->x;
ev->root.y = ev->y;
ev->timestamp = time;
- ev->buttons = [event buttonNumber] + 1; // Apple indexes buttons from 0
+
+ if ([event buttonNumber] == 0)
+ ev->buttons = 1;
+ else if ([event buttonNumber] == 2)
+ ev->buttons = 2;
+ else
+ ev->buttons = 3;
+
+ printf("ev buttons : %d - %d\n", ev->buttons, [event buttonNumber]);
+ ev->window = window.ecore_window_data;
+ ev->event_window = ev->window;
if ([event clickCount] == 2)
ev->double_click = 1;
@@ -148,7 +206,16 @@ ecore_cocoa_feed_events(void)
ev->root.x = ev->x;
ev->root.y = ev->y;
ev->timestamp = time;
- ev->buttons = [event buttonNumber] + 1; // Apple indexes buttons from 0
+
+ if ([event buttonNumber] == 0)
+ ev->buttons = 1;
+ else if ([event buttonNumber] == 2)
+ ev->buttons = 2;
+ else
+ ev->buttons = 3;
+
+ ev->window = window.ecore_window_data;
+ ev->event_window = ev->window;
if ([event clickCount] == 2)
ev->double_click = 1;
@@ -168,115 +235,60 @@ ecore_cocoa_feed_events(void)
case NSKeyDown:
{
Ecore_Event_Key *ev;
- unsigned int i;
EcoreCocoaWindow *window = (EcoreCocoaWindow *)[event window];
- ev = calloc(1, sizeof (Ecore_Event_Key));
+ ev = _ecore_cocoa_event_key(event, time);
if (!ev) return;
- ev->timestamp = time;
- for (i = 0; i < sizeof (keystable) / sizeof (struct _ecore_cocoa_keys_s); ++i)
- {
- if (keystable[i].code == tolower([[event charactersIgnoringModifiers] characterAtIndex:0]))
- {
- printf("Key pressed : %s\n", keystable[i].name);
- ev->keyname = keystable[i].name;
- ev->key = keystable[i].name;
- ev->string = keystable[i].compose;
- ev->window = window.ecore_window_data;
- ev->event_window = ev->window;
- ecore_event_add(ECORE_EVENT_KEY_DOWN, ev, NULL, NULL);
- return;
- }
- }
+ ev->window = window.ecore_window_data;
+ ev->event_window = ev->window;
+ ecore_event_add(ECORE_EVENT_KEY_DOWN, ev, NULL, NULL);
break;
}
case NSKeyUp:
{
Ecore_Event_Key *ev;
- unsigned int i;
EcoreCocoaWindow *window = (EcoreCocoaWindow *)[event window];
- printf("Key Up\n");
-
- ev = calloc(1, sizeof (Ecore_Event_Key));
+ ev = _ecore_cocoa_event_key(event, time);
if (!ev) return;
- ev->timestamp = time;
- for (i = 0; i < sizeof (keystable) / sizeof (struct _ecore_cocoa_keys_s); ++i)
- {
- if (keystable[i].code == tolower([[event charactersIgnoringModifiers] characterAtIndex:0]))
- {
- ev->keyname = keystable[i].name;
- ev->key = keystable[i].name;
- ev->string = keystable[i].compose;
- ev->window = window.ecore_window_data;
- ev->event_window = ev->window;
- ecore_event_add(ECORE_EVENT_KEY_UP, ev, NULL, NULL);
- return;
- }
- }
+ ev->window = window.ecore_window_data;
+ ev->event_window = ev->window;
+ ecore_event_add(ECORE_EVENT_KEY_UP, ev, NULL, NULL);
break;
}
case NSFlagsChanged:
{
- int flags = [event modifierFlags];
- Ecore_Event_Key *evDown = NULL;
- Ecore_Event_Key *evUp = NULL;
-
- evDown = calloc(1, sizeof (Ecore_Event_Key));
- if (!evDown) return;
+ int flags = [event modifierFlags];
+ EcoreCocoaWindow *window = (EcoreCocoaWindow *)[event window];
+ Ecore_Event_Key *ev;
- evUp = calloc(1, sizeof (Ecore_Event_Key));
- if (!evUp)
- {
- free(evDown);
- return;
- }
+ ev = calloc(1, sizeof(Ecore_Event_Key));
+ if (!ev) return;
- // Turn special key flags on
if (flags & NSShiftKeyMask)
- evDown->keyname = "Shift_L";
+ ev->keyname = "Shift_L";
else if (flags & NSControlKeyMask)
- evDown->keyname = "Control_L";
+ ev->keyname = "Control_L";
else if (flags & NSAlternateKeyMask)
- evDown->keyname = "Alt_L";
+ ev->keyname = "Alt_L";
else if (flags & NSCommandKeyMask)
- evDown->keyname = "Super_L";
+ ev->keyname = "Super_L";
else if (flags & NSAlphaShiftKeyMask)
- evDown->keyname = "Caps_Lock";
-
- if (evDown->keyname)
- {
- evDown->timestamp = time;
- evDown->string = "";
- ecore_event_add(ECORE_EVENT_KEY_DOWN, evDown, NULL, NULL);
- old_flags = flags;
- break;
- }
+ ev->keyname = "Caps_Lock";
- int changed_flags = flags ^ old_flags;
-
- // Turn special key flags off
- if (changed_flags & NSShiftKeyMask)
- evUp->keyname = "Shift_L";
- else if (changed_flags & NSControlKeyMask)
- evUp->keyname = "Control_L";
- else if (changed_flags & NSAlternateKeyMask)
- evUp->keyname = "Alt_L";
- else if (changed_flags & NSCommandKeyMask)
- evUp->keyname = "Super_L";
- else if (changed_flags & NSAlphaShiftKeyMask)
- evUp->keyname = "Caps_Lock";
-
- if (evUp->keyname)
+ if (ev->keyname)
{
- evUp->timestamp = time;
- evUp->string = "";
- ecore_event_add(ECORE_EVENT_KEY_UP, evUp, NULL, NULL);
+ ev->key = ev->keyname;
+ ev->timestamp = time;
+ ev->string = "";
+ ev->modifiers = _ecore_cocoa_event_modifiers(flags);
+ printf("Flags changed keyup\n");
+ ecore_event_add(ECORE_EVENT_KEY_UP, ev, NULL, NULL);
old_flags = flags;
break;
}