atspi: do not handle events if window is not activated. 33/82233/2
authorShinwoo Kim <cinoo.kim@samsung.com>
Tue, 2 Aug 2016 06:40:57 +0000 (15:40 +0900)
committerShinwoo Kim <cinoo.kim@samsung.com>
Fri, 5 Aug 2016 09:25:32 +0000 (18:25 +0900)
An activated window and the stater process could call "NotifyListenersSync" method, which makes atspi_register_keystroke_listener be called twice.

Change-Id: Ic22366604b4d3755d7fefc76c9b31d31d747d46c

src/lib/elm_atspi_bridge.c

index ebe3c26..3b27fe0 100644 (file)
@@ -121,6 +121,9 @@ typedef struct _Elm_Atspi_Bridge_Data
    Evas_Point socket_offset;
    //
    Eina_Bool connected : 1;
+   // TIZEN_ONLY(20160802): do not handle events if the window is not activated
+   Eina_Bool window_activated : 1;
+   //
 } Elm_Atspi_Bridge_Data;
 
 
@@ -4032,6 +4035,13 @@ _state_changed_signal_send(void *data, Eo *obj EINA_UNUSED, const Eo_Event_Descr
    const char *type_desc;
    ELM_ATSPI_BRIDGE_DATA_GET_OR_RETURN_VAL(data, pd, EINA_FALSE);
 
+   // TIZEN_ONLY(20160802): do not handle events if the window is not activated
+   if ((state_data->type == ELM_ATSPI_STATE_ACTIVE) && eo_isa(obj, ELM_WIN_CLASS))
+     {
+        pd->window_activated = state_data->new_value;
+     }
+   //
+
    if (!STATE_TYPE_GET(pd->object_state_broadcast_mask, state_data->type))
      return EINA_FALSE;
 
@@ -4481,9 +4491,19 @@ _bridge_cache_build(Eo *bridge, void *obj)
    if (eo_isa(obj, ELM_INTERFACE_ATSPI_WINDOW_INTERFACE))
      {
         if (STATE_TYPE_GET(ss, ELM_ATSPI_STATE_ACTIVE))
-          _window_signal_send(bridge, obj, ELM_INTERFACE_ATSPI_WINDOW_EVENT_WINDOW_ACTIVATED, NULL);
+          {
+             _window_signal_send(bridge, obj, ELM_INTERFACE_ATSPI_WINDOW_EVENT_WINDOW_ACTIVATED, NULL);
+             // TIZEN_ONLY(20160802): do not handle events if the window is not activated
+             pd->window_activated = EINA_TRUE;
+             //
+          }
         else
-          _window_signal_send(bridge, obj, ELM_INTERFACE_ATSPI_WINDOW_EVENT_WINDOW_DEACTIVATED, NULL);
+          {
+             _window_signal_send(bridge, obj, ELM_INTERFACE_ATSPI_WINDOW_EVENT_WINDOW_DEACTIVATED, NULL);
+             // TIZEN_ONLY(20160802): do not handle events if the window is not activated
+             pd->window_activated = EINA_FALSE;
+             //
+          }
      }
    eo_do(obj, children = elm_interface_atspi_accessible_children_get());
    EINA_LIST_FREE(children, child)
@@ -4873,6 +4893,10 @@ _elm_atspi_bridge_key_filter(void *data, void *loop EINA_UNUSED, int type, void
 
    ELM_ATSPI_BRIDGE_DATA_GET_OR_RETURN_VAL(bridge, pd, EINA_TRUE);
 
+   // TIZEN_ONLY(20160802): do not handle events if the window is not activated
+   if (!pd->window_activated) return EINA_TRUE;
+   //
+
    if ((type != ECORE_EVENT_KEY_DOWN) && (type != ECORE_EVENT_KEY_UP)) return EINA_TRUE;
 
    // check if reemited