summaryrefslogtreecommitdiff
path: root/src/lib/elementary/a11y/elm_atspi_access_component_adaptor.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/elementary/a11y/elm_atspi_access_component_adaptor.c')
-rw-r--r--src/lib/elementary/a11y/elm_atspi_access_component_adaptor.c155
1 files changed, 155 insertions, 0 deletions
diff --git a/src/lib/elementary/a11y/elm_atspi_access_component_adaptor.c b/src/lib/elementary/a11y/elm_atspi_access_component_adaptor.c
new file mode 100644
index 0000000000..3048bb53c8
--- /dev/null
+++ b/src/lib/elementary/a11y/elm_atspi_access_component_adaptor.c
@@ -0,0 +1,155 @@
+#ifdef HAVE_CONFIG_H
+ #include "elementary_config.h"
+#endif
+
+#define ELM_ATSPI_ADAPTOR_PROTECTED
+#define EFL_ACCESS_COMPONENT_PROTECTED
+
+#include "atspi/atspi-constants.h"
+#include <Elementary.h>
+#include "elm_priv.h"
+#include "elm_atspi_access_component_adaptor.eo.h"
+
+typedef struct _Elm_Atspi_Access_Component_Adaptor_Data
+{
+} Elm_Atspi_Access_Component_Adaptor_Data;
+
+static Eldbus_Message*
+_handle_contains(Eo *obj, Efl_Access *access, const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
+{
+ int x, y;
+ Eina_Bool contains = EINA_FALSE;
+ AtspiCoordType coord_type;
+ Eldbus_Message *ret;
+
+ if (!eldbus_message_arguments_get(msg, "iiu", &x, &y, &coord_type))
+ return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.InvalidArgs", "Invalid index type.");
+
+ Eina_Bool type = coord_type == ATSPI_COORD_TYPE_SCREEN ? EINA_TRUE : EINA_FALSE;
+ contains = efl_access_component_contains(access, type, x, y);
+
+ ret = eldbus_message_method_return_new(msg);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(ret, NULL);
+
+ eldbus_message_arguments_append(ret, "b", contains);
+
+ return ret;
+}
+
+static Eldbus_Message*
+_handle_get_accessible_at_point(Eo *obj, Efl_Access *access, const Eldbus_Service_Interface *service EINA_UNUSED, const Eldbus_Message *msg)
+{
+ return NULL;
+}
+
+static Eldbus_Message*
+_handle_get_extents(Eo *obj, Efl_Access *access, const Eldbus_Service_Interface *service EINA_UNUSED, const Eldbus_Message *msg)
+{
+ return NULL;
+}
+
+static Eldbus_Message*
+_handle_get_size(Eo *obj, Efl_Access *access, const Eldbus_Service_Interface *service EINA_UNUSED, const Eldbus_Message *msg)
+{
+ return NULL;
+}
+
+static Eldbus_Message*
+_handle_get_layer(Eo *obj, Efl_Access *access, const Eldbus_Service_Interface *service EINA_UNUSED, const Eldbus_Message *msg)
+{
+ return NULL;
+}
+
+static Eldbus_Message*
+_handle_grab_focus(Eo *obj, Efl_Access *access, const Eldbus_Service_Interface *service EINA_UNUSED, const Eldbus_Message *msg)
+{
+ return NULL;
+}
+
+static Eldbus_Message*
+_handle_get_alpha(Eo *obj, Efl_Access *access, const Eldbus_Service_Interface *service EINA_UNUSED, const Eldbus_Message *msg)
+{
+ return NULL;
+}
+
+static Eldbus_Message*
+_handle_set_extents(Eo *obj, Efl_Access *access, const Eldbus_Service_Interface *service EINA_UNUSED, const Eldbus_Message *msg)
+{
+ return NULL;
+}
+
+static Eldbus_Message*
+_handle_set_position(Eo *obj, Efl_Access *access, const Eldbus_Service_Interface *service EINA_UNUSED, const Eldbus_Message *msg)
+{
+ return NULL;
+}
+
+static Eldbus_Message*
+_handle_set_size(Eo *obj, Efl_Access *access, const Eldbus_Service_Interface *service EINA_UNUSED, const Eldbus_Message *msg)
+{
+ return NULL;
+}
+
+static Eldbus_Message*
+_component_msg_handle(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
+{
+ Elm_Atspi_Access_Component_Adaptor *obj = elm_atspi_adaptor_instance_get(ELM_ATSPI_ADAPTOR_CLASS, iface);
+ Efl_Access *access = elm_atspi_adaptor_object_get(obj, eldbus_message_path_get(msg));
+
+ if (!access || !efl_isa(access, EFL_ACCESS_COMPONENT_MIXIN))
+ return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.InvalidArgs", "Invalid object reference.");
+
+ const char *method = eldbus_message_member_get(msg);
+ if (!method)
+ return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.InvalidArgs", "Invalid method name.");
+
+ if (!strcmp(method, "Contains"))
+ return _handle_contains(obj, access, iface, msg);
+ else if (!strcmp(method, "GetAccessibleAtPoint"))
+ return _handle_get_accessible_at_point(obj, access, iface, msg);
+ else if (!strcmp(method, "GetExtents"))
+ return _handle_get_extents(obj, access, iface, msg);
+ else if (!strcmp(method, "GetSize"))
+ return _handle_get_size(obj, access, iface, msg);
+ else if (!strcmp(method, "GetLayer"))
+ return _handle_get_layer(obj, access, iface, msg);
+ else if (!strcmp(method, "GrabFocus"))
+ return _handle_grab_focus(obj, access, iface, msg);
+ else if (!strcmp(method, "GetAlpha"))
+ return _handle_get_alpha(obj, access, iface, msg);
+ else if (!strcmp(method, "SetExtents"))
+ return _handle_set_extents(obj, access, iface, msg);
+ else if (!strcmp(method, "SetPosition"))
+ return _handle_set_position(obj, access, iface, msg);
+ else if (!strcmp(method, "SetSize"))
+ return _handle_set_size(obj, access, iface, msg);
+
+ return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.NotSupported", "Method not supported.");
+}
+
+static const Eldbus_Method component_methods[] = {
+ { "Contains", ELDBUS_ARGS({"i", "x"}, {"i", "y"}, {"u", "coord_type"}), ELDBUS_ARGS({"b", "contains"}), _component_msg_handle, 0 },
+ { "GetAccessibleAtPoint", ELDBUS_ARGS({"i", "x"}, {"i", "y"}, {"u", "coord_type"}), ELDBUS_ARGS({"(so)", "accessible"}), _component_msg_handle, 0 },
+ { "GetExtents", ELDBUS_ARGS({"u", "coord_type"}), ELDBUS_ARGS({"(iiii)", "extents"}), _component_msg_handle, 0 },
+ { "GetPosition", ELDBUS_ARGS({"u", "coord_type"}), ELDBUS_ARGS({"i", "x"}, {"i","y"}), _component_msg_handle, 0 },
+ { "GetSize", NULL, ELDBUS_ARGS({"i", "w"}, {"i", "h"}), _component_msg_handle, 0 },
+ { "GetLayer", NULL, ELDBUS_ARGS({"u", "layer"}), _component_msg_handle, 0 },
+ { "GetMDIZOrder", NULL, ELDBUS_ARGS({"n", "MDIZOrder"}), _component_msg_handle, 0 },
+ { "GrabFocus", NULL, ELDBUS_ARGS({"b", "focus"}), _component_msg_handle, 0 },
+ { "GetAlpha", NULL, ELDBUS_ARGS({"d", "alpha"}), _component_msg_handle, 0 },
+ { "SetExtents", ELDBUS_ARGS({"i", "x"}, {"i", "y"}, {"i", "width"}, {"i", "height"}, {"u", "coord_type"}), ELDBUS_ARGS({"b", "result"}), _component_msg_handle, 0 },
+ { "SetPosition", ELDBUS_ARGS({"i", "x"}, {"i", "y"}, {"u", "coord_type"}), ELDBUS_ARGS({"b", "result"}), _component_msg_handle, 0 },
+ { "SetSize", ELDBUS_ARGS({"i", "width"}, {"i", "height"}), ELDBUS_ARGS({"b", "result"}), _component_msg_handle, 0 },
+ { NULL, NULL, NULL, NULL, 0 }
+};
+
+EOLIAN static const Eldbus_Service_Interface_Desc*
+_elm_atspi_access_component_interface_get(Eo *obj, Elm_Atspi_Access_Component_Adaptor_Data *pd)
+{
+ static const Eldbus_Service_Interface_Desc component_iface_desc = {
+ ATSPI_DBUS_INTERFACE_COMPONENT, component_methods, NULL, NULL, NULL, NULL
+ };
+ return &component_iface_desc;
+}
+
+#include "elm_atspi_access_component_adaptor.eo.c"