atspi: separate atspi mode from access mode.

Since elm_access provides its own support for screen reader, access mode
and atspi mode must be separated.

https://phab.enlightenment.org/D726
This commit is contained in:
Lukasz Stanislawski 2014-04-21 14:58:18 +09:00 committed by Carsten Haitzler (Rasterman)
parent 495e0771c1
commit 85c5216205
6 changed files with 106 additions and 2 deletions

View File

@ -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);

View File

@ -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();

View File

@ -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)
{

View File

@ -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);
/**
* @}
*/
/**
* @}
*/

View File

@ -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;

View File

@ -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);