elementary: improve rendering stability by ordering queue like the displayed list.
authorcedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 2 Dec 2011 16:17:10 +0000 (16:17 +0000)
committercedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 2 Dec 2011 16:17:10 +0000 (16:17 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@65826 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/elm_genlist.c

index c11da64..468cb6d 100644 (file)
@@ -3411,12 +3411,16 @@ _item_idle_enterer(void *data)
 }
 
 static void
-_item_queue(Widget_Data      *wd,
-            Elm_Gen_Item *it)
+_item_queue(Widget_Data *wd,
+            Elm_Gen_Item *it,
+            Eina_Compare_Cb cb)
 {
    if (it->item->queued) return;
    it->item->queued = EINA_TRUE;
-   wd->queue = eina_list_append(wd->queue, it);
+   if (cb)
+     wd->queue = eina_list_sorted_insert(wd->queue, cb, it);
+   else
+     wd->queue = eina_list_append(wd->queue, it);
 // FIXME: why does a freeze then thaw here cause some genlist
 // elm_genlist_item_append() to be much much slower?
 //   evas_event_freeze(evas_object_evas_get(wd->obj));
@@ -3475,7 +3479,7 @@ _item_move_after(Elm_Gen_Item *it, Elm_Gen_Item *after)
    it->item->rel->relcount++;
    it->item->before = EINA_FALSE;
    if (after->item->group_item) it->item->group_item = after->item->group_item;
-   _item_queue(it->wd, it);
+   _item_queue(it->wd, it, NULL);
 
    evas_object_smart_callback_call(WIDGET(it), SIG_MOVED, it);
 }
@@ -3493,7 +3497,7 @@ _item_move_before(Elm_Gen_Item *it, Elm_Gen_Item *before)
    it->item->rel->relcount++;
    it->item->before = EINA_TRUE;
    if (before->item->group_item) it->item->group_item = before->item->group_item;
-   _item_queue(it->wd, it);
+   _item_queue(it->wd, it, NULL);
 
    evas_object_smart_callback_call(WIDGET(it), SIG_MOVED, it);
 }
@@ -3534,7 +3538,7 @@ elm_genlist_item_append(Evas_Object                  *obj,
         it->item->rel->relcount++;
      }
    it->item->before = EINA_FALSE;
-   _item_queue(wd, it);
+   _item_queue(wd, it, NULL);
    return it;
 }
 
@@ -3574,7 +3578,7 @@ elm_genlist_item_prepend(Evas_Object                  *obj,
         it->item->rel->relcount++;
      }
    it->item->before = EINA_TRUE;
-   _item_queue(wd, it);
+   _item_queue(wd, it, NULL);
    return it;
 }
 
@@ -3615,7 +3619,7 @@ elm_genlist_item_insert_after(Evas_Object                  *obj,
    it->item->rel = after;
    it->item->rel->relcount++;
    it->item->before = EINA_FALSE;
-   _item_queue(wd, it);
+   _item_queue(wd, it, NULL);
    return it;
 }
 
@@ -3655,7 +3659,7 @@ elm_genlist_item_insert_before(Evas_Object                  *obj,
    it->item->rel = before;
    it->item->rel->relcount++;
    it->item->before = EINA_TRUE;
-   _item_queue(wd, it);
+   _item_queue(wd, it, NULL);
    return it;
 }
 
@@ -3737,7 +3741,7 @@ elm_genlist_item_direct_sorted_insert(Evas_Object                  *obj,
         it->item->rel->relcount++;
      }
 
-   _item_queue(wd, it);
+   _item_queue(wd, it, comp);
 
    return it;
 }