Hey everyone,

I found more unexpected behavior in elm. This time it's about
list_append, directly followed by list_item_bring_in.
It just does not work. Nothing happens.

I wrote a small example and added a solution/workaround which should
either be integrated into elm or into examples/docs.

Basically all that is necessary is a main loop iteration between the
_append and the _bring_in calls.

-- 
Leif
#include <Elementary.h>

#define EXPAND(o) evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND)
#define FILL(o) evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL)

Evas_Object *list;
Evas_Object *newest_list_item;
char buf[50];
static int i = 0;

static void _on_done(void *data, Evas_Object *obj, void *event_info);

static void _btn_add_cb(void *data, Evas_Object *obj, void *event_info)
{
   snprintf(buf, sizeof(buf), "Item %i", i++);
   elm_list_item_append(list, buf, NULL, NULL, NULL, NULL);
}

static void _btn_bring_in_cb(void *data, Evas_Object *obj, void *event_info)
{
   Elm_Object_Item *it;

   it = eina_list_data_get(eina_list_last(elm_list_items_get(list)));
   elm_list_item_bring_in(it);
}

static void _btn_add_and_bring_in_cb(void *data, Evas_Object *obj, void *event_info)
{
   Elm_Object_Item *it;

   snprintf(buf, sizeof(buf), "Item %i", i++);
   it = elm_list_item_append(list, buf, NULL, NULL, NULL, NULL);
   ecore_main_loop_iterate();
   elm_list_item_bring_in(it);
}

int main(int argc, char *argv[])
{
   Evas_Object *win;
   Evas_Object *scroller, *box;
   Evas_Object *btn;
   Evas_Object *e;

   elm_init(argc, argv);

   win = elm_win_util_standard_add("Elm Playground", "Elm Playground - List append test");
   evas_object_show(win);
   evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);

   box = elm_box_add(win);
   evas_object_show(box);
   EXPAND(box);
   FILL(box);

   btn = elm_button_add(box);
   evas_object_show(btn);
   elm_object_text_set(btn, "Add item");
   evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0.0);
   evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 0.0);
   evas_object_smart_callback_add(btn, "clicked", _btn_add_cb, NULL);
   elm_box_pack_end(box, btn);

   btn = elm_button_add(box);
   evas_object_show(btn);
   elm_object_text_set(btn, "Bring in last item");
   evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0.0);
   evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 0.0);
   evas_object_smart_callback_add(btn, "clicked", _btn_bring_in_cb, NULL);
   elm_box_pack_end(box, btn);

   btn = elm_button_add(box);
   evas_object_show(btn);
   elm_object_text_set(btn, "Do both!");
   evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0.0);
   evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 0.0);
   evas_object_smart_callback_add(btn, "clicked", _btn_add_and_bring_in_cb, NULL);
   elm_box_pack_end(box, btn);

   list = elm_list_add(box);
   evas_object_show(list);
   EXPAND(list);
   FILL(list);
   for (i = 0; i < 20; i++)
     {
        snprintf(buf, sizeof(buf), "Item %i", i);
        elm_list_item_append(list, buf, NULL, NULL, NULL, NULL);
     }
   elm_list_go(list);
   elm_box_pack_end(box, list);

   elm_win_resize_object_add(win, box);
   evas_object_resize(win, 200, 400);

   elm_run();

   elm_shutdown();

   return 0;
}

   static void
_on_done(void *data, Evas_Object *obj, void *event_info)
{
   elm_exit();
}
------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here 
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to