2013-04-25 22:13:00 -07:00
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
# include "elementary_config.h"
|
|
|
|
#endif
|
|
|
|
|
2018-04-03 04:27:30 -07:00
|
|
|
#define EFL_ACCESS_OBJECT_PROTECTED
|
2017-11-15 18:31:26 -08:00
|
|
|
#define EFL_ACCESS_WIDGET_ACTION_PROTECTED
|
2016-04-20 05:07:38 -07:00
|
|
|
#define ELM_LAYOUT_PROTECTED
|
2018-05-03 16:34:17 -07:00
|
|
|
#define EFL_PART_PROTECTED
|
2014-10-17 08:56:11 -07:00
|
|
|
|
2009-02-24 01:23:51 -08:00
|
|
|
#include <Elementary.h>
|
2013-04-25 22:13:00 -07:00
|
|
|
|
2009-02-24 01:23:51 -08:00
|
|
|
#include "elm_priv.h"
|
2017-05-22 02:56:52 -07:00
|
|
|
#include "efl_ui_radio_private.h"
|
2012-11-25 22:32:53 -08:00
|
|
|
#include "elm_widget_layout.h"
|
2017-11-20 03:39:34 -08:00
|
|
|
#include "elm_part_helper.h"
|
2009-02-24 01:23:51 -08:00
|
|
|
|
2017-05-22 02:56:52 -07:00
|
|
|
#define MY_CLASS EFL_UI_RADIO_CLASS
|
2017-07-27 23:35:10 -07:00
|
|
|
#define MY_CLASS_PFX efl_ui_radio
|
2012-11-25 22:32:53 -08:00
|
|
|
|
2017-05-22 02:56:52 -07:00
|
|
|
#define MY_CLASS_NAME "Efl.Ui.Radio"
|
2012-05-03 15:43:31 -07:00
|
|
|
|
|
|
|
static const Elm_Layout_Part_Alias_Description _text_aliases[] =
|
2012-05-02 18:19:05 -07:00
|
|
|
{
|
2012-05-03 15:43:31 -07:00
|
|
|
{"default", "elm.text"},
|
|
|
|
{NULL, NULL}
|
|
|
|
};
|
2012-05-02 18:19:05 -07:00
|
|
|
|
2012-05-03 15:43:31 -07:00
|
|
|
static const char SIG_CHANGED[] = "changed";
|
|
|
|
static const Evas_Smart_Cb_Description _smart_callbacks[] = {
|
2017-11-01 10:15:48 -07:00
|
|
|
{SIG_CHANGED, ""}, /**< handled by efl_ui_check */
|
2014-01-23 03:07:20 -08:00
|
|
|
{SIG_WIDGET_LANG_CHANGED, ""}, /**< handled by elm_widget */
|
2014-02-07 21:05:06 -08:00
|
|
|
{SIG_WIDGET_ACCESS_CHANGED, ""}, /**< handled by elm_widget */
|
2014-02-05 23:18:57 -08:00
|
|
|
{SIG_LAYOUT_FOCUSED, ""}, /**< handled by elm_layout */
|
|
|
|
{SIG_LAYOUT_UNFOCUSED, ""}, /**< handled by elm_layout */
|
2012-05-03 15:43:31 -07:00
|
|
|
{NULL, NULL}
|
|
|
|
};
|
2012-05-02 18:19:05 -07:00
|
|
|
|
2014-04-14 22:54:58 -07:00
|
|
|
static Eina_Bool _key_action_activate(Evas_Object *obj, const char *params);
|
|
|
|
|
|
|
|
static const Elm_Action key_actions[] = {
|
|
|
|
{"activate", _key_action_activate},
|
|
|
|
{NULL, NULL}
|
|
|
|
};
|
|
|
|
|
2012-05-02 18:19:05 -07:00
|
|
|
static void
|
radio: add "elm,activate,radio,on" and "elm,activate,radio,off" signal to support value change animation.
Summary:
Currently when user clicks on the radio, and when api value_set() called by
the developer we emit "elm,state,radio,*" signal. To support value change animation when
user interacts with radio. There is no way to distinguish the action in EDC.
This "elm,activate,radio,*" is a way which edc can make use to distinguish the state change signal
by the user action or due to api call.
Reviewers: Hermet, raster, cedric
Reviewed By: cedric
Differential Revision: https://phab.enlightenment.org/D2829
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
2015-07-29 14:14:30 -07:00
|
|
|
_state_set(Evas_Object *obj, Eina_Bool state, Eina_Bool activate)
|
2012-05-02 18:19:05 -07:00
|
|
|
{
|
2012-05-03 15:43:31 -07:00
|
|
|
ELM_RADIO_DATA_GET(obj, sd);
|
|
|
|
|
2015-07-29 11:20:20 -07:00
|
|
|
if (state != sd->state)
|
2012-05-02 18:19:05 -07:00
|
|
|
{
|
2012-05-03 15:43:31 -07:00
|
|
|
sd->state = state;
|
|
|
|
if (sd->state)
|
radio: add "elm,activate,radio,on" and "elm,activate,radio,off" signal to support value change animation.
Summary:
Currently when user clicks on the radio, and when api value_set() called by
the developer we emit "elm,state,radio,*" signal. To support value change animation when
user interacts with radio. There is no way to distinguish the action in EDC.
This "elm,activate,radio,*" is a way which edc can make use to distinguish the state change signal
by the user action or due to api call.
Reviewers: Hermet, raster, cedric
Reviewed By: cedric
Differential Revision: https://phab.enlightenment.org/D2829
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
2015-07-29 14:14:30 -07:00
|
|
|
{
|
|
|
|
// FIXME: to do animation during state change , we need different signal
|
|
|
|
// so that we can distinguish between state change by user or state change
|
|
|
|
// by calling state_change() api. Keep both the signal for backward compatibility
|
|
|
|
// and only emit "elm,state,radio,on" when activate is false when we can break ABI.
|
2018-04-26 04:24:09 -07:00
|
|
|
if (elm_widget_is_legacy(obj))
|
|
|
|
{
|
|
|
|
if (activate) elm_layout_signal_emit(obj, "elm,activate,radio,on", "elm");
|
|
|
|
elm_layout_signal_emit(obj, "elm,state,radio,on", "elm");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (activate) elm_layout_signal_emit(obj, "efl,activate,radio,on", "efl");
|
|
|
|
elm_layout_signal_emit(obj, "efl,state,radio,on", "efl");
|
|
|
|
}
|
radio: add "elm,activate,radio,on" and "elm,activate,radio,off" signal to support value change animation.
Summary:
Currently when user clicks on the radio, and when api value_set() called by
the developer we emit "elm,state,radio,*" signal. To support value change animation when
user interacts with radio. There is no way to distinguish the action in EDC.
This "elm,activate,radio,*" is a way which edc can make use to distinguish the state change signal
by the user action or due to api call.
Reviewers: Hermet, raster, cedric
Reviewed By: cedric
Differential Revision: https://phab.enlightenment.org/D2829
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
2015-07-29 14:14:30 -07:00
|
|
|
}
|
2011-04-01 04:24:15 -07:00
|
|
|
else
|
radio: add "elm,activate,radio,on" and "elm,activate,radio,off" signal to support value change animation.
Summary:
Currently when user clicks on the radio, and when api value_set() called by
the developer we emit "elm,state,radio,*" signal. To support value change animation when
user interacts with radio. There is no way to distinguish the action in EDC.
This "elm,activate,radio,*" is a way which edc can make use to distinguish the state change signal
by the user action or due to api call.
Reviewers: Hermet, raster, cedric
Reviewed By: cedric
Differential Revision: https://phab.enlightenment.org/D2829
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
2015-07-29 14:14:30 -07:00
|
|
|
{
|
|
|
|
// FIXME: to do animation during state change , we need different signal
|
|
|
|
// so that we can distinguish between state change by user or state change
|
|
|
|
// by calling state_change() api. Keep both the signal for backward compatibility
|
|
|
|
// and only emit "elm,state,radio,off"when activate is false when we can break ABI.
|
2018-04-26 04:24:09 -07:00
|
|
|
if (elm_widget_is_legacy(obj))
|
|
|
|
{
|
|
|
|
if (activate) elm_layout_signal_emit(obj, "elm,activate,radio,off", "elm");
|
|
|
|
elm_layout_signal_emit(obj, "elm,state,radio,off", "elm");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (activate) elm_layout_signal_emit(obj, "efl,activate,radio,off", "efl");
|
|
|
|
elm_layout_signal_emit(obj, "efl,state,radio,off", "efl");
|
|
|
|
}
|
radio: add "elm,activate,radio,on" and "elm,activate,radio,off" signal to support value change animation.
Summary:
Currently when user clicks on the radio, and when api value_set() called by
the developer we emit "elm,state,radio,*" signal. To support value change animation when
user interacts with radio. There is no way to distinguish the action in EDC.
This "elm,activate,radio,*" is a way which edc can make use to distinguish the state change signal
by the user action or due to api call.
Reviewers: Hermet, raster, cedric
Reviewed By: cedric
Differential Revision: https://phab.enlightenment.org/D2829
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
2015-07-29 14:14:30 -07:00
|
|
|
}
|
2014-10-24 04:32:08 -07:00
|
|
|
if (_elm_config->atspi_mode)
|
|
|
|
{
|
|
|
|
if (sd->state)
|
|
|
|
{
|
2019-03-05 14:00:37 -08:00
|
|
|
efl_access_state_changed_signal_emit(obj, EFL_ACCESS_STATE_TYPE_CHECKED, EINA_TRUE);
|
2014-10-24 04:32:08 -07:00
|
|
|
}
|
|
|
|
}
|
2009-02-24 01:23:51 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-02-25 11:50:45 -08:00
|
|
|
static void
|
2017-05-22 02:56:52 -07:00
|
|
|
_state_set_all(Efl_Ui_Radio_Data *sd, Eina_Bool activate)
|
2009-02-25 11:50:45 -08:00
|
|
|
{
|
|
|
|
const Eina_List *l;
|
2012-05-02 18:19:05 -07:00
|
|
|
Eina_Bool disabled = EINA_FALSE;
|
2012-05-03 15:43:31 -07:00
|
|
|
Evas_Object *child, *selected = NULL;
|
|
|
|
|
2012-10-01 00:36:27 -07:00
|
|
|
EINA_LIST_FOREACH(sd->group->radios, l, child)
|
2009-02-25 11:50:45 -08:00
|
|
|
{
|
2012-05-03 15:43:31 -07:00
|
|
|
ELM_RADIO_DATA_GET(child, sdc);
|
|
|
|
|
|
|
|
if (sdc->state) selected = child;
|
|
|
|
if (sdc->value == sd->group->value)
|
2009-08-27 01:09:17 -07:00
|
|
|
{
|
radio: add "elm,activate,radio,on" and "elm,activate,radio,off" signal to support value change animation.
Summary:
Currently when user clicks on the radio, and when api value_set() called by
the developer we emit "elm,state,radio,*" signal. To support value change animation when
user interacts with radio. There is no way to distinguish the action in EDC.
This "elm,activate,radio,*" is a way which edc can make use to distinguish the state change signal
by the user action or due to api call.
Reviewers: Hermet, raster, cedric
Reviewed By: cedric
Differential Revision: https://phab.enlightenment.org/D2829
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
2015-07-29 14:14:30 -07:00
|
|
|
_state_set(child, EINA_TRUE, activate);
|
2012-05-03 15:43:31 -07:00
|
|
|
if (!sdc->state) disabled = EINA_TRUE;
|
2009-08-27 01:09:17 -07:00
|
|
|
}
|
radio: add "elm,activate,radio,on" and "elm,activate,radio,off" signal to support value change animation.
Summary:
Currently when user clicks on the radio, and when api value_set() called by
the developer we emit "elm,state,radio,*" signal. To support value change animation when
user interacts with radio. There is no way to distinguish the action in EDC.
This "elm,activate,radio,*" is a way which edc can make use to distinguish the state change signal
by the user action or due to api call.
Reviewers: Hermet, raster, cedric
Reviewed By: cedric
Differential Revision: https://phab.enlightenment.org/D2829
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
2015-07-29 14:14:30 -07:00
|
|
|
else _state_set(child, EINA_FALSE, activate);
|
2009-02-25 11:50:45 -08:00
|
|
|
}
|
2012-05-03 15:43:31 -07:00
|
|
|
|
radio: add "elm,activate,radio,on" and "elm,activate,radio,off" signal to support value change animation.
Summary:
Currently when user clicks on the radio, and when api value_set() called by
the developer we emit "elm,state,radio,*" signal. To support value change animation when
user interacts with radio. There is no way to distinguish the action in EDC.
This "elm,activate,radio,*" is a way which edc can make use to distinguish the state change signal
by the user action or due to api call.
Reviewers: Hermet, raster, cedric
Reviewed By: cedric
Differential Revision: https://phab.enlightenment.org/D2829
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
2015-07-29 14:14:30 -07:00
|
|
|
if ((disabled) && (selected)) _state_set(selected, 1, activate);
|
2009-02-25 11:50:45 -08:00
|
|
|
}
|
|
|
|
|
2009-02-24 01:23:51 -08:00
|
|
|
static void
|
2010-09-22 10:45:43 -07:00
|
|
|
_activate(Evas_Object *obj)
|
2009-02-24 01:23:51 -08:00
|
|
|
{
|
2012-05-03 15:43:31 -07:00
|
|
|
ELM_RADIO_DATA_GET(obj, sd);
|
|
|
|
|
|
|
|
if (sd->group->value == sd->value) return;
|
|
|
|
|
2012-11-26 03:18:04 -08:00
|
|
|
if ((!_elm_config->access_mode) ||
|
2011-09-18 22:22:22 -07:00
|
|
|
(_elm_access_2nd_click_timeout(obj)))
|
|
|
|
{
|
2012-05-03 15:43:31 -07:00
|
|
|
sd->group->value = sd->value;
|
|
|
|
if (sd->group->valuep) *(sd->group->valuep) = sd->group->value;
|
|
|
|
|
radio: add "elm,activate,radio,on" and "elm,activate,radio,off" signal to support value change animation.
Summary:
Currently when user clicks on the radio, and when api value_set() called by
the developer we emit "elm,state,radio,*" signal. To support value change animation when
user interacts with radio. There is no way to distinguish the action in EDC.
This "elm,activate,radio,*" is a way which edc can make use to distinguish the state change signal
by the user action or due to api call.
Reviewers: Hermet, raster, cedric
Reviewed By: cedric
Differential Revision: https://phab.enlightenment.org/D2829
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
2015-07-29 14:14:30 -07:00
|
|
|
_state_set_all(sd, EINA_TRUE);
|
2012-05-03 15:43:31 -07:00
|
|
|
|
2012-11-26 03:18:04 -08:00
|
|
|
if (_elm_config->access_mode)
|
2011-09-18 22:22:22 -07:00
|
|
|
_elm_access_say(E_("State: On"));
|
2016-08-22 15:40:39 -07:00
|
|
|
efl_event_callback_legacy_call
|
2017-05-22 23:41:17 -07:00
|
|
|
(obj, EFL_UI_RADIO_EVENT_CHANGED, NULL);
|
2015-06-09 06:33:29 -07:00
|
|
|
|
2011-09-18 22:22:22 -07:00
|
|
|
}
|
2010-09-22 10:45:43 -07:00
|
|
|
}
|
|
|
|
|
2014-04-14 22:54:58 -07:00
|
|
|
static Eina_Bool
|
|
|
|
_key_action_activate(Evas_Object *obj, const char *params EINA_UNUSED)
|
|
|
|
{
|
|
|
|
_activate(obj);
|
|
|
|
return EINA_TRUE;
|
|
|
|
}
|
|
|
|
|
2019-03-04 10:37:07 -08:00
|
|
|
EOLIAN static Eina_Error
|
2018-01-07 20:55:35 -08:00
|
|
|
_efl_ui_radio_efl_ui_widget_theme_apply(Eo *obj, Efl_Ui_Radio_Data *sd)
|
2012-05-02 10:00:42 -07:00
|
|
|
{
|
2019-03-04 10:36:41 -08:00
|
|
|
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EFL_UI_THEME_APPLY_ERROR_GENERIC);
|
2019-03-04 10:37:07 -08:00
|
|
|
Eina_Error int_ret = EFL_UI_THEME_APPLY_ERROR_GENERIC;
|
2017-10-23 22:03:46 -07:00
|
|
|
int_ret = efl_ui_widget_theme_apply(efl_super(obj, EFL_UI_CHECK_CLASS));
|
2019-03-04 10:36:41 -08:00
|
|
|
if (int_ret == EFL_UI_THEME_APPLY_ERROR_GENERIC) return int_ret;
|
2012-05-03 15:43:31 -07:00
|
|
|
|
2018-04-26 04:24:09 -07:00
|
|
|
if (elm_widget_is_legacy(obj))
|
|
|
|
{
|
|
|
|
if (sd->state) elm_layout_signal_emit(obj, "elm,state,radio,on", "elm");
|
|
|
|
else elm_layout_signal_emit(obj, "elm,state,radio,off", "elm");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (sd->state) elm_layout_signal_emit(obj, "efl,state,radio,on", "efl");
|
|
|
|
else elm_layout_signal_emit(obj, "efl,state,radio,off", "efl");
|
|
|
|
}
|
2012-05-03 15:43:31 -07:00
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
edje_object_message_signal_process(wd->resize_obj);
|
2012-05-03 15:43:31 -07:00
|
|
|
|
2017-08-02 23:20:58 -07:00
|
|
|
elm_layout_sizing_eval(obj);
|
2012-05-03 15:43:31 -07:00
|
|
|
|
theme: return enum from elm_widget_style_set instead of bool
Summary:
if trying to apply incorrect theme, widget apply default theme and return TRUE.
so there is no way to check it really apply correct theme.
To resolve this problem, _elm_theme_set return three type enum
* related history : 4ca3ef45146e05908a13d1010909abeba9693ad6
* elm_object_style_set is public api, so I didn't change it.
* typedef name [ Theme_Apply ] is temporarily, please suggest better one.
@fix
Reviewers: singh.amitesh, herb, Hermet, cedric, jpeg, raster
Subscribers: cedric, jpeg
Differential Revision: https://phab.enlightenment.org/D4073
2016-06-30 23:09:42 -07:00
|
|
|
return int_ret;
|
2012-05-03 15:43:31 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_radio_on_cb(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
const char *emission EINA_UNUSED,
|
|
|
|
const char *source EINA_UNUSED)
|
2011-07-04 03:13:43 -07:00
|
|
|
{
|
2012-05-03 15:43:31 -07:00
|
|
|
_activate(data);
|
2011-07-04 03:13:43 -07:00
|
|
|
}
|
|
|
|
|
2011-09-18 22:22:22 -07:00
|
|
|
static char *
|
2014-01-06 06:30:02 -08:00
|
|
|
_access_info_cb(void *data EINA_UNUSED, Evas_Object *obj)
|
2011-09-18 22:22:22 -07:00
|
|
|
{
|
|
|
|
const char *txt = elm_widget_access_info_get(obj);
|
2012-05-03 15:43:31 -07:00
|
|
|
|
|
|
|
if (!txt) txt = elm_layout_text_get(obj, NULL);
|
2011-09-18 22:22:22 -07:00
|
|
|
if (txt) return strdup(txt);
|
2012-05-03 15:43:31 -07:00
|
|
|
|
2011-09-18 22:22:22 -07:00
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static char *
|
2014-01-06 06:30:02 -08:00
|
|
|
_access_state_cb(void *data EINA_UNUSED, Evas_Object *obj)
|
2011-09-18 22:22:22 -07:00
|
|
|
{
|
2012-05-03 15:43:31 -07:00
|
|
|
ELM_RADIO_DATA_GET(obj, sd);
|
|
|
|
|
|
|
|
if (elm_widget_disabled_get(obj)) return strdup(E_("State: Disabled"));
|
|
|
|
if (sd->state) return strdup(E_("State: On"));
|
|
|
|
|
2011-09-18 22:22:22 -07:00
|
|
|
return strdup(E_("State: Off"));
|
|
|
|
}
|
|
|
|
|
2017-11-01 10:15:48 -07:00
|
|
|
EOLIAN static Eo *
|
|
|
|
_efl_ui_radio_efl_object_constructor(Eo *obj, Efl_Ui_Radio_Data *pd)
|
|
|
|
{
|
2017-11-14 05:03:25 -08:00
|
|
|
if (!elm_widget_theme_klass_get(obj))
|
|
|
|
elm_widget_theme_klass_set(obj, "radio");
|
2017-11-01 10:15:48 -07:00
|
|
|
obj = efl_constructor(efl_super(obj, MY_CLASS));
|
|
|
|
evas_object_smart_callbacks_descriptions_set(obj, _smart_callbacks);
|
2013-08-26 22:19:19 -07:00
|
|
|
|
2017-11-01 10:15:48 -07:00
|
|
|
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL);
|
2018-04-26 04:24:09 -07:00
|
|
|
|
|
|
|
if (elm_widget_is_legacy(obj))
|
|
|
|
elm_layout_signal_callback_add
|
|
|
|
(obj, "elm,action,radio,toggle", "*", _radio_on_cb, obj);
|
|
|
|
else
|
|
|
|
elm_layout_signal_callback_add
|
|
|
|
(obj, "efl,action,radio,toggle", "*", _radio_on_cb, obj);
|
2012-05-03 15:43:31 -07:00
|
|
|
|
2017-11-01 10:15:48 -07:00
|
|
|
pd->group = calloc(1, sizeof(Group));
|
|
|
|
pd->group->radios = eina_list_append(pd->group->radios, obj);
|
2012-05-03 15:43:31 -07:00
|
|
|
|
|
|
|
elm_layout_sizing_eval(obj);
|
|
|
|
|
2018-04-03 04:27:30 -07:00
|
|
|
efl_access_object_role_set(obj, EFL_ACCESS_ROLE_RADIO_BUTTON);
|
2012-05-03 15:43:31 -07:00
|
|
|
_elm_access_text_set
|
2013-07-30 20:53:04 -07:00
|
|
|
(_elm_access_info_get(obj), ELM_ACCESS_TYPE, E_("Radio"));
|
2012-05-03 15:43:31 -07:00
|
|
|
_elm_access_callback_set
|
2013-07-30 20:53:04 -07:00
|
|
|
(_elm_access_info_get(obj), ELM_ACCESS_INFO, _access_info_cb, obj);
|
2012-05-03 15:43:31 -07:00
|
|
|
_elm_access_callback_set
|
2013-07-30 20:53:04 -07:00
|
|
|
(_elm_access_info_get(obj), ELM_ACCESS_STATE, _access_state_cb, obj);
|
2011-10-30 19:56:03 -07:00
|
|
|
|
2017-11-01 10:15:48 -07:00
|
|
|
return obj;
|
2012-11-25 22:32:53 -08:00
|
|
|
}
|
2012-05-03 15:43:31 -07:00
|
|
|
|
2017-11-01 10:15:48 -07:00
|
|
|
EOLIAN static void
|
|
|
|
_efl_ui_radio_efl_object_destructor(Eo *obj EINA_UNUSED, Efl_Ui_Radio_Data *pd)
|
2012-11-25 22:32:53 -08:00
|
|
|
{
|
2017-11-01 10:15:48 -07:00
|
|
|
pd->group->radios = eina_list_remove(pd->group->radios, obj);
|
|
|
|
if (!pd->group->radios) free(pd->group);
|
2015-05-19 05:34:07 -07:00
|
|
|
|
2017-11-01 10:15:48 -07:00
|
|
|
efl_destructor(efl_super(obj, MY_CLASS));
|
2009-02-24 01:23:51 -08:00
|
|
|
}
|
|
|
|
|
2014-03-26 00:50:10 -07:00
|
|
|
EOLIAN static void
|
2017-05-22 02:56:52 -07:00
|
|
|
_efl_ui_radio_group_add(Eo *obj, Efl_Ui_Radio_Data *sd, Evas_Object *group)
|
2012-11-25 22:32:53 -08:00
|
|
|
{
|
2012-05-03 15:43:31 -07:00
|
|
|
ELM_RADIO_DATA_GET(group, sdg);
|
|
|
|
|
|
|
|
if (!sdg)
|
2009-12-18 12:21:39 -08:00
|
|
|
{
|
2012-05-03 15:43:31 -07:00
|
|
|
if (eina_list_count(sd->group->radios) == 1) return;
|
|
|
|
sd->group->radios = eina_list_remove(sd->group->radios, obj);
|
|
|
|
sd->group = calloc(1, sizeof(Group));
|
|
|
|
sd->group->radios = eina_list_append(sd->group->radios, obj);
|
2009-12-18 12:21:39 -08:00
|
|
|
}
|
2012-05-03 15:43:31 -07:00
|
|
|
else if (sd->group == sdg->group)
|
|
|
|
return;
|
2009-12-18 12:21:39 -08:00
|
|
|
else
|
|
|
|
{
|
2012-05-03 15:43:31 -07:00
|
|
|
sd->group->radios = eina_list_remove(sd->group->radios, obj);
|
|
|
|
if (!sd->group->radios) free(sd->group);
|
|
|
|
sd->group = sdg->group;
|
|
|
|
sd->group->radios = eina_list_append(sd->group->radios, obj);
|
2009-12-18 12:21:39 -08:00
|
|
|
}
|
radio: add "elm,activate,radio,on" and "elm,activate,radio,off" signal to support value change animation.
Summary:
Currently when user clicks on the radio, and when api value_set() called by
the developer we emit "elm,state,radio,*" signal. To support value change animation when
user interacts with radio. There is no way to distinguish the action in EDC.
This "elm,activate,radio,*" is a way which edc can make use to distinguish the state change signal
by the user action or due to api call.
Reviewers: Hermet, raster, cedric
Reviewed By: cedric
Differential Revision: https://phab.enlightenment.org/D2829
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
2015-07-29 14:14:30 -07:00
|
|
|
if (sd->value == sd->group->value) _state_set(obj, EINA_TRUE, EINA_FALSE);
|
|
|
|
else _state_set(obj, EINA_FALSE, EINA_FALSE);
|
2009-02-24 01:23:51 -08:00
|
|
|
}
|
|
|
|
|
2014-03-26 00:50:10 -07:00
|
|
|
EOLIAN static void
|
2017-05-22 02:56:52 -07:00
|
|
|
_efl_ui_radio_state_value_set(Eo *obj, Efl_Ui_Radio_Data *sd, int value)
|
2012-11-25 22:32:53 -08:00
|
|
|
{
|
2012-05-03 15:43:31 -07:00
|
|
|
sd->value = value;
|
radio: add "elm,activate,radio,on" and "elm,activate,radio,off" signal to support value change animation.
Summary:
Currently when user clicks on the radio, and when api value_set() called by
the developer we emit "elm,state,radio,*" signal. To support value change animation when
user interacts with radio. There is no way to distinguish the action in EDC.
This "elm,activate,radio,*" is a way which edc can make use to distinguish the state change signal
by the user action or due to api call.
Reviewers: Hermet, raster, cedric
Reviewed By: cedric
Differential Revision: https://phab.enlightenment.org/D2829
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
2015-07-29 14:14:30 -07:00
|
|
|
if (sd->value == sd->group->value) _state_set(obj, EINA_TRUE, EINA_FALSE);
|
|
|
|
else _state_set(obj, EINA_FALSE, EINA_FALSE);
|
2009-02-24 01:23:51 -08:00
|
|
|
}
|
|
|
|
|
2014-03-26 00:50:10 -07:00
|
|
|
EOLIAN static int
|
2018-04-17 11:09:44 -07:00
|
|
|
_efl_ui_radio_state_value_get(const Eo *obj EINA_UNUSED, Efl_Ui_Radio_Data *sd)
|
2010-11-10 06:10:08 -08:00
|
|
|
{
|
2014-03-26 00:50:10 -07:00
|
|
|
return sd->value;
|
2012-11-25 22:32:53 -08:00
|
|
|
}
|
2012-05-03 15:43:31 -07:00
|
|
|
|
2014-03-26 00:50:10 -07:00
|
|
|
EOLIAN static void
|
efl_ui_check: make it undependend of nstate
Summary:
check can only display 2 states, and is only designed to do so.
Additionally, nstate inherits from button, which
brings in autorepeat, which is hileriously broken on check and cannot
really work.
Right now there is not even support in the theme for clickable. So its a
good idea to get rid of this for now IMO.
ref T7865
Reviewers: stefan_schmidt, zmike, segfaultxavi, akanad, YOhoho
Reviewed By: zmike
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Maniphest Tasks: T7865, T7867
Differential Revision: https://phab.enlightenment.org/D9018
2019-06-13 06:21:38 -07:00
|
|
|
_efl_ui_radio_group_value_set(Eo *obj EINA_UNUSED, Efl_Ui_Radio_Data *sd, int value)
|
2012-11-25 22:32:53 -08:00
|
|
|
{
|
2012-05-03 15:43:31 -07:00
|
|
|
if (value == sd->group->value) return;
|
|
|
|
sd->group->value = value;
|
|
|
|
if (sd->group->valuep) *(sd->group->valuep) = sd->group->value;
|
radio: add "elm,activate,radio,on" and "elm,activate,radio,off" signal to support value change animation.
Summary:
Currently when user clicks on the radio, and when api value_set() called by
the developer we emit "elm,state,radio,*" signal. To support value change animation when
user interacts with radio. There is no way to distinguish the action in EDC.
This "elm,activate,radio,*" is a way which edc can make use to distinguish the state change signal
by the user action or due to api call.
Reviewers: Hermet, raster, cedric
Reviewed By: cedric
Differential Revision: https://phab.enlightenment.org/D2829
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
2015-07-29 14:14:30 -07:00
|
|
|
_state_set_all(sd, EINA_FALSE);
|
2009-02-24 01:23:51 -08:00
|
|
|
}
|
|
|
|
|
2014-03-26 00:50:10 -07:00
|
|
|
EOLIAN static int
|
efl_ui_check: make it undependend of nstate
Summary:
check can only display 2 states, and is only designed to do so.
Additionally, nstate inherits from button, which
brings in autorepeat, which is hileriously broken on check and cannot
really work.
Right now there is not even support in the theme for clickable. So its a
good idea to get rid of this for now IMO.
ref T7865
Reviewers: stefan_schmidt, zmike, segfaultxavi, akanad, YOhoho
Reviewed By: zmike
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Maniphest Tasks: T7865, T7867
Differential Revision: https://phab.enlightenment.org/D9018
2019-06-13 06:21:38 -07:00
|
|
|
_efl_ui_radio_group_value_get(const Eo *obj EINA_UNUSED, Efl_Ui_Radio_Data *sd)
|
2012-11-25 22:32:53 -08:00
|
|
|
{
|
2014-03-26 00:50:10 -07:00
|
|
|
return sd->group->value;
|
2009-02-24 01:23:51 -08:00
|
|
|
}
|
|
|
|
|
2014-03-26 00:50:10 -07:00
|
|
|
EOLIAN static void
|
2017-05-22 02:56:52 -07:00
|
|
|
_efl_ui_radio_value_pointer_set(Eo *obj EINA_UNUSED, Efl_Ui_Radio_Data *sd, int *valuep)
|
2012-11-25 22:32:53 -08:00
|
|
|
{
|
2009-02-24 01:23:51 -08:00
|
|
|
if (valuep)
|
|
|
|
{
|
2012-05-03 15:43:31 -07:00
|
|
|
sd->group->valuep = valuep;
|
|
|
|
if (*(sd->group->valuep) != sd->group->value)
|
2011-04-01 04:24:15 -07:00
|
|
|
{
|
2012-05-03 15:43:31 -07:00
|
|
|
sd->group->value = *(sd->group->valuep);
|
radio: add "elm,activate,radio,on" and "elm,activate,radio,off" signal to support value change animation.
Summary:
Currently when user clicks on the radio, and when api value_set() called by
the developer we emit "elm,state,radio,*" signal. To support value change animation when
user interacts with radio. There is no way to distinguish the action in EDC.
This "elm,activate,radio,*" is a way which edc can make use to distinguish the state change signal
by the user action or due to api call.
Reviewers: Hermet, raster, cedric
Reviewed By: cedric
Differential Revision: https://phab.enlightenment.org/D2829
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
2015-07-29 14:14:30 -07:00
|
|
|
_state_set_all(sd, EINA_FALSE);
|
2011-04-01 04:24:15 -07:00
|
|
|
}
|
2009-02-24 01:23:51 -08:00
|
|
|
}
|
2012-05-03 15:43:31 -07:00
|
|
|
else sd->group->valuep = NULL;
|
2009-02-24 01:23:51 -08:00
|
|
|
}
|
2012-02-21 03:46:01 -08:00
|
|
|
|
2014-03-26 00:50:10 -07:00
|
|
|
EOLIAN static Evas_Object*
|
2018-04-17 11:09:44 -07:00
|
|
|
_efl_ui_radio_selected_object_get(const Eo *obj EINA_UNUSED, Efl_Ui_Radio_Data *sd)
|
2012-02-21 03:46:01 -08:00
|
|
|
{
|
|
|
|
Eina_List *l;
|
|
|
|
Evas_Object *child;
|
|
|
|
|
2012-10-01 00:36:27 -07:00
|
|
|
EINA_LIST_FOREACH(sd->group->radios, l, child)
|
2012-02-21 03:46:01 -08:00
|
|
|
{
|
2012-05-03 15:43:31 -07:00
|
|
|
ELM_RADIO_DATA_GET(child, sdc);
|
|
|
|
|
2014-03-26 00:50:10 -07:00
|
|
|
if (sdc->value == sd->group->value) return child;
|
2012-02-21 03:46:01 -08:00
|
|
|
}
|
2012-05-03 15:43:31 -07:00
|
|
|
|
2014-03-26 00:50:10 -07:00
|
|
|
return NULL;
|
2012-11-25 22:32:53 -08:00
|
|
|
}
|
|
|
|
|
2014-03-26 00:50:10 -07:00
|
|
|
EOLIAN static Eina_Bool
|
2018-01-07 20:55:35 -08:00
|
|
|
_efl_ui_radio_efl_ui_widget_on_access_activate(Eo *obj, Efl_Ui_Radio_Data *_pd EINA_UNUSED, Efl_Ui_Activate act)
|
2012-11-26 03:18:04 -08:00
|
|
|
{
|
2014-03-26 00:50:10 -07:00
|
|
|
if (elm_widget_disabled_get(obj)) return EINA_FALSE;
|
2017-10-15 21:33:52 -07:00
|
|
|
if (act != EFL_UI_ACTIVATE_DEFAULT) return EINA_FALSE;
|
2012-11-26 03:18:04 -08:00
|
|
|
|
|
|
|
_activate(obj);
|
|
|
|
|
2014-03-26 00:50:10 -07:00
|
|
|
return EINA_TRUE;
|
2012-11-26 03:18:04 -08:00
|
|
|
}
|
|
|
|
|
2017-11-15 18:55:06 -08:00
|
|
|
EOLIAN const Efl_Access_Action_Data *
|
2018-04-17 11:09:44 -07:00
|
|
|
_efl_ui_radio_efl_access_widget_action_elm_actions_get(const Eo *obj EINA_UNUSED, Efl_Ui_Radio_Data *pd EINA_UNUSED)
|
2014-07-25 01:33:19 -07:00
|
|
|
{
|
2017-11-15 18:55:06 -08:00
|
|
|
static Efl_Access_Action_Data atspi_actions[] = {
|
2014-07-25 01:33:19 -07:00
|
|
|
{ "activate", "activate", NULL, _key_action_activate},
|
|
|
|
{ NULL, NULL, NULL, NULL }
|
|
|
|
};
|
|
|
|
return &atspi_actions[0];
|
|
|
|
}
|
|
|
|
|
2017-10-18 18:13:54 -07:00
|
|
|
EOLIAN Efl_Access_State_Set
|
2018-04-03 04:27:30 -07:00
|
|
|
_efl_ui_radio_efl_access_object_state_set_get(const Eo *obj, Efl_Ui_Radio_Data *pd EINA_UNUSED)
|
2014-10-24 04:32:08 -07:00
|
|
|
{
|
2017-10-18 18:13:54 -07:00
|
|
|
Efl_Access_State_Set ret;
|
2014-10-24 04:32:08 -07:00
|
|
|
|
2018-04-03 04:27:30 -07:00
|
|
|
ret = efl_access_object_state_set_get(efl_super(obj, EFL_UI_RADIO_CLASS));
|
2014-10-24 04:32:08 -07:00
|
|
|
if (obj == elm_radio_selected_object_get(obj))
|
2019-03-05 14:00:37 -08:00
|
|
|
STATE_TYPE_SET(ret, EFL_ACCESS_STATE_TYPE_CHECKED);
|
2014-10-24 04:32:08 -07:00
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2017-08-16 23:08:00 -07:00
|
|
|
/* Internal EO APIs and hidden overrides */
|
|
|
|
|
2017-11-20 03:39:34 -08:00
|
|
|
ELM_WIDGET_KEY_DOWN_DEFAULT_IMPLEMENT(efl_ui_radio, Efl_Ui_Radio_Data)
|
2017-08-07 19:48:31 -07:00
|
|
|
ELM_LAYOUT_TEXT_ALIASES_IMPLEMENT(MY_CLASS_PFX)
|
2017-07-27 23:35:10 -07:00
|
|
|
|
2017-05-22 02:56:52 -07:00
|
|
|
#define EFL_UI_RADIO_EXTRA_OPS \
|
2017-08-07 19:48:31 -07:00
|
|
|
ELM_LAYOUT_TEXT_ALIASES_OPS(MY_CLASS_PFX)
|
2017-05-18 01:52:17 -07:00
|
|
|
|
2017-05-22 02:56:52 -07:00
|
|
|
#include "efl_ui_radio.eo.c"
|
2019-05-29 04:03:37 -07:00
|
|
|
#include "efl_ui_radio_group.eo.c"
|
2019-03-05 14:00:37 -08:00
|
|
|
#include "efl_ui_radio_eo.legacy.c"
|
2017-11-02 01:26:12 -07:00
|
|
|
|
2019-03-05 14:00:37 -08:00
|
|
|
#include "efl_ui_radio_legacy_eo.h"
|
2018-02-26 02:59:31 -08:00
|
|
|
#include "efl_ui_radio_legacy_part.eo.h"
|
2018-01-23 22:50:58 -08:00
|
|
|
|
|
|
|
#define MY_CLASS_NAME_LEGACY "elm_radio"
|
2017-11-02 01:26:12 -07:00
|
|
|
/* Legacy APIs */
|
|
|
|
|
2018-01-23 22:50:58 -08:00
|
|
|
static void
|
|
|
|
_efl_ui_radio_legacy_class_constructor(Efl_Class *klass)
|
|
|
|
{
|
|
|
|
evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass);
|
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static Eo *
|
|
|
|
_efl_ui_radio_legacy_efl_object_constructor(Eo *obj, void *_pd EINA_UNUSED)
|
|
|
|
{
|
|
|
|
obj = efl_constructor(efl_super(obj, EFL_UI_RADIO_LEGACY_CLASS));
|
|
|
|
efl_canvas_object_type_set(obj, MY_CLASS_NAME_LEGACY);
|
2018-10-22 04:39:06 -07:00
|
|
|
legacy_object_focus_handle(obj);
|
2018-01-23 22:50:58 -08:00
|
|
|
return obj;
|
|
|
|
}
|
|
|
|
|
2018-02-26 02:59:31 -08:00
|
|
|
/* FIXME: replicated from elm_layout just because radio's icon spot
|
|
|
|
* is elm.swallow.content, not elm.swallow.icon. Fix that whenever we
|
|
|
|
* can changed the theme API */
|
|
|
|
static void
|
2018-06-18 20:42:09 -07:00
|
|
|
_icon_signal_emit(Evas_Object *obj)
|
2018-02-26 02:59:31 -08:00
|
|
|
{
|
|
|
|
char buf[63];
|
|
|
|
Eo *edje;
|
|
|
|
|
|
|
|
edje = elm_widget_resize_object_get(obj);
|
|
|
|
if (!edje) return;
|
2018-06-18 20:42:09 -07:00
|
|
|
snprintf(buf, sizeof(buf), "elm,state,icon,%s",
|
|
|
|
elm_layout_content_get(obj, "icon") ? "visible" : "hidden");
|
2018-02-26 02:59:31 -08:00
|
|
|
|
|
|
|
elm_layout_signal_emit(obj, buf, "elm");
|
|
|
|
edje_object_message_signal_process(edje);
|
|
|
|
elm_layout_sizing_eval(obj);
|
|
|
|
}
|
|
|
|
|
2019-03-04 10:37:07 -08:00
|
|
|
EOLIAN static Eina_Error
|
2018-02-26 02:59:31 -08:00
|
|
|
_efl_ui_radio_legacy_efl_ui_widget_theme_apply(Eo *obj, void *_pd EINA_UNUSED)
|
|
|
|
{
|
2019-03-04 10:37:07 -08:00
|
|
|
Eina_Error int_ret = EFL_UI_THEME_APPLY_ERROR_GENERIC;
|
2018-02-26 02:59:31 -08:00
|
|
|
int_ret = efl_ui_widget_theme_apply(efl_super(obj, EFL_UI_RADIO_LEGACY_CLASS));
|
2019-03-04 10:36:41 -08:00
|
|
|
if (int_ret == EFL_UI_THEME_APPLY_ERROR_GENERIC) return int_ret;
|
2018-02-26 02:59:31 -08:00
|
|
|
|
|
|
|
/* FIXME: replicated from elm_layout just because radio's icon
|
|
|
|
* spot is elm.swallow.content, not elm.swallow.icon. Fix that
|
|
|
|
* whenever we can changed the theme API */
|
2018-06-18 20:42:09 -07:00
|
|
|
_icon_signal_emit(obj);
|
2018-02-26 02:59:31 -08:00
|
|
|
|
|
|
|
return int_ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* FIXME: replicated from elm_layout just because radio's icon spot
|
|
|
|
* is elm.swallow.content, not elm.swallow.icon. Fix that whenever we
|
|
|
|
* can changed the theme API */
|
|
|
|
EOLIAN static Eina_Bool
|
|
|
|
_efl_ui_radio_legacy_efl_ui_widget_widget_sub_object_del(Eo *obj, void *_pd EINA_UNUSED, Evas_Object *sobj)
|
|
|
|
{
|
|
|
|
Eina_Bool int_ret = EINA_FALSE;
|
|
|
|
|
|
|
|
int_ret = elm_widget_sub_object_del(efl_super(obj, EFL_UI_RADIO_LEGACY_CLASS), sobj);
|
|
|
|
if (!int_ret) return EINA_FALSE;
|
|
|
|
|
2018-06-18 20:42:09 -07:00
|
|
|
_icon_signal_emit(obj);
|
2018-02-26 02:59:31 -08:00
|
|
|
|
|
|
|
return EINA_TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* FIXME: replicated from elm_layout just because radio's icon spot
|
|
|
|
* is elm.swallow.content, not elm.swallow.icon. Fix that whenever we
|
|
|
|
* can changed the theme API */
|
|
|
|
static Eina_Bool
|
|
|
|
_efl_ui_radio_legacy_content_set(Eo *obj, void *_pd EINA_UNUSED, const char *part, Evas_Object *content)
|
|
|
|
{
|
|
|
|
Eina_Bool int_ret = EINA_FALSE;
|
|
|
|
|
|
|
|
int_ret = efl_content_set(efl_part(efl_super(obj, EFL_UI_RADIO_LEGACY_CLASS), part), content);
|
|
|
|
if (!int_ret) return EINA_FALSE;
|
|
|
|
|
2018-06-18 20:42:09 -07:00
|
|
|
_icon_signal_emit(obj);
|
2018-02-26 02:59:31 -08:00
|
|
|
|
|
|
|
return EINA_TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Efl.Part begin */
|
|
|
|
|
|
|
|
static Eina_Bool
|
|
|
|
_part_is_efl_ui_radio_legacy_part(const Eo *obj EINA_UNUSED, const char *part)
|
|
|
|
{
|
|
|
|
return eina_streq(part, "elm.swallow.content");
|
|
|
|
}
|
|
|
|
|
|
|
|
ELM_PART_OVERRIDE_PARTIAL(efl_ui_radio_legacy, EFL_UI_RADIO_LEGACY, void, _part_is_efl_ui_radio_legacy_part)
|
2018-06-20 09:24:06 -07:00
|
|
|
ELM_PART_OVERRIDE_CONTENT_SET_NO_SD(efl_ui_radio_legacy)
|
2018-02-26 02:59:31 -08:00
|
|
|
#include "efl_ui_radio_legacy_part.eo.c"
|
|
|
|
|
|
|
|
/* Efl.Part end */
|
|
|
|
|
2017-11-02 01:26:12 -07:00
|
|
|
EAPI Evas_Object *
|
|
|
|
elm_radio_add(Evas_Object *parent)
|
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
|
2018-01-23 22:50:58 -08:00
|
|
|
return elm_legacy_add(EFL_UI_RADIO_LEGACY_CLASS, parent);
|
2017-11-02 01:26:12 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EAPI void
|
|
|
|
elm_radio_value_set(Evas_Object *obj, int value)
|
|
|
|
{
|
efl_ui_check: make it undependend of nstate
Summary:
check can only display 2 states, and is only designed to do so.
Additionally, nstate inherits from button, which
brings in autorepeat, which is hileriously broken on check and cannot
really work.
Right now there is not even support in the theme for clickable. So its a
good idea to get rid of this for now IMO.
ref T7865
Reviewers: stefan_schmidt, zmike, segfaultxavi, akanad, YOhoho
Reviewed By: zmike
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Maniphest Tasks: T7865, T7867
Differential Revision: https://phab.enlightenment.org/D9018
2019-06-13 06:21:38 -07:00
|
|
|
efl_ui_radio_group_value_set(obj, value);
|
2017-11-02 01:26:12 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EAPI int
|
|
|
|
elm_radio_value_get(const Evas_Object *obj)
|
|
|
|
{
|
efl_ui_check: make it undependend of nstate
Summary:
check can only display 2 states, and is only designed to do so.
Additionally, nstate inherits from button, which
brings in autorepeat, which is hileriously broken on check and cannot
really work.
Right now there is not even support in the theme for clickable. So its a
good idea to get rid of this for now IMO.
ref T7865
Reviewers: stefan_schmidt, zmike, segfaultxavi, akanad, YOhoho
Reviewed By: zmike
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Maniphest Tasks: T7865, T7867
Differential Revision: https://phab.enlightenment.org/D9018
2019-06-13 06:21:38 -07:00
|
|
|
return efl_ui_radio_group_value_get(obj);
|
2017-11-02 01:26:12 -07:00
|
|
|
}
|
2018-01-23 22:50:58 -08:00
|
|
|
|
2019-03-05 14:00:37 -08:00
|
|
|
#include "efl_ui_radio_legacy_eo.c"
|