2014-04-20 20:46:11 -07:00
# ifdef HAVE_CONFIG_H
# include "elementary_config.h"
# endif
2014-10-17 08:56:11 -07:00
# define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED
2014-04-20 20:46:11 -07:00
# include <Elementary.h>
# include "elm_widget.h"
# include "elm_priv.h"
const char * Atspi_Name [ ] = {
" invalid " ,
" accelerator label " ,
" alert " ,
" animation " ,
" arrow " ,
" calendar " ,
" canvas " ,
" check box " ,
" check menu item " ,
" color chooser " ,
" column header " ,
" combo box " ,
" dateeditor " ,
" desktop icon " ,
" desktop frame " ,
" dial " ,
" dialog " ,
" directory pane " ,
" drawing area " ,
" file chooser " ,
" filler " ,
" focus traversable " ,
" font chooser " ,
" frame " ,
" glass pane " ,
" html container " ,
" icon " ,
" image " ,
" internal frame " ,
" label " ,
" layered pane " ,
" list " ,
" list item " ,
" menu " ,
" menu bar " ,
" menu item " ,
" option pane " ,
" page tab " ,
" page tab list " ,
" panel " ,
" password text " ,
" popup menu " ,
" progress bar " ,
" push button " ,
" radio button " ,
" radio menu item " ,
" root pane " ,
" row header " ,
" scroll bar " ,
" scroll pane " ,
" separator " ,
" slider " ,
" spin button " ,
" split pane " ,
" status bar " ,
" table " ,
" table cell " ,
" table column header " ,
" table row header " ,
" tearoff menu item " ,
" terminal " ,
" text " ,
" toggle button " ,
" tool bar " ,
" tool tip " ,
" tree " ,
" tree table " ,
" unknown " ,
" viewport " ,
" window " ,
" extended " ,
" header " ,
" footer " ,
" paragraph " ,
" ruler " ,
" application " ,
" autocomplete " ,
" editbar " ,
" embedded " ,
" entry " ,
" chart " ,
" caption " ,
" document frame " ,
" heading " ,
" page " ,
" section " ,
" redundant object " ,
" form " ,
" link " ,
" input method window " ,
" table row " ,
" tree item " ,
" document spreadsheet " ,
" document presentation " ,
" document text " ,
" document web " ,
" document email " ,
" comment " ,
" list box " ,
" grouping " ,
" image map " ,
" notification " ,
" info bar " ,
" last defined "
} ;
2015-09-03 05:07:23 -07:00
struct _Elm_Atspi_Event_Handler
{
Eo_Event_Cb cb ;
void * data ;
} ;
2015-10-01 08:24:42 -07:00
struct _Elm_Interface_Atspi_Accessible_Data
{
Elm_Atspi_Role role ;
const char * name ;
const char * description ;
2015-10-02 08:04:38 -07:00
const char * translation_domain ;
2015-10-01 08:24:42 -07:00
Elm_Interface_Atspi_Accessible * parent ;
} ;
typedef struct _Elm_Interface_Atspi_Accessible_Data Elm_Interface_Atspi_Accessible_Data ;
2015-09-03 05:07:23 -07:00
static Eina_List * global_callbacks ;
2014-04-20 20:46:11 -07:00
EOLIAN static int
2015-10-01 08:24:42 -07:00
_elm_interface_atspi_accessible_index_in_parent_get ( Eo * obj , Elm_Interface_Atspi_Accessible_Data * pd EINA_UNUSED )
2014-04-20 20:46:11 -07:00
{
Eina_List * l , * children = NULL ;
Eo * chld , * parent = NULL ;
int ret = 0 ;
eo_do ( obj , parent = elm_interface_atspi_accessible_parent_get ( ) ) ;
if ( ! parent ) return - 1 ;
eo_do ( parent , children = elm_interface_atspi_accessible_children_get ( ) ) ;
if ( ! children ) return - 1 ;
EINA_LIST_FOREACH ( children , l , chld )
{
if ( obj = = chld )
break ;
ret + + ;
}
if ( ret = = ( int ) eina_list_count ( children ) )
{
ERR ( " Object %s not present in its AT-SPI parents (%s) children list! This should never happen. " , eo_class_name_get ( eo_class_get ( obj ) ) , eo_class_name_get ( eo_class_get ( parent ) ) ) ;
2015-03-26 03:51:37 -07:00
ret = - 1 ;
2014-04-20 20:46:11 -07:00
}
2015-03-26 03:51:37 -07:00
eina_list_free ( children ) ;
2014-04-20 20:46:11 -07:00
return ret ;
}
2015-10-01 08:24:42 -07:00
EOLIAN static Elm_Interface_Atspi_Accessible *
_elm_interface_atspi_accessible_parent_get ( Eo * obj EINA_UNUSED , Elm_Interface_Atspi_Accessible_Data * pd )
2014-04-20 20:46:11 -07:00
{
2015-10-01 08:24:42 -07:00
return pd - > parent ;
2014-04-20 20:46:11 -07:00
}
EOLIAN static void
2015-10-01 08:24:42 -07:00
_elm_interface_atspi_accessible_parent_set ( Eo * obj , Elm_Interface_Atspi_Accessible_Data * pd , Elm_Interface_Atspi_Accessible * new_parent )
2014-04-20 20:46:11 -07:00
{
2015-10-01 08:24:42 -07:00
if ( pd - > parent ! = new_parent )
{
pd - > parent = new_parent ;
elm_interface_atspi_accessible_parent_changed_signal_emit ( obj ) ;
}
2014-04-20 20:46:11 -07:00
}
2014-05-28 01:12:34 -07:00
EOLIAN Eina_List *
2015-10-01 08:24:42 -07:00
_elm_interface_atspi_accessible_attributes_get ( Eo * obj EINA_UNUSED , Elm_Interface_Atspi_Accessible_Data * pd EINA_UNUSED )
2014-04-20 20:46:11 -07:00
{
WRN ( " The %s object does not implement the \" accessible_attributes_set \" function. " ,
eo_class_name_get ( eo_class_get ( obj ) ) ) ;
2014-05-28 01:12:34 -07:00
return NULL ;
2014-04-20 20:46:11 -07:00
}
EOLIAN static Elm_Atspi_Role
2015-10-01 08:24:42 -07:00
_elm_interface_atspi_accessible_role_get ( Eo * obj EINA_UNUSED , Elm_Interface_Atspi_Accessible_Data * pd EINA_UNUSED )
2014-04-20 20:46:11 -07:00
{
2015-10-01 08:24:42 -07:00
return pd - > role ;
2014-04-20 20:46:11 -07:00
}
EOLIAN static void
2015-10-01 08:24:42 -07:00
_elm_interface_atspi_accessible_role_set ( Eo * obj , Elm_Interface_Atspi_Accessible_Data * pd EINA_UNUSED , Elm_Atspi_Role role )
2014-04-20 20:46:11 -07:00
{
2015-10-01 08:24:42 -07:00
if ( pd - > role ! = role )
{
pd - > role = role ;
elm_interface_atspi_accessible_role_changed_signal_emit ( obj ) ;
}
2014-04-20 20:46:11 -07:00
}
EOLIAN const char *
2015-10-01 08:24:42 -07:00
_elm_interface_atspi_accessible_role_name_get ( Eo * obj EINA_UNUSED , Elm_Interface_Atspi_Accessible_Data * pd EINA_UNUSED )
2014-04-20 20:46:11 -07:00
{
Elm_Atspi_Role role ;
eo_do ( obj , role = elm_interface_atspi_accessible_role_get ( ) ) ;
return role > ELM_ATSPI_ROLE_LAST_DEFINED ? " " : Atspi_Name [ role ] ;
}
2014-10-21 05:46:35 -07:00
EOLIAN char *
2015-10-01 08:24:42 -07:00
_elm_interface_atspi_accessible_name_get ( Eo * obj EINA_UNUSED , Elm_Interface_Atspi_Accessible_Data * pd )
2014-04-20 20:46:11 -07:00
{
2015-10-02 08:04:38 -07:00
if ( pd - > name )
{
# ifdef ENABLE_NLS
if ( pd - > translation_domain )
return strdup ( dgettext ( pd - > translation_domain , pd - > name ) ) ;
else
return strdup ( pd - > name ) ;
# else
return strdup ( pd - > name ) ;
# endif
}
return NULL ;
2014-04-20 20:46:11 -07:00
}
EOLIAN static void
2015-10-01 08:24:42 -07:00
_elm_interface_atspi_accessible_name_set ( Eo * obj EINA_UNUSED , Elm_Interface_Atspi_Accessible_Data * pd , char * val )
2014-04-20 20:46:11 -07:00
{
2015-10-01 08:24:42 -07:00
eina_stringshare_replace ( & pd - > name , val ) ;
2014-04-20 20:46:11 -07:00
}
2015-10-01 08:24:42 -07:00
const char * _elm_interface_atspi_accessible_description_get ( Eo * obj EINA_UNUSED , Elm_Interface_Atspi_Accessible_Data * pd )
2014-04-20 20:46:11 -07:00
{
2015-10-02 08:04:38 -07:00
# ifdef ENABLE_NLS
if ( pd - > translation_domain )
return dgettext ( pd - > translation_domain , pd - > description ) ;
# endif
2015-10-01 08:24:42 -07:00
return pd - > description ;
2014-04-20 20:46:11 -07:00
}
EOLIAN static void
2015-10-01 08:24:42 -07:00
_elm_interface_atspi_accessible_description_set ( Eo * obj EINA_UNUSED , Elm_Interface_Atspi_Accessible_Data * pd , const char * val )
2014-04-20 20:46:11 -07:00
{
2015-10-01 08:24:42 -07:00
eina_stringshare_replace ( & pd - > description , val ) ;
2014-04-20 20:46:11 -07:00
}
EOLIAN static const char *
2015-10-01 08:24:42 -07:00
_elm_interface_atspi_accessible_localized_role_name_get ( Eo * obj EINA_UNUSED , Elm_Interface_Atspi_Accessible_Data * pd EINA_UNUSED )
2014-04-20 20:46:11 -07:00
{
const char * ret = NULL ;
eo_do ( obj , ret = elm_interface_atspi_accessible_role_name_get ( ) ) ;
# ifdef ENABLE_NLS
ret = gettext ( ret ) ;
# endif
return ret ;
}
EOLIAN static Eina_List *
2015-10-01 08:24:42 -07:00
_elm_interface_atspi_accessible_children_get ( Eo * obj EINA_UNUSED , Elm_Interface_Atspi_Accessible_Data * pd EINA_UNUSED )
2014-04-20 20:46:11 -07:00
{
Eina_List * children = NULL ;
Eina_Iterator * iter = NULL ;
Eo * chld ;
// By default use Eo_Base object hierarchy
eo_do ( obj , iter = eo_children_iterator_new ( ) ) ;
if ( ! iter ) return NULL ;
EINA_ITERATOR_FOREACH ( iter , chld )
{
2014-06-30 13:37:04 -07:00
if ( eo_isa ( chld , ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN ) )
2014-04-20 20:46:11 -07:00
children = eina_list_append ( children , chld ) ;
}
eina_iterator_free ( iter ) ;
return children ;
}
EOLIAN static Elm_Atspi_State_Set
2015-10-01 08:24:42 -07:00
_elm_interface_atspi_accessible_state_set_get ( Eo * obj EINA_UNUSED , Elm_Interface_Atspi_Accessible_Data * pd EINA_UNUSED )
2014-04-20 20:46:11 -07:00
{
2015-10-01 08:24:42 -07:00
return 0 ;
2014-04-20 20:46:11 -07:00
}
2014-05-28 01:12:34 -07:00
EOLIAN Eina_List *
2015-10-01 08:24:42 -07:00
_elm_interface_atspi_accessible_relation_set_get ( Eo * obj EINA_UNUSED , Elm_Interface_Atspi_Accessible_Data * pd EINA_UNUSED )
2014-05-28 01:12:34 -07:00
{
WRN ( " The %s object does not implement the \" accessible_relation_set \" function. " ,
eo_class_name_get ( eo_class_get ( obj ) ) ) ;
return NULL ;
}
2014-10-17 08:56:11 -07:00
EAPI void elm_atspi_attributes_list_free ( Eina_List * list )
2014-05-28 01:12:34 -07:00
{
Elm_Atspi_Attribute * attr ;
EINA_LIST_FREE ( list , attr )
2014-07-21 06:44:16 -07:00
{
eina_stringshare_del ( attr - > key ) ;
eina_stringshare_del ( attr - > value ) ;
free ( attr ) ;
}
2014-05-28 01:12:34 -07:00
}
2015-09-03 05:07:23 -07:00
EOLIAN void
_elm_interface_atspi_accessible_event_emit ( Eo * class EINA_UNUSED , void * pd EINA_UNUSED , Eo * accessible , const Eo_Event_Description * event , void * event_info )
{
Eina_List * l ;
Elm_Atspi_Event_Handler * hdl ;
if ( ! accessible | | ! event | | ! eo_isa ( accessible , ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN ) )
{
2015-10-02 02:35:27 -07:00
CRI ( " Invalid parameters, event: %s, obj: %s " , event ? event - > name : " NULL " , accessible ? eo_class_name_get ( accessible ) : " NULL " ) ;
2015-09-03 05:07:23 -07:00
return ;
}
EINA_LIST_FOREACH ( global_callbacks , l , hdl )
{
if ( hdl - > cb )
hdl - > cb ( hdl - > data , accessible , event , event_info ) ;
}
}
EOLIAN Elm_Atspi_Event_Handler *
_elm_interface_atspi_accessible_event_handler_add ( Eo * class EINA_UNUSED , void * pd EINA_UNUSED , Eo_Event_Cb cb , void * data )
{
Elm_Atspi_Event_Handler * ret = calloc ( sizeof ( Elm_Atspi_Event_Handler ) , 1 ) ;
ret - > cb = cb ;
ret - > data = data ;
global_callbacks = eina_list_append ( global_callbacks , ret ) ;
return ret ;
}
EOLIAN void
_elm_interface_atspi_accessible_event_handler_del ( Eo * class EINA_UNUSED , void * pd EINA_UNUSED , Elm_Atspi_Event_Handler * handler )
{
Eina_List * l , * l2 ;
Elm_Atspi_Event_Handler * hdl ;
EINA_LIST_FOREACH_SAFE ( global_callbacks , l , l2 , hdl )
{
if ( hdl = = handler )
{
global_callbacks = eina_list_remove_list ( global_callbacks , l ) ;
free ( hdl ) ;
break ;
}
}
}
2015-10-02 08:04:38 -07:00
EOLIAN void
_elm_interface_atspi_accessible_translation_domain_set ( Eo * obj EINA_UNUSED , Elm_Interface_Atspi_Accessible_Data * pd , const char * domain )
{
eina_stringshare_replace ( & pd - > translation_domain , domain ) ;
}
EOLIAN const char *
_elm_interface_atspi_accessible_translation_domain_get ( Eo * obj EINA_UNUSED , Elm_Interface_Atspi_Accessible_Data * pd )
{
return pd - > translation_domain ;
}
2014-04-20 20:46:11 -07:00
# include "elm_interface_atspi_accessible.eo.c"