[Genlist] Fix Genlist item processing issue
authorTae-Hwan Kim <the81.kim@samsung.com>
Tue, 25 Jun 2013 08:22:22 +0000 (17:22 +0900)
committerSungho Kwak <sungho1.kwak@samsung.com>
Thu, 27 Jun 2013 05:52:59 +0000 (14:52 +0900)
Some applications (ex. music-player) append items on idler or animator
or something. In that case, Later queued items can be processed before
items previously queued because later items can be processed directly
and previous items can be processed on idle enterer.
So if there alreday exist queued items, do not process items directly.

Change-Id: Idf9331f8190e08094a782c4745a76c10578f20a4

src/lib/elm_genlist.c

index 32d50b7..ed9aa6f 100644 (file)
@@ -4204,7 +4204,6 @@ _item_queue(Elm_Genlist_Smart_Data *sd,
             Eina_Bool direct)
 {
    Evas_Coord vh;
-
    if (it->item->queued) return;
 
    if (sd->queue_idle_enterer)
@@ -4217,18 +4216,19 @@ _item_queue(Elm_Genlist_Smart_Data *sd,
    sd->calc_job = ecore_job_add(_calc_job, sd);
 
    sd->s_iface->content_viewport_size_get(ELM_WIDGET_DATA(sd)->obj, NULL, &vh);
-   if (direct && sd->prev_viewport_w && (sd->processed_sizes < vh))
+   if (!sd->queue && direct && sd->prev_viewport_w &&
+       (sd->processed_sizes < vh))
      {
         _item_process(sd, it);
         sd->processed_sizes += it->item->minh;
         return;
      }
+
    it->item->queued = EINA_TRUE;
    if (cb && !sd->requeued)
      sd->queue = eina_list_sorted_insert(sd->queue, cb, it);
    else
      sd->queue = eina_list_append(sd->queue, it);
-
 }
 
 /* If the application wants to know the relative item, use