static void _ecore_win32_event_free_key_up(void *data,
void *ev);
-static int _ecore_win32_event_keystroke_get(int key,
- int is_extended,
- Eina_Bool is_down,
- char **keyname,
- char **keysymbol,
- char **keycompose);
+static int _ecore_win32_event_keystroke_get(int key,
+ int is_extended,
+ Eina_Bool is_down,
+ char **keyname,
+ char **keysymbol,
+ char **keycompose,
+ unsigned int *modifiers);
static int _ecore_win32_event_char_get(int key,
char **keyname,
if (is_keystroke)
{
- if (!_ecore_win32_event_keystroke_get(LOWORD(msg->window_param),
+ if (!_ecore_win32_event_keystroke_get(msg->window_param,
msg->data_param & 0x01000000,
EINA_TRUE,
(char **)&e->keyname,
(char **)&e->key,
- (char **)&e->string))
+ (char **)&e->string,
+ &e->modifiers))
{
free(e);
return;
}
void
-_ecore_win32_event_handle_key_release(Ecore_Win32_Callback_Data *msg,
- int is_keystroke)
+_ecore_win32_event_handle_key_release(Ecore_Win32_Callback_Data *msg)
{
Ecore_Event_Key *e;
e = (Ecore_Event_Key *)calloc(1, sizeof(Ecore_Event_Key));
if (!e) return;
- if (is_keystroke)
- {
- if (!_ecore_win32_event_keystroke_get(LOWORD(msg->window_param),
- msg->data_param & 0x01000000,
- EINA_FALSE,
- (char **)&e->keyname,
- (char **)&e->key,
- (char **)&e->string))
- {
- free(e);
- return;
- }
- }
- else
+ if (!_ecore_win32_event_keystroke_get(LOWORD(msg->window_param),
+ msg->data_param & 0x01000000,
+ EINA_FALSE,
+ (char **)&e->keyname,
+ (char **)&e->key,
+ (char **)&e->string,
+ &e->modifiers))
{
if (!_ecore_win32_event_char_get(LOWORD(msg->window_param),
(char **)&e->keyname,
}
static int
-_ecore_win32_event_keystroke_get(int key,
- int is_extended,
- Eina_Bool is_down,
- char **keyname,
- char **keysymbol,
- char **keycompose)
+_ecore_win32_event_keystroke_get(int key,
+ int is_extended,
+ Eina_Bool is_down,
+ char **keyname,
+ char **keysymbol,
+ char **keycompose,
+ unsigned int *modifiers)
{
- char *kn;
- char *ks;
- char *kc;
+ char *kn = NULL;
+ char *ks = NULL;
+ char *kc = NULL;
*keyname = NULL;
*keysymbol = NULL;
*keycompose = NULL;
- printf("vk key %x\n", key);
+ printf("vk key 0x%x\n", key);
switch (key)
{
/* Keystroke */
{
kn = "Prior";
ks = "Prior";
- kc = "Prior";
+ kc = NULL;
}
else
{
{
kn = "Next";
ks = "Next";
- kc = "Next";
+ kc = NULL;
}
else
{
{
kn = "End";
ks = "End";
- kc = "End";
+ kc = NULL;
}
else
{
{
kn = "Home";
ks = "Home";
- kc = "Home";
+ kc = NULL;
}
else
{
{
kn = "Left";
ks = "Left";
- kc = "Left";
+ kc = NULL;
}
else
{
{
kn = "Up";
ks = "Up";
- kc = "Up";
+ kc = NULL;
}
else
{
}
break;
case VK_RIGHT:
+ printf("vk val 0x%x (right)\n", VK_RIGHT);
if (is_extended)
{
kn = "Right";
ks = "Right";
- kc = "Right";
+ kc = NULL;
}
else
{
{
kn = "Down";
ks = "Down";
- kc = "Down";
+ kc = NULL;
}
else
{
{
kn = "Insert";
ks = "Insert";
- kc = "Insert";
+ kc = NULL;
}
else
{
{
kn = "Delete";
ks = "Delete";
+ /* FIXME: kc is wrong, here */
kc = "Delete";
}
else
ks = "Shift_R";
kc = "";
}
+ *modifiers |= ECORE_EVENT_MODIFIER_SHIFT;
}
else /* is_up */
{
kc = "";
_ecore_win32_key_mask &= ~ECORE_WIN32_KEY_MASK_RSHIFT;
}
+ *modifiers &= ~ECORE_EVENT_MODIFIER_SHIFT;
}
break;
}
kc = "";
break;
}
+ *modifiers |= ECORE_EVENT_MODIFIER_CTRL;
}
else /* is_up */
{
_ecore_win32_key_mask &= ~ECORE_WIN32_KEY_MASK_RCONTROL;
break;
}
+ *modifiers &= ~ECORE_EVENT_MODIFIER_CTRL;
}
break;
}
ks = "Alt_R";
kc = "";
}
+ *modifiers |= ECORE_EVENT_MODIFIER_ALT;
}
else /* is_up */
{
kc = "";
_ecore_win32_key_mask &= ~ECORE_WIN32_KEY_MASK_RMENU;
}
+ *modifiers &= ~ECORE_EVENT_MODIFIER_ALT;
+ }
+ break;
+ }
+ case VK_LWIN:
+ {
+ if (is_down)
+ {
+ kn = "Super_L";
+ ks = "Super_L";
+ kc = "";
+ *modifiers |= ECORE_EVENT_MODIFIER_WIN;
+ }
+ else /* is_up */
+ {
+ kn = "Super_L";
+ ks = "Super_L";
+ kc = "";
+ *modifiers &= ~ECORE_EVENT_MODIFIER_WIN;
+ }
+ break;
+ }
+ case VK_RWIN:
+ {
+ if (is_down)
+ {
+ kn = "Super_R";
+ ks = "Super_R";
+ kc = "";
+ *modifiers |= ECORE_EVENT_MODIFIER_WIN;
+ }
+ else /* is_up */
+ {
+ kn = "Super_R";
+ ks = "Super_R";
+ kc = "";
+ *modifiers &= ~ECORE_EVENT_MODIFIER_WIN;
}
break;
}
/* other non keystroke characters */
return 0;
}
+
+ printf("sortie...\n");
*keyname = strdup(kn);
if (!*keyname) return 0;
*keysymbol = strdup(ks);
*keyname = NULL;
return 0;
}
- *keycompose = strdup(kc);
- if (!*keycompose)
+ if (!kc)
+ *keycompose = NULL;
+ else
{
- free(*keyname);
- free(*keysymbol);
- *keyname = NULL;
- *keysymbol = NULL;
- return 0;
+ *keycompose = strdup(kc);
+ if (!*keycompose)
+ {
+ free(*keyname);
+ free(*keysymbol);
+ *keyname = NULL;
+ *keysymbol = NULL;
+ return 0;
+ }
}
+ printf("sortie 2 ...\n");
return 1;
}
char **keysymbol,
char **keycompose)
{
- char kn[32];
- char ks[32];
- char kc[32];
+ char *kn = NULL;
+ char *ks = NULL;
+ char *kc = NULL;
+ char buf[2];
*keyname = NULL;
*keysymbol = NULL;
*keycompose = NULL;
+ printf("char key 0x%x\n", key);
+
switch (key)
{
+ case VK_PROCESSKEY:
+ break;
case VK_BACK:
- strncpy(kn, "BackSpace", 32);
- strncpy(ks, "BackSpace", 32);
- strncpy(kc, "BackSpace", 32);
+ kn = "BackSpace";
+ ks = "BackSpace";
+ kc = "\b";
break;
case VK_TAB:
- strncpy(kn, "Tab", 32);
- strncpy(ks, "ISO_Left_Tab", 32);
- strncpy(kc, "Tab", 32);
+ kn = "Tab";
+ ks = "Tab";
+ kc = "\t";
break;
case 0x0a:
/* Line feed (Shift + Enter) */
- strncpy(kn, "LineFeed", 32);
- strncpy(ks, "LineFeed", 32);
- strncpy(kc, "LineFeed", 32);
+ kn = "LineFeed";
+ ks = "LineFeed";
+ kc = "LineFeed";
break;
case VK_RETURN:
- strncpy(kn, "Return", 32);
- strncpy(ks, "Return", 32);
- strncpy(kc, "Return", 32);
+ kn = "Return";
+ ks = "Return";
+ kc = "\n";
break;
case VK_ESCAPE:
- strncpy(kn, "Escape", 32);
- strncpy(ks, "Escape", 32);
- strncpy(kc, "Escape", 32);
+ kn = "Escape";
+ ks = "Escape";
+ kc = "\e";
break;
case VK_SPACE:
- strncpy(kn, "space", 32);
- strncpy(ks, "space", 32);
- strncpy(kc, " ", 32);
+ kn = "space";
+ ks = "space";
+ kc = " ";
break;
default:
/* displayable characters */
printf (" * key : %d\n", key);
- kn[0] = (TCHAR)key;
- kn[1] = '\0';
- ks[0] = (TCHAR)key;
- ks[1] = '\0';
- kc[0] = (TCHAR)key;
- kc[1] = '\0';
+ buf[0] = key;
+ buf[1] = '\0';
+ kn = buf;
+ ks = buf;
+ kc = buf;
break;
}
*keyname = strdup(kn);