diff --git a/legacy/elementary/src/bin/config.c b/legacy/elementary/src/bin/config.c index 830aa560d0..1c09355ef7 100644 --- a/legacy/elementary/src/bin/config.c +++ b/legacy/elementary/src/bin/config.c @@ -800,6 +800,20 @@ dbg_change(void *data EINA_UNUSED, elm_config_save(); } +static void +atspi_change(void *data EINA_UNUSED, + Evas_Object *obj, + void *event_info EINA_UNUSED) +{ + Eina_Bool val = elm_check_state_get(obj); + Eina_Bool sel = elm_config_atspi_mode_get(); + + if (val == sel) return; + elm_config_atspi_mode_set(val); + elm_config_all_flush(); + elm_config_save(); +} + static void _status_basic(Evas_Object *win, Evas_Object *bx0) @@ -1573,6 +1587,18 @@ _status_config_etc(Evas_Object *win, evas_object_smart_callback_add(ck, "changed", dbg_change, NULL); + // atspi + ck = elm_check_add(win); + elm_object_tooltip_text_set(ck, "Set atspi mode"); + elm_object_text_set(ck, "Enable ATSPI support."); + evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(ck, EVAS_HINT_FILL, 0.5); + elm_check_state_set(ck, elm_config_atspi_mode_get()); + elm_box_pack_end(bx, ck); + evas_object_show(ck); + + evas_object_smart_callback_add(ck, "changed", atspi_change, NULL); + evas_object_data_set(win, "etc", bx); elm_naviframe_item_simple_push(naviframe, bx); diff --git a/legacy/elementary/src/lib/elm_atspi_bridge.c b/legacy/elementary/src/lib/elm_atspi_bridge.c index 429a282e55..e1b1b220ff 100644 --- a/legacy/elementary/src/lib/elm_atspi_bridge.c +++ b/legacy/elementary/src/lib/elm_atspi_bridge.c @@ -1648,7 +1648,7 @@ _elm_atspi_bridge_init(void) Eldbus_Message *msg; Eldbus_Connection *session_bus; - if (!_init_count && (_elm_config->access_mode != ELM_ACCESS_MODE_OFF)) + if (!_init_count && (_elm_config->atspi_mode != ELM_ATSPI_MODE_OFF)) { _elm_atspi_init(); diff --git a/legacy/elementary/src/lib/elm_config.c b/legacy/elementary/src/lib/elm_config.c index c1eabd49d1..f80a62b97a 100644 --- a/legacy/elementary/src/lib/elm_config.c +++ b/legacy/elementary/src/lib/elm_config.c @@ -586,6 +586,7 @@ _desc_init(void) ELM_CONFIG_VAL(D, T, audio_mute_alert, T_UCHAR); ELM_CONFIG_VAL(D, T, audio_mute_all, T_UCHAR); ELM_CONFIG_LIST(D, T, bindings, _config_bindings_widget_edd); + ELM_CONFIG_VAL(D, T, atspi_mode, T_UCHAR); #undef T #undef D #undef T_INT @@ -808,6 +809,21 @@ void _elm_config_access_set(Eina_Bool is_access) if (!is_access) _elm_access_shutdown(); } +Eina_Bool _elm_config_atspi_mode_get(void) +{ + return _elm_config->atspi_mode; +} + +void _elm_config_atspi_mode_set(Eina_Bool is_enabled) +{ + is_enabled = !!is_enabled; + if (_elm_config->atspi_mode == is_enabled) return; + _elm_config->atspi_mode = is_enabled; + + if (!is_enabled) _elm_atspi_bridge_shutdown(); + else _elm_atspi_bridge_init(); +} + Eina_Bool _elm_config_selection_unfocused_clear_get(void) { return _elm_config->selection_clear_enable; @@ -1576,6 +1592,7 @@ _config_load(void) _elm_config->audio_mute_input = 0; _elm_config->audio_mute_alert = 0; _elm_config->audio_mute_all = 0; + _elm_config->atspi_mode = ELM_ATSPI_MODE_OFF; } static const char * @@ -2178,6 +2195,8 @@ _env_get(void) if (s) _elm_config->magnifier_enable = !!atoi(s); s = getenv("ELM_MAGNIFIER_SCALE"); if (s) _elm_config->magnifier_scale = _elm_atof(s); + s = getenv("ELM_ATSPI_MODE"); + if (s) _elm_config->atspi_mode = ELM_ATSPI_MODE_ON; } static void @@ -2423,6 +2442,18 @@ elm_config_access_set(Eina_Bool is_access) _elm_config_access_set(is_access); } +EAPI Eina_Bool +elm_config_atspi_mode_get(void) +{ + return _elm_config_atspi_mode_get(); +} + +EAPI void +elm_config_atspi_mode_set(Eina_Bool is_enable) +{ + _elm_config_atspi_mode_set(is_enable); +} + EAPI Eina_Bool elm_config_selection_unfocused_clear_get(void) { diff --git a/legacy/elementary/src/lib/elm_config.h b/legacy/elementary/src/lib/elm_config.h index d09244170d..4478068d24 100644 --- a/legacy/elementary/src/lib/elm_config.h +++ b/legacy/elementary/src/lib/elm_config.h @@ -1548,6 +1548,49 @@ EAPI Eina_Bool elm_config_audio_mute_get(Edje_Channel channel); */ EAPI void elm_config_audio_mute_set(Edje_Channel channel, Eina_Bool mute); +/** + * @defgroup ATSPI AT-SPI2 Accessibility + * @ingroup Elementary + * + * Elementary widgets support Linux Accessibility standard. For more + * information please visit: + * http://www.linuxfoundation.org/collaborate/workgroups/accessibility/atk/at-spi/at-spi_on_d-bus + * + * @{ + */ + +/** + * Gets ATSPI mode + * + * @return the ATSPI mode + * + * @since 1.10 + * + * @ingroup ATSPI + * + * @see elm_config_atspi_mode_set() + */ +EAPI Eina_Bool elm_config_atspi_mode_get(void); + +/** + * Sets ATSPI mode + * + * @param is_atspi If @c EINA_TRUE, enables ATSPI2 mode + * + * @note Enables Linux Accessibility support for Elementary widgets. + * + * @since 1.10 + * + * @ingroup ATSPI + * + * @see elm_config_atspi_mode_get() + */ +EAPI void elm_config_atspi_mode_set(Eina_Bool is_atspi); + +/** + * @} + */ + /** * @} */ diff --git a/legacy/elementary/src/lib/elm_priv.h b/legacy/elementary/src/lib/elm_priv.h index 1102c0a84f..f6ddfca01a 100644 --- a/legacy/elementary/src/lib/elm_priv.h +++ b/legacy/elementary/src/lib/elm_priv.h @@ -162,6 +162,9 @@ extern const char *_elm_engines[]; #define ELM_ACCESS_MODE_OFF EINA_FALSE #define ELM_ACCESS_MODE_ON EINA_TRUE +#define ELM_ATSPI_MODE_OFF EINA_FALSE +#define ELM_ATSPI_MODE_ON EINA_TRUE + /* convenience macro to compress code and avoid typos */ #undef MIN #define MIN(x, y) (((x) < (y)) ? (x) : (y)) @@ -287,6 +290,7 @@ struct _Elm_Config unsigned char audio_mute_alert; unsigned char audio_mute_all; Eina_List *bindings; + Eina_Bool atspi_mode; /* Not part of the EET file */ Eina_Bool is_mirrored : 1; diff --git a/legacy/elementary/src/lib/elm_win.c b/legacy/elementary/src/lib/elm_win.c index 1a8176de0b..7e982dc5be 100644 --- a/legacy/elementary/src/lib/elm_win.c +++ b/legacy/elementary/src/lib/elm_win.c @@ -3315,7 +3315,7 @@ _elm_win_constructor(Eo *obj, Elm_Win_Data *sd, const char *name, Elm_Win_Type t evas_object_event_callback_add(sd->layout, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _elm_win_on_resize_obj_changed_size_hints, obj); - if (_elm_config->access_mode == ELM_ACCESS_MODE_ON) + if (_elm_config->atspi_mode == ELM_ATSPI_MODE_ON) { eo_do(obj, elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_WINDOW)); elm_interface_atspi_accessible_children_changed_added_signal_emit(_elm_atspi_root_get(), obj);