forked from enlightenment/efl
check: reset flags that used for legacy 'changed' cb
Summary: in case of setting a state of check by calling a API, the flags that used for changed cb aren't changed. which causes that the callback not invoked when it should be. this patch resets the flags to make it work properly. Reviewers: bu5hm4n Subscribers: cedric, #reviewers, #committers Tags: #efl Reviewed-by: Marcel Hollerbach <mail@marcel-hollerbach.de> Differential Revision: https://phab.enlightenment.org/D10591
This commit is contained in:
parent
80c8ba2d6a
commit
a0dc31c733
|
@ -319,6 +319,9 @@ _efl_ui_check_efl_ui_selectable_selected_set(Eo *obj, Efl_Ui_Check_Data *pd, Ein
|
|||
|
||||
pd->selected = value;
|
||||
|
||||
pd->legacy_changed_emitted_select = !pd->selected;
|
||||
pd->legacy_changed_emitted_unselect = pd->selected;
|
||||
|
||||
if (!elm_widget_is_legacy(obj))
|
||||
efl_event_callback_call(obj, EFL_UI_EVENT_SELECTED_CHANGED, &pd->selected);
|
||||
}
|
||||
|
|
|
@ -6,6 +6,13 @@
|
|||
#include <Elementary.h>
|
||||
#include "elm_suite.h"
|
||||
|
||||
typedef struct _Check_Data
|
||||
{
|
||||
Evas_Object *check1;
|
||||
Evas_Object *check2;
|
||||
int value;
|
||||
} Check_Data;
|
||||
|
||||
EFL_START_TEST(elm_test_check_size)
|
||||
{
|
||||
Evas_Object *win, *check, *box;
|
||||
|
@ -146,6 +153,66 @@ EFL_START_TEST(elm_atspi_role_get)
|
|||
}
|
||||
EFL_END_TEST
|
||||
|
||||
static void
|
||||
_check_changed_cb(void *ptr, Evas_Object *obj, void *e EINA_UNUSED)
|
||||
{
|
||||
Check_Data *data = (Check_Data*) ptr;
|
||||
|
||||
if (obj == data->check1) {
|
||||
elm_check_state_set(data->check2, EINA_TRUE);
|
||||
} else if ( obj == data->check2) {
|
||||
elm_check_state_set(data->check1, EINA_FALSE);
|
||||
} else {
|
||||
ck_assert(EINA_FALSE);
|
||||
}
|
||||
data->value ++;
|
||||
}
|
||||
|
||||
EFL_START_TEST(elm_test_check_api_call)
|
||||
{
|
||||
Evas_Object *win, *check1, *check2, *box;
|
||||
Check_Data data ={0,};
|
||||
|
||||
win = elm_win_util_standard_add("check", "Check");
|
||||
|
||||
box = elm_box_add(win);
|
||||
evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
elm_win_resize_object_add(win, box);
|
||||
evas_object_show(box);
|
||||
|
||||
data.check1 = check1 = elm_check_add(box);
|
||||
elm_object_text_set(check1, "TEST TEST TEST");
|
||||
evas_object_smart_callback_add(check1, "changed", _check_changed_cb, &data);
|
||||
elm_box_pack_end(box, check1);
|
||||
evas_object_show(check1);
|
||||
|
||||
data.check2 = check2 = elm_check_add(box);
|
||||
elm_object_text_set(check2, "TEST TEST TEST");
|
||||
evas_object_smart_callback_add(check2, "changed", _check_changed_cb, &data);
|
||||
elm_box_pack_end(box, check2);
|
||||
evas_object_show(check2);
|
||||
|
||||
evas_object_show(win);
|
||||
|
||||
get_me_to_those_events(check1);
|
||||
|
||||
data.value = 0;
|
||||
click_object(data.check1);
|
||||
ecore_main_loop_iterate();
|
||||
ck_assert_int_eq(data.value, 1);
|
||||
|
||||
data.value = 0;
|
||||
click_object(data.check2);
|
||||
ecore_main_loop_iterate();
|
||||
ck_assert_int_eq(data.value, 1);
|
||||
|
||||
data.value = 0;
|
||||
click_object(data.check1);
|
||||
ecore_main_loop_iterate();
|
||||
ck_assert_int_eq(data.value, 1);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
void elm_test_check(TCase *tc)
|
||||
{
|
||||
tcase_add_test(tc, elm_test_check_size);
|
||||
|
@ -154,4 +221,5 @@ void elm_test_check(TCase *tc)
|
|||
tcase_add_test(tc, elm_test_check_state);
|
||||
tcase_add_loop_test(tc, elm_test_check_callbacks, 0, 2);
|
||||
tcase_add_test(tc, elm_atspi_role_get);
|
||||
tcase_add_test(tc, elm_test_check_api_call);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue