raster pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=824a9d52c636b7f4887de5eea3065f6903282288

commit 824a9d52c636b7f4887de5eea3065f6903282288
Author: Lukasz Stanislawski <[email protected]>
Date:   Mon Jun 16 15:16:39 2014 +0900

    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
---
 src/lib/elm_atspi_bridge.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
 src/lib/elm_priv.h         |  1 +
 src/lib/elm_widget.c       |  3 +++
 3 files changed, 48 insertions(+)

diff --git a/src/lib/elm_atspi_bridge.c b/src/lib/elm_atspi_bridge.c
index 83f7415..3ddacf3 100644
--- a/src/lib/elm_atspi_bridge.c
+++ b/src/lib/elm_atspi_bridge.c
@@ -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);
+}
diff --git a/src/lib/elm_priv.h b/src/lib/elm_priv.h
index c9994df..d76843d 100644
--- a/src/lib/elm_priv.h
+++ b/src/lib/elm_priv.h
@@ -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);
diff --git a/src/lib/elm_widget.c b/src/lib/elm_widget.c
index 0263c25..6d24f0a 100644
--- a/src/lib/elm_widget.c
+++ b/src/lib/elm_widget.c
@@ -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);
 }

-- 


Reply via email to