summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichelle Legrand <michelle.legrand@openwide.fr>2015-01-22 11:24:42 +0100
committerCedric BAIL <cedric@osg.samsung.com>2015-02-05 16:38:07 +0100
commit1d18543719a98f9b4e99638c4d8f2e67720b84a2 (patch)
treeb973634a536d61bdac22eca013aeeddbc257edec
parent8c56edbdf5311295a9ef3254d20d413389756425 (diff)
downloadefl-1d18543719a98f9b4e99638c4d8f2e67720b84a2.tar.gz
ecore_cocoa: handle more special characters and capital characters.
This patch is self contained for Mac OS X and improve its keyboard handling. Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
-rw-r--r--src/lib/ecore_cocoa/Ecore_Cocoa_Keys.h81
-rw-r--r--src/lib/ecore_cocoa/ecore_cocoa.m68
2 files changed, 96 insertions, 53 deletions
diff --git a/src/lib/ecore_cocoa/Ecore_Cocoa_Keys.h b/src/lib/ecore_cocoa/Ecore_Cocoa_Keys.h
index 53b17ed23f..69a487248f 100644
--- a/src/lib/ecore_cocoa/Ecore_Cocoa_Keys.h
+++ b/src/lib/ecore_cocoa/Ecore_Cocoa_Keys.h
@@ -26,7 +26,7 @@ static const struct _ecore_cocoa_keys_s keystable[] =
{ 34, "quotedbl", "\"" },
{ 35, "numbersign", "#" },
{ 36, "dollar", "$" },
-{ 37, "percent", "%%" },
+{ 37, "percent", "%" },
{ 38, "ampersand", "&" },
{ 39, "apostrophe", "'" },
{ 40, "parenleft", "(" },
@@ -47,14 +47,39 @@ static const struct _ecore_cocoa_keys_s keystable[] =
{ 55, "7", "7" },
{ 56, "8", "8" },
{ 57, "9", "9" },
-{ 58, "colon", ";" },
+{ 58, "colon", ":" },
{ 59, "semicolon", ";" },
{ 60, "less", "<" },
{ 61, "equal", "=" },
{ 62, "greater", ">" },
{ 63, "question", "?" },
{ 64, "at", "@" },
-
+{ 65, "A", "A" },
+{ 66, "B", "B" },
+{ 67, "C", "C" },
+{ 68, "D", "D" },
+{ 69, "E", "E" },
+{ 70, "F", "F" },
+{ 71, "G", "G" },
+{ 72, "H", "H" },
+{ 73, "I", "I" },
+{ 74, "J", "J" },
+{ 75, "K", "K" },
+{ 76, "L", "L" },
+{ 77, "M", "M" },
+{ 78, "N", "N" },
+{ 79, "O", "O" },
+{ 80, "P", "P" },
+{ 81, "Q", "Q" },
+{ 82, "R", "R" },
+{ 83, "S", "S" },
+{ 84, "T", "T" },
+{ 85, "U", "U" },
+{ 86, "V", "V" },
+{ 87, "W", "W" },
+{ 88, "X", "X" },
+{ 89, "Y", "Y" },
+{ 90, "Z", "Z" },
{ 91, "bracketleft", "[" },
{ 92, "backslash", "\\" },
{ 93, "bracketright", "]" },
@@ -87,9 +112,9 @@ static const struct _ecore_cocoa_keys_s keystable[] =
{ 120, "x", "x" },
{ 121, "y", "y" },
{ 122, "z", "z" },
-{ 123, "braceleft", "" },
-{ 124, "pipe", "" },
-{ 125, "braceright", "" },
+{ 123, "braceleft", "{" },
+{ 124, "pipe", "|" },
+{ 125, "braceright", "}" },
{ 127, "BackSpace", "\177" },
{ 126, "asciitilde", "~" },
@@ -100,7 +125,7 @@ static const struct _ecore_cocoa_keys_s keystable[] =
{ 164, "w4", "" },
{ 165, "w5", "" },
{ 166, "w6", "" },
-{ 167, "w7", "" },
+{ 167, "w7", "§" },
{ 168, "w8", "" },
{ 169, "w9", "" },
{ 170, "w10", "" },
@@ -109,7 +134,7 @@ static const struct _ecore_cocoa_keys_s keystable[] =
{ 173, "w13", "" },
{ 174, "w14", "" },
{ 175, "w15", "" },
-{ 176, "w16", "" },
+{ 176, "w16", "°" },
{ 177, "w17", "" },
{ 178, "w18", "" },
{ 179, "w19", "" },
@@ -157,38 +182,38 @@ static const struct _ecore_cocoa_keys_s keystable[] =
{ 221, "w61", "" },
{ 222, "w62", "" },
{ 223, "w63", "" },
-{ 224, "w64", "" },
+{ 224, "w64", "à" },
{ 225, "w65", "" },
-{ 226, "w66", "" },
-{ 227, "w67", "" },
-{ 228, "w68", "" },
+{ 226, "w66", "â" },
+{ 227, "w67", "ã" },
+{ 228, "w68", "ä" },
{ 229, "w69", "" },
{ 230, "w70", "" },
-{ 231, "w71", "" },
-{ 232, "w72", "" },
-{ 233, "w73", "" },
-{ 234, "w74", "" },
-{ 235, "w75", "" },
-{ 236, "w76", "" },
+{ 231, "w71", "ç" },
+{ 232, "w72", "è" },
+{ 233, "w73", "é" },
+{ 234, "w74", "ê" },
+{ 235, "w75", "ë" },
+{ 236, "w76", "ì" },
{ 237, "w77", "" },
-{ 238, "w78", "" },
-{ 239, "w79", "" },
+{ 238, "w78", "î" },
+{ 239, "w79", "ï" },
{ 240, "w80", "" },
{ 241, "w81", "" },
-{ 242, "w82", "" },
+{ 242, "w82", "ò" },
{ 243, "w83", "" },
-{ 244, "w84", "" },
-{ 245, "w85", "" },
-{ 246, "w86", "" },
+{ 244, "w84", "ô" },
+{ 245, "w85", "õ" },
+{ 246, "w86", "ö"},
{ 247, "w87", "" },
{ 248, "w88", "" },
-{ 249, "w89", "" },
+{ 249, "w89", "ù" },
{ 250, "w90", "" },
-{ 251, "w91", "" },
-{ 252, "w92", "" },
+{ 251, "w91", "û" },
+{ 252, "w92", "ü" },
{ 253, "w93", "" },
{ 254, "w94", "" },
-{ 255, "w95", "" },
+{ 255, "w95", "ÿ" },
{ 256, "KP0", "0" },
{ 257, "KP1", "1" },
diff --git a/src/lib/ecore_cocoa/ecore_cocoa.m b/src/lib/ecore_cocoa/ecore_cocoa.m
index f02601bb5d..d57fd06482 100644
--- a/src/lib/ecore_cocoa/ecore_cocoa.m
+++ b/src/lib/ecore_cocoa/ecore_cocoa.m
@@ -106,6 +106,8 @@ ecore_cocoa_feed_events(void *anEvent)
NSEvent *event = anEvent;
unsigned int time = (unsigned int)((unsigned long long)(ecore_time_get() * 1000.0) & 0xffffffff);
Eina_Bool pass = EINA_FALSE;
+ static Eina_Bool compose = EINA_FALSE;
+ static NSText *edit;
switch ([event type])
{
@@ -243,25 +245,38 @@ ecore_cocoa_feed_events(void *anEvent)
Ecore_Event_Key *ev;
unsigned int i;
EcoreCocoaWindow *window = (EcoreCocoaWindow *)[event window];
+ NSString *keychar = [event characters];
ev = calloc(1, sizeof (Ecore_Event_Key));
if (!ev) return pass;
ev->timestamp = time;
ev->modifiers = _ecore_cocoa_event_modifiers([event modifierFlags]);
- 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 = (Ecore_Window)window.ecore_window_data;
- ev->event_window = ev->window;
- ecore_event_add(ECORE_EVENT_KEY_DOWN, ev, NULL, NULL);
- return pass;
- }
+ if (compose)
+ {
+ [edit interpretKeyEvents:[NSArray arrayWithObject:event]];
+ compose=EINA_FALSE;
+ }
+
+ if ([keychar length] > 0){
+ for (i = 0; i < sizeof (keystable) / sizeof (struct _ecore_cocoa_keys_s); ++i)
+ {
+ if (keystable[i].code == [keychar 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 = (Ecore_Window)window.ecore_window_data;
+ ev->event_window = ev->window;
+ ecore_event_add(ECORE_EVENT_KEY_DOWN, ev, NULL, NULL);
+ return pass;
+ }
+ }
+ }else{
+ compose=EINA_TRUE;
+ edit = [[event window] fieldEditor:YES forObject:nil];
+ [edit interpretKeyEvents:[NSArray arrayWithObject:event]];
}
break;
@@ -271,6 +286,7 @@ ecore_cocoa_feed_events(void *anEvent)
Ecore_Event_Key *ev;
unsigned int i;
EcoreCocoaWindow *window = (EcoreCocoaWindow *)[event window];
+ NSString *keychar = [event characters];
printf("Key Up\n");
@@ -279,18 +295,20 @@ ecore_cocoa_feed_events(void *anEvent)
ev->timestamp = time;
ev->modifiers = _ecore_cocoa_event_modifiers([event modifierFlags]);
- 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 = (Ecore_Window)window.ecore_window_data;
- ev->event_window = ev->window;
- ecore_event_add(ECORE_EVENT_KEY_UP, ev, NULL, NULL);
- return pass;
- }
+ if ([keychar length] > 0){
+ for (i = 0; i < sizeof (keystable) / sizeof (struct _ecore_cocoa_keys_s); ++i)
+ {
+ if (keystable[i].code == tolower([keychar characterAtIndex:0]))
+ {
+ ev->keyname = keystable[i].name;
+ ev->key = keystable[i].name;
+ ev->string = keystable[i].compose;
+ ev->window = (Ecore_Window)window.ecore_window_data;
+ ev->event_window = ev->window;
+ ecore_event_add(ECORE_EVENT_KEY_UP, ev, NULL, NULL);
+ return pass;
+ }
+ }
}
break;