rimmed pushed a commit to branch master. http://git.enlightenment.org/tools/eflete.git/commit/?id=a8bcc955b05544abeceda3ce71c4e16acadc6c85
commit a8bcc955b05544abeceda3ce71c4e16acadc6c85 Author: Mykyta Biliavskyi <m.biliavs...@samsung.com> Date: Mon Jul 11 12:11:51 2016 +0300 Group navigator: fix validation on new part item add. For source group combobox added new callback "dismiss". Now on "item,selected" callback change current active item. But validation of choosen source group started only after combobox dismissed. --- src/bin/ui/workspace/group_navigator.c | 42 +++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/src/bin/ui/workspace/group_navigator.c b/src/bin/ui/workspace/group_navigator.c index 9bee211..0918fd8 100644 --- a/src/bin/ui/workspace/group_navigator.c +++ b/src/bin/ui/workspace/group_navigator.c @@ -803,6 +803,21 @@ _state_validate(void *data, } static void +_item_selected(void *data, + Evas_Object *obj __UNUSED__, + void *event_info) +{ + Part_List *pl = data; + + Combobox_Item *combo_item; + combo_item = elm_object_item_data_get(event_info); + if (combo_item) + pl->popup.item_selected = combo_item; + else + pl->popup.item_selected = NULL; +} + +static void _item_validate(void *data, Evas_Object *obj __UNUSED__, void *event_info) @@ -810,7 +825,6 @@ _item_validate(void *data, Part_List *pl = data; const char *name; Part_Item *item; - Eina_Bool valid; Eina_List *l; Combobox_Item *combo_item; @@ -822,12 +836,25 @@ _item_validate(void *data, pl->popup.item_selected = combo_item; name = elm_entry_entry_get(pl->popup.entry_name); - valid = (elm_validator_regexp_status_get(pl->name_validator) == ELM_REG_NOERROR); - valid = valid && pl->popup.item_selected && (pl->popup.item_selected->index != 0); + if (elm_validator_regexp_status_get(pl->name_validator) != ELM_REG_NOERROR) + goto item_data_invalidated; + + if ((!pl->popup.item_selected) || (pl->popup.item_selected && (pl->popup.item_selected->data == NULL)) || + !strcmp(_("Select the name of the source group."), elm_object_text_get(pl->popup.combobox))) + goto item_data_invalidated; + EINA_LIST_FOREACH(pl->part->items, l, item) - valid = valid && strcmp(item->name, name); + { + if (!strcmp(item->name, name)) + goto item_data_invalidated; + } + + popup_buttons_disabled_set(BTN_OK, false); + return; - popup_buttons_disabled_set(BTN_OK, !valid); +item_data_invalidated: + popup_buttons_disabled_set(BTN_OK, true); + return; } static void @@ -1421,8 +1448,6 @@ _popup_add_item_ok_clicked(void *data, assert(pl != NULL); - if (elm_validator_regexp_status_get(pl->name_validator) != ELM_REG_NOERROR) - return; assert(pl->part != NULL); @@ -1526,7 +1551,8 @@ _add_item_content_get(void *data, Evas_Object **to_focus) evas_object_smart_callback_add(pl->popup.combobox, "item,pressed", _combobox_item_pressed_cb, NULL); evas_object_show(pl->popup.combobox); - evas_object_smart_callback_add(pl->popup.combobox, "item,selected", _item_validate, pl); + evas_object_smart_callback_add(pl->popup.combobox, "dismissed", _item_validate, pl); + evas_object_smart_callback_add(pl->popup.combobox, "item,selected", _item_selected, pl); elm_object_part_content_set(item, "elm.swallow.content", pl->popup.combobox); elm_box_pack_end(box, item); --