stanluk pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=020ad4df7b737fa7225b4e98e3ffd78c11de71d6

commit 020ad4df7b737fa7225b4e98e3ffd78c11de71d6
Author: Lukasz Stanislawski <l.stanisl...@samsung.com>
Date:   Wed May 13 11:38:20 2015 +0200

    atspi: set FOCUSABLE state only when widget has no focusable children
    
    AT-SPI2 specification states that active window can have only one widget
    with FOCUSED state. This differs from elementary design which assumes
    that whole elementary widget tree branch is focused.
    Patch assumes that if a widget have no focusable children and can have
    focus it can be marked as FOCUSABLE on atspi bus.
---
 src/lib/elm_layout.c |  4 ++--
 src/lib/elm_widget.c | 15 +++++++++------
 2 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/src/lib/elm_layout.c b/src/lib/elm_layout.c
index 06adc9d..5fa33e0 100644
--- a/src/lib/elm_layout.c
+++ b/src/lib/elm_layout.c
@@ -406,7 +406,7 @@ _elm_layout_elm_widget_on_focus(Eo *obj, 
Elm_Layout_Smart_Data *_pd EINA_UNUSED)
         elm_layout_signal_emit(obj, "elm,action,focus", "elm");
         evas_object_focus_set(wd->resize_obj, EINA_TRUE);
         evas_object_smart_callback_call(obj, SIG_LAYOUT_FOCUSED, NULL);
-        if (_elm_config->atspi_mode)
+        if (_elm_config->atspi_mode && !elm_widget_child_can_focus_get(obj))
           elm_interface_atspi_accessible_state_changed_signal_emit(obj, 
ELM_ATSPI_STATE_FOCUSED, EINA_TRUE);
      }
    else
@@ -414,7 +414,7 @@ _elm_layout_elm_widget_on_focus(Eo *obj, 
Elm_Layout_Smart_Data *_pd EINA_UNUSED)
         elm_layout_signal_emit(obj, "elm,action,unfocus", "elm");
         evas_object_focus_set(wd->resize_obj, EINA_FALSE);
         evas_object_smart_callback_call(obj, SIG_LAYOUT_UNFOCUSED, NULL);
-        if (_elm_config->atspi_mode)
+        if (_elm_config->atspi_mode && !elm_widget_child_can_focus_get(obj))
           elm_interface_atspi_accessible_state_changed_signal_emit(obj, 
ELM_ATSPI_STATE_FOCUSED, EINA_FALSE);
      }
 
diff --git a/src/lib/elm_widget.c b/src/lib/elm_widget.c
index d27b27d..27221d5 100644
--- a/src/lib/elm_widget.c
+++ b/src/lib/elm_widget.c
@@ -5469,7 +5469,7 @@ _elm_widget_on_focus(Eo *obj, Elm_Widget_Smart_Data *sd)
              if (!sd->resize_obj)
                evas_object_focus_set(obj, EINA_TRUE);
              evas_object_smart_callback_call(obj, SIG_WIDGET_FOCUSED, NULL);
-             if (_elm_config->atspi_mode)
+             if (_elm_config->atspi_mode && 
!elm_widget_child_can_focus_get(obj))
                elm_interface_atspi_accessible_state_changed_signal_emit(obj, 
ELM_ATSPI_STATE_FOCUSED, EINA_TRUE);
           }
         else
@@ -5477,7 +5477,7 @@ _elm_widget_on_focus(Eo *obj, Elm_Widget_Smart_Data *sd)
              if (!sd->resize_obj)
                evas_object_focus_set(obj, EINA_FALSE);
              evas_object_smart_callback_call(obj, SIG_WIDGET_UNFOCUSED, NULL);
-             if (_elm_config->atspi_mode)
+             if (_elm_config->atspi_mode && 
!elm_widget_child_can_focus_get(obj))
                elm_interface_atspi_accessible_state_changed_signal_emit(obj, 
ELM_ATSPI_STATE_FOCUSED, EINA_FALSE);
           }
      }
@@ -5632,10 +5632,13 @@ 
_elm_widget_elm_interface_atspi_accessible_state_set_get(Eo *obj, Elm_Widget_Sma
               ((wy < y) && (wy + wh < y)) || ((wy > y+ h) && (wy + wh > y + 
h))))
           STATE_TYPE_SET(states, ELM_ATSPI_STATE_SHOWING);
      }
-   if (elm_object_focus_get(obj))
-     STATE_TYPE_SET(states, ELM_ATSPI_STATE_FOCUSED);
-   if (elm_object_focus_allow_get(obj))
-     STATE_TYPE_SET(states, ELM_ATSPI_STATE_FOCUSABLE);
+   if (!elm_widget_child_can_focus_get(obj))
+     {
+        if (elm_object_focus_allow_get(obj))
+          STATE_TYPE_SET(states, ELM_ATSPI_STATE_FOCUSABLE);
+        if (elm_object_focus_get(obj))
+          STATE_TYPE_SET(states, ELM_ATSPI_STATE_FOCUSED);
+     }
    if (!elm_object_disabled_get(obj))
      {
         STATE_TYPE_SET(states, ELM_ATSPI_STATE_ENABLED);

-- 


Reply via email to