atspi: notify registry daemon about keyboard events.

Test Plan: elemeentary_test with Orca Screen reader 3.10.1

Reviewers: raster, z.kosinski

Reviewed By: raster

Differential Revision: https://phab.enlightenment.org/D1025
This commit is contained in:
Lukasz Stanislawski 2014-06-16 15:16:39 +09:00 committed by Carsten Haitzler (Rasterman)
parent 3351cb39ab
commit 0975fd37e0
3 changed files with 48 additions and 0 deletions

View File

@ -3305,3 +3305,47 @@ _elm_atspi_bridge_shutdown(void)
_root = NULL;
}
}
static void
_iter_marshall_key_event(Eldbus_Message_Iter *iter, Evas_Callback_Type type, void *event)
{
Eldbus_Message_Iter *struct_iter;
EINA_SAFETY_ON_NULL_RETURN(event);
struct_iter = eldbus_message_iter_container_new(iter, 'r', NULL);
if (type == EVAS_CALLBACK_KEY_DOWN)
{
Evas_Event_Key_Down *kde = event;
const char *str = kde->string ? kde->string : "";
int is_text = kde->string ? 1 : 0;
eldbus_message_iter_arguments_append(struct_iter, "uiiiisb", ATSPI_KEY_PRESSED_EVENT, 0, kde->keycode, 0, kde->timestamp, str, is_text);
}
else if (type == EVAS_CALLBACK_KEY_UP)
{
Evas_Event_Key_Up *kue = event;
const char *str = kue->string ? kue->string : "";
int is_text = kue->string ? 1 : 0;
eldbus_message_iter_arguments_append(struct_iter, "uiiiisb", ATSPI_KEY_RELEASED_EVENT, 0, kue->keycode, 0, kue->timestamp, str, is_text);
}
eldbus_message_iter_container_close(iter, struct_iter);
}
EAPI void
_elm_atspi_bridge_key_event_notify(Evas_Callback_Type type, void *event)
{
Eldbus_Message *msg;
Eldbus_Message_Iter *iter;
if (!_init_count) return;
if ((type != EVAS_CALLBACK_KEY_DOWN) && (type != EVAS_CALLBACK_KEY_UP)) return;
msg = eldbus_message_method_call_new(ATSPI_DBUS_NAME_REGISTRY, ATSPI_DBUS_PATH_DEC,
ATSPI_DBUS_INTERFACE_DEC, "NotifyListenersSync");
iter = eldbus_message_iter_get(msg);
_iter_marshall_key_event(iter, type, event);
eldbus_connection_send(_a11y_bus, msg, NULL, NULL, -1);
}

View File

@ -348,6 +348,7 @@ Eo *_elm_atspi_root_get(void);
void _elm_atspi_bridge_init(void);
void _elm_atspi_bridge_shutdown(void);
void _elm_atspi_bridge_key_event_notify(Evas_Callback_Type type, void *event);
void _elm_prefs_init(void);
void _elm_prefs_shutdown(void);

View File

@ -615,6 +615,9 @@ _propagate_event(void *data,
default:
break;
}
if (_elm_config->atspi_mode)
_elm_atspi_bridge_key_event_notify(type, event_info);
elm_widget_event_propagate(obj, type, event_info, event_flags);
}