Add a test to reveal a focus bug in Genlist/Gengrid

To reproduce:
 * elm_test -to "GenGrid Focus"
 * turn on the "Focus Highlight" checkbox
 * double-click an item to show a popup that should have the focus

As you can see the mouse-up event on the gengrid item steal the focus from the popup.
When, instead, the item is activated with the keyboard the popup correctly keep the focus.

I have this problem in both genlist and gengrid, so probably the error is not in the gengrid code, but somewhere else that I cannot find.

...any help appreciated
This commit is contained in:
Davide Andreoli 2016-01-24 14:35:49 +01:00
parent 8c6f8843d4
commit 6503b1fdfd
1 changed files with 31 additions and 2 deletions

View File

@ -1568,6 +1568,8 @@ test_gengrid_speed(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *e
evas_object_show(win);
}
/*** Gengrid Focus *********************************************************/
static void
_gengrid_focus_item_cb(void *data, Evas_Object *obj EINA_UNUSED,
void *event_info)
@ -1575,6 +1577,31 @@ _gengrid_focus_item_cb(void *data, Evas_Object *obj EINA_UNUSED,
printf("%s: %p\n", (char *)data, event_info);
}
static void
_gengrid_focus_popup_close_cb(void *data, Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
evas_object_del(data);
}
static void
_gengrid_focus_item_activated_cb(void *data, Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
Evas_Object *popup, *btn;
popup = elm_popup_add(data);
elm_object_text_set(popup, "This Popup must have the focus");
btn = elm_button_add(popup);
elm_object_text_set(btn, "Close");
elm_object_part_content_set(popup, "button1", btn);
evas_object_smart_callback_add(btn, "clicked",
_gengrid_focus_popup_close_cb, popup);
evas_object_show(popup);
}
static void
_gengrid_focus_key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED,
Evas_Object *obj EINA_UNUSED, void *event_info)
@ -1727,9 +1754,10 @@ test_gengrid_focus(void *data EINA_UNUSED,
evas_object_smart_callback_add(gengrid, "item,unfocused", _gengrid_focus_item_cb, "item,unfocused");
evas_object_smart_callback_add(gengrid, "selected", _gengrid_focus_item_cb, "selected");
evas_object_smart_callback_add(gengrid, "unselected", _gengrid_focus_item_cb, "unselected");
evas_object_smart_callback_add(gengrid, "activated", _gengrid_focus_item_cb, "activated");
evas_object_smart_callback_add(gengrid, "highlighted", _gengrid_focus_item_cb, "highlighted");
evas_object_smart_callback_add(gengrid, "unhighlighted", _gengrid_focus_item_cb, "unhighlighted");
evas_object_smart_callback_add(gengrid, "activated", _gengrid_focus_item_cb, "activated");
evas_object_smart_callback_add(gengrid, "activated", _gengrid_focus_item_activated_cb, win);
evas_object_event_callback_add(gengrid, EVAS_CALLBACK_KEY_DOWN, _gengrid_focus_key_down_cb, NULL);
gengrid2 = elm_gengrid_add(in_bx);
@ -1745,9 +1773,10 @@ test_gengrid_focus(void *data EINA_UNUSED,
evas_object_smart_callback_add(gengrid2, "item,unfocused", _gengrid_focus_item_cb, "item,unfocused");
evas_object_smart_callback_add(gengrid2, "selected", _gengrid_focus_item_cb, "selected");
evas_object_smart_callback_add(gengrid2, "unselected", _gengrid_focus_item_cb, "unselected");
evas_object_smart_callback_add(gengrid2, "activated", _gengrid_focus_item_cb, "activated");
evas_object_smart_callback_add(gengrid2, "highlighted", _gengrid_focus_item_cb, "highlighted");
evas_object_smart_callback_add(gengrid2, "unhighlighted", _gengrid_focus_item_cb, "unhighlighted");
evas_object_smart_callback_add(gengrid2, "activated", _gengrid_focus_item_cb, "activated");
evas_object_smart_callback_add(gengrid2, "activated", _gengrid_focus_item_activated_cb, win);
evas_object_event_callback_add(gengrid2, EVAS_CALLBACK_KEY_DOWN, _gengrid_focus_key_down_cb, NULL);
btn = elm_button_add(bx);