*/
#define ACCESS_STATE(type) ((Efl_Access_State_Set)1 << (type))
+//TIZEN_ONLY(20160623): atspi: moved highlight when object is out of screen
+enum _Efl_Access_Move_Outed_Type {
+ EFL_ACCESS_MOVE_OUTED_NULL,
+ EFL_ACCESS_MOVE_OUTED_TOP_LEFT,
+ EFL_ACCESS_MOVE_OUTED_BOTTOM_RIGHT,
+ EFL_ACCESS_MOVE_OUTED_LAST_DEFINDED
+};
+
+typedef enum _Efl_Access_Move_Outed_Type Efl_Access_Move_Outed_Type;
+//
+
/**
* Free Efl_Access_Attributes_List
*/
efl_access_event_emit(EFL_ACCESS_MIXIN, obj, EFL_ACCESS_EVENT_BOUNDS_CHANGED, (void*)&evinfo); \
} while(0);
+//TIZEN_ONLY(20160623): atspi: moved highlight when object is out of screen
+/**
+ * Emits ATSPI 'MoveOuted' dbus signal.
+ */
+#define efl_access_move_outed_signal_emit(obj, type) \
+ do { \
+ Efl_Access_Move_Outed_Type evinfo = type; \
+ efl_access_event_emit(EFL_ACCESS_MIXIN, obj, EFL_ACCESS_EVENT_MOVE_OUTED, (void*)&evinfo); \
+ } while(0);
+//
+
/**
* Emits Accessible 'PropertyChanged' signal for 'Name' property.
*/
struct
{
Evas_Object *target;
+ //TIZEN_ONLY(20160623): atspi: moved highlight when object is out of screen
+ int x;
+ int y;
+ int w;
+ int h;
+ Eina_Bool need_moved;
+ //
} cur, prev;
} accessibility_highlight;
Evas_Object *clip, *target = sd->accessibility_highlight.cur.target;
//
Evas_Coord x, y, w, h;
+ //TIZEN_ONLY(20160623): atspi: moved highlight when object is out of screen
+ Evas_Coord ox, oy;
+ Efl_Access_Role role;
+ //
evas_object_geometry_get(target, &x, &y, &w, &h);
+ //TIZEN_ONLY(20160623): atspi: moved highlight when object is out of screen
+ evas_object_geometry_get(target, &ox, &oy, NULL, NULL);
+
+ if (((w < 0 && ox > sd->accessibility_highlight.cur.x) || (h < 0 && oy < sd->accessibility_highlight.cur.y))
+ && sd->accessibility_highlight.cur.need_moved
+ && efl_isa(target, EFL_ACCESS_MIXIN))
+ {
+ role = efl_access_role_get(target);
+ if (role && role != EFL_ACCESS_ROLE_MENU_ITEM && role != EFL_ACCESS_ROLE_LIST_ITEM)
+ {
+ efl_access_move_outed_signal_emit(target, EFL_ACCESS_MOVE_OUTED_TOP_LEFT);
+ sd->accessibility_highlight.cur.need_moved = EINA_FALSE;
+ return ;
+ }
+ }
+ else if (((w < 0 && ox < sd->accessibility_highlight.cur.x) || (h < 0 && oy > sd->accessibility_highlight.cur.y))
+ && sd->accessibility_highlight.cur.need_moved
+ && efl_isa(target, EFL_ACCESS_MIXIN))
+ {
+ role = efl_access_role_get(target);
+ if (role && role != EFL_ACCESS_ROLE_MENU_ITEM && role != EFL_ACCESS_ROLE_LIST_ITEM)
+ {
+ efl_access_move_outed_signal_emit(target, EFL_ACCESS_MOVE_OUTED_BOTTOM_RIGHT);
+ sd->accessibility_highlight.cur.need_moved = EINA_FALSE;
+ return ;
+ }
+ }
+ //
+
evas_object_move(obj, x, y);
evas_object_resize(obj, w, h);
+ //TIZEN_ONLY(20160623): atspi: moved highlight when object is out of screen
+ sd->accessibility_highlight.cur.x = ox;
+ sd->accessibility_highlight.cur.y = oy;
+ //
+
// TIZEN_ONLY(20171117) Accessibility frame follows parent item on scroll event
clip = evas_object_clip_get(target);
if (clip) evas_object_clip_set(obj, clip);
{
_elm_win_accessibility_highlight_init(sd, obj);
_elm_win_accessibility_highlight_show(win);
+ //TIZEN_ONLY(20160623): atspi: moved highlight when object is out of screen
+ sd->accessibility_highlight.cur.need_moved = EINA_TRUE;
+ //
}
}
//
static void _text_text_removed_send(void *data, const Efl_Event *event);
static void _text_caret_moved_send(void *data, const Efl_Event *event);
static void _text_selection_changed_send(void *data, const Efl_Event *event);
+//TIZEN_ONLY(20160623): atspi: moved highlight when object is out of screen
+static void _move_outed_signal_send(void *data, const Efl_Event *event);
+//
// bridge private methods
//TIZEN_ONLY(20171108): make atspi_proxy work
{ EFL_ACCESS_TEXT_EVENT_ACCESS_TEXT_CARET_MOVED, _text_caret_moved_send },
{ EFL_ACCESS_TEXT_EVENT_ACCESS_TEXT_INSERTED, _text_text_inserted_send },
{ EFL_ACCESS_TEXT_EVENT_ACCESS_TEXT_REMOVED, _text_text_removed_send },
- { EFL_ACCESS_TEXT_EVENT_ACCESS_TEXT_SELECTION_CHANGED, _text_selection_changed_send }
+ { EFL_ACCESS_TEXT_EVENT_ACCESS_TEXT_SELECTION_CHANGED, _text_selection_changed_send },
+ //TIZEN_ONLY(20160623): atspi: moved highlight when object is out of screen
+ { EFL_ACCESS_EVENT_MOVE_OUTED, _move_outed_signal_send}
+ //
};
enum _Atspi_Object_Child_Event_Type
ATSPI_OBJECT_EVENT_TEXT_ATTRIBUTES_CHANGED,
ATSPI_OBJECT_EVENT_TEXT_CARET_MOVED,
ATSPI_OBJECT_EVENT_ATTRIBUTES_CHANGED,
+ //TIZEN_ONLY(20160623): atspi: moved highlight when object is out of screen
+ ATSPI_OBJECT_EVENT_MOVE_OUTED
+ //
};
enum _Atspi_Window_Signals
[ATSPI_OBJECT_EVENT_TEXT_ATTRIBUTES_CHANGED] = {"TextAttributesChanged", ELDBUS_ARGS({"siiv(so)", NULL}), 0},
[ATSPI_OBJECT_EVENT_TEXT_CARET_MOVED] = {"TextCaretMoved", ELDBUS_ARGS({"siiv(so)", NULL}), 0},
[ATSPI_OBJECT_EVENT_ATTRIBUTES_CHANGED] = {"AttributesChanged", ELDBUS_ARGS({"siiv(so)", NULL}), 0},
+ //TIZEN_ONLY(20160623): atspi: moved highlight when object is out of screen
+ [ATSPI_OBJECT_EVENT_MOVE_OUTED] = {"MoveOuted", ELDBUS_ARGS({"siiv(i)", NULL}), 0},
+ //
{NULL, ELDBUS_ARGS({NULL, NULL}), 0}
};
STATE_TYPE_SET(pd->object_broadcast_mask, ATSPI_OBJECT_EVENT_SELECTION_CHANGED);
else if (!strcmp(tokens[1], "BoundsChanged"))
STATE_TYPE_SET(pd->object_broadcast_mask, ATSPI_OBJECT_EVENT_BOUNDS_CHANGED);
+ //TIZEN_ONLY(20160623): atspi: moved highlight when object is out of screen
+ else if (!strcmp(tokens[1], "MoveOuted"))
+ STATE_TYPE_SET(pd->object_broadcast_mask, ATSPI_OBJECT_EVENT_MOVE_OUTED);
+ //
}
else if (!strcmp(tokens[0], "Window"))
{
idx, 0, "(so)", eldbus_connection_unique_name_get(pd->a11y_bus), ev_data->child);
}
+//TIZEN_ONLY(20160623): atspi: moved highlight when object is out of screen
+static void
+_move_outed_signal_send(void *data, const Efl_Event *event)
+{
+ const Efl_Access_Move_Outed_Type *type = event->info;
+
+ ELM_ATSPI_BRIDGE_DATA_GET_OR_RETURN(data, pd);
+
+ if (!STATE_TYPE_GET(pd->object_broadcast_mask, ATSPI_OBJECT_EVENT_MOVE_OUTED))
+ {
+ efl_event_callback_stop(event->object);
+ return;
+ }
+ _bridge_signal_send(data, event->object, ATSPI_DBUS_INTERFACE_EVENT_OBJECT,
+ &_event_obj_signals[ATSPI_OBJECT_EVENT_MOVE_OUTED], "", *type, 0, NULL, NULL);
+}
+//
+
static void
_window_signal_send(void *data, const Efl_Event *event)
{