summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukasz Stanislawski <l.stanislaws@samsung.com>2015-11-21 14:01:54 +0100
committerLukasz Stanislawski <l.stanislaws@samsung.com>2015-11-21 14:01:54 +0100
commitb466cdb20ed26de9af962906f0850ce6613f0315 (patch)
treeb66d6a1b7ceba592f2750b54a17f9fb2ac9bd889
parente1c1ead2ee22ce4d92428ad6eadb414f6fbef884 (diff)
downloadelementary-b466cdb20ed26de9af962906f0850ce6613f0315.tar.gz
atspi: support key modifers in bridge.
@feature
-rw-r--r--src/lib/elm_atspi_bridge.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/src/lib/elm_atspi_bridge.c b/src/lib/elm_atspi_bridge.c
index e88e8dd5c..71fe7ee12 100644
--- a/src/lib/elm_atspi_bridge.c
+++ b/src/lib/elm_atspi_bridge.c
@@ -4484,6 +4484,7 @@ _key_event_info_new(int event_type, const Ecore_Event_Key *data, Eo *bridge)
ret->event.key = eina_stringshare_add(data->key);
ret->event.string = eina_stringshare_add(data->string);
ret->event.compose = eina_stringshare_add(data->compose);
+ ret->event.modifiers = data->modifiers;
// not sure why it is here, but explicite keep it NULLed.
ret->event.data = NULL;
@@ -4504,6 +4505,27 @@ _key_event_info_free(Key_Event_Info *data)
free(data);
}
+static short
+_ecore_modifiers_2_atspi(unsigned int modifiers)
+{
+ short ret = 0;
+
+ if (modifiers & ECORE_EVENT_MODIFIER_SHIFT)
+ ret |= (1 << ATSPI_MODIFIER_SHIFT);
+ if (modifiers & ECORE_EVENT_MODIFIER_CAPS)
+ ret |= (1 << ATSPI_MODIFIER_SHIFTLOCK);
+ if (modifiers & ECORE_EVENT_MODIFIER_CTRL)
+ ret |= (1 << ATSPI_MODIFIER_CONTROL);
+ if (modifiers & ECORE_EVENT_MODIFIER_ALT)
+ ret |= (1 << ATSPI_MODIFIER_ALT);
+ if (modifiers & ECORE_EVENT_MODIFIER_WIN)
+ ret |= ATSPI_MODIFIER_META;
+ if (modifiers & ECORE_EVENT_MODIFIER_NUM)
+ ret |= (1 << ATSPI_MODIFIER_NUMLOCK);
+
+ return ret;
+}
+
static void
_iter_marshall_key_event(Eldbus_Message_Iter *iter, Key_Event_Info *data)
{
@@ -4520,7 +4542,7 @@ _iter_marshall_key_event(Eldbus_Message_Iter *iter, Key_Event_Info *data)
else
type = ATSPI_KEY_RELEASED_EVENT;
- eldbus_message_iter_arguments_append(struct_iter, "uiiiisb", type, 0, data->event.keycode, 0, data->event.timestamp, str, is_text);
+ eldbus_message_iter_arguments_append(struct_iter, "uinnisb", type, 0, data->event.keycode, _ecore_modifiers_2_atspi(data->event.modifiers), data->event.timestamp, str, is_text);
eldbus_message_iter_container_close(iter, struct_iter);
}