hover: reimplement accessibility support to behave like popup 96/65696/3
authorLukasz Stanislawski <l.stanislaws@samsung.com>
Fri, 11 Sep 2015 12:38:07 +0000 (14:38 +0200)
committerPrasoon Singh <prasoon.16@samsung.com>
Tue, 12 Apr 2016 13:24:56 +0000 (06:24 -0700)
Conflicts:
src/lib/elc_hoversel.c
src/lib/elm_hover.c
src/lib/elm_hover.eo

Change-Id: I7836db53aae3ba76b9ed8b76b68514e3e96f57f1

src/lib/elc_hoversel.c
src/lib/elm_hover.c
src/lib/elm_hover.eo

index d612801b1ef2cb08c6a70e5994139569d6523bbf..877bfc5d28e21daea46ab66f055baea095bcff5a 100644 (file)
@@ -622,7 +622,7 @@ _elm_hoversel_eo_base_constructor(Eo *obj, Elm_Hoversel_Data *_pd EINA_UNUSED)
    eo_do(obj,
          evas_obj_type_set(MY_CLASS_NAME_LEGACY),
          evas_obj_smart_callbacks_descriptions_set(_smart_callbacks),
-         elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_GLASS_PANE));
+         elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_COMBO_BOX));
 
    return obj;
 }
index 2ca235a364b3ca9134ed94ba9e39384dcf6b31a8..73fcf3f28db4481e0a3c6bb7224578ff9a082222 100644 (file)
@@ -3,6 +3,8 @@
 #endif
 
 #define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED
+#define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED
+#define ELM_INTERFACE_ATSPI_COMPONENT_PROTECTED
 
 #include <Elementary.h>
 
@@ -685,7 +687,7 @@ _elm_hover_eo_base_constructor(Eo *obj, Elm_Hover_Data *_pd EINA_UNUSED)
    eo_do(obj,
          evas_obj_type_set(MY_CLASS_NAME_LEGACY),
          evas_obj_smart_callbacks_descriptions_set(_smart_callbacks),
-         elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_GLASS_PANE));
+         elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_POPUP_MENU));
 
    return obj;
 }
@@ -836,4 +838,64 @@ _elm_hover_class_constructor(Eo_Class *klass)
    evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass);
 }
 
+
+EOLIAN static Elm_Atspi_State_Set
+_elm_hover_elm_interface_atspi_accessible_state_set_get(Eo *obj, Elm_Hover_Data *pd EINA_UNUSED)
+{
+   Elm_Atspi_State_Set states;
+
+   eo_do_super(obj, MY_CLASS, states = elm_interface_atspi_accessible_state_set_get());
+
+   STATE_TYPE_SET(states, ELM_ATSPI_STATE_MODAL);
+
+   return states;
+}
+
+static Eina_Bool
+_action_dismiss(Evas_Object *obj, const char *params EINA_UNUSED)
+{
+   elm_hover_dismiss(obj);
+   return EINA_TRUE;
+}
+
+EOLIAN const Elm_Atspi_Action *
+_elm_hover_elm_interface_atspi_widget_action_elm_actions_get(Eo *obj EINA_UNUSED, Elm_Hover_Data *pd EINA_UNUSED)
+{
+   static Elm_Atspi_Action atspi_actions[] = {
+          { "dismiss", "dismiss", NULL, _action_dismiss },
+          { NULL, NULL, NULL, NULL}
+   };
+   return &atspi_actions[0];
+}
+
+EOLIAN static Eina_Bool
+_elm_hover_elm_interface_atspi_component_highlight_grab(Eo *obj, Elm_Hover_Data *sd)
+{
+   ELM_HOVER_PARTS_FOREACH
+   {
+      if (sd->subs[i].obj)
+     {
+        elm_object_accessibility_highlight_set(sd->subs[i].obj, EINA_TRUE);
+        elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_HIGHLIGHTED, EINA_TRUE);
+        break;
+     }
+   }
+   return EINA_TRUE;
+}
+
+EOLIAN static Eina_Bool
+_elm_hover_elm_interface_atspi_component_highlight_clear(Eo *obj, Elm_Hover_Data *sd)
+{
+   ELM_HOVER_PARTS_FOREACH
+   {
+      if (sd->subs[i].obj)
+     {
+        elm_object_accessibility_highlight_set(sd->subs[i].obj, EINA_FALSE);
+        elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_HIGHLIGHTED, EINA_FALSE);
+        break;
+     }
+   }
+   return EINA_TRUE;
+}
+
 #include "elm_hover.eo.c"
index 03a84b5925206efeab2daf47063d1b53d0578251..54b1ea937983ee9a92d586fc2a9ce8843beb8cdc 100644 (file)
@@ -7,7 +7,8 @@ enum Elm.Hover.Axis
    both [[ELM_HOVER_AXIS_BOTH -- both.]]
 }
 
-class Elm.Hover (Elm.Layout, Evas.Clickable_Interface)
+class Elm.Hover (Elm.Layout, Evas.Clickable_Interface,
+                 Elm_Interface_Atspi_Widget_Action)
 {
    eo_prefix: elm_obj_hover;
    methods {
@@ -75,6 +76,10 @@ class Elm.Hover (Elm.Layout, Evas.Clickable_Interface)
       Elm.Container.content_unset;
       Elm.Layout.sizing_eval;
       Elm.Layout.content_aliases.get;
+      Elm_Interface_Atspi_Accessible.state_set.get;
+      Elm_Interface_Atspi_Widget_Action.elm_actions.get;
+      Elm_Interface_Atspi_Component.highlight_grab;
+      Elm_Interface_Atspi_Component.highlight_clear;
    }
    events {
       smart,changed;