From a74ff71242f8ffd740f478446c72a778c8dcc499 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Fri, 30 Jun 2017 19:42:52 +0900 Subject: [PATCH] rage browser mode - make it come up every time properly... remove race conditions and stop mainloopfrom being too flodded. --- src/bin/browser.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/bin/browser.c b/src/bin/browser.c index 8ddde84..326e6ea 100644 --- a/src/bin/browser.c +++ b/src/bin/browser.c @@ -56,6 +56,7 @@ static Evas_Object *sc, *bt; static Ecore_Thread *fill_thread = NULL; static Entry *dir_entry = NULL; static Eina_List *entries = NULL; +static Eina_Lock step_lock; static void _sel_go(Evas_Object *win EINA_UNUSED, Entry *base_entry, int x, int y); @@ -169,6 +170,9 @@ _fill_message(Ecore_Thread *th, Type type, Entry *entry) if (!message) return; message->type = type; message->entry = entry; + // take lock before sending message so we wait if the mainloop + // had not processed the previous message + eina_lock_take(&step_lock); ecore_thread_feedback(th, message); } @@ -523,7 +527,7 @@ _fill_feedback(void *data, Ecore_Thread *th, void *msg) if (message->type == TYPE_NEW) { eina_lock_take(&(entry->lock)); - if ((entry->dirs) || (entry->files)) +// if ((entry->dirs) || (entry->files)) { if (!entry->base) { @@ -568,7 +572,9 @@ _fill_feedback(void *data, Ecore_Thread *th, void *msg) elm_table_pack(entry->table, o, 0, 0, 1, 1); evas_object_show(o); - if (!entry->parent) + if ((!entry->parent) || + ((entry->parent) && (!entry->parent->parent)) || + (!entry->parent->box)) elm_box_pack_end(bx, entry->base); else elm_box_pack_end(entry->parent->box, entry->base); @@ -583,6 +589,8 @@ _fill_feedback(void *data, Ecore_Thread *th, void *msg) _entry_files_redo(win, entry); } } + // allow the freedback thread to step more + eina_lock_release(&step_lock); free(msg); } @@ -591,6 +599,7 @@ _fill_end(void *data, Ecore_Thread *th) { Fill_Data *fdat = data; if (th == fill_thread) fill_thread = NULL; + eina_lock_free(&step_lock); free(fdat->videos); free(fdat); } @@ -639,6 +648,7 @@ _fill(Evas_Object *win) if (!fdat) return; fdat->videos = _videos_dir_get(); fdat->win = win; + eina_lock_new(&step_lock); fill_thread = ecore_thread_feedback_run(_fill_thread, _fill_feedback, _fill_end, _fill_cancel, fdat, EINA_TRUE); @@ -948,7 +958,6 @@ browser_show(Evas_Object *win) evas_object_show(bx); elm_object_part_content_set(inf->lay, "rage.browser", sc); - evas_object_show(sc); _fill(win);