rage browser mode - make it come up every time properly...
remove race conditions and stop mainloopfrom being too flodded.
This commit is contained in:
parent
4f0461cf39
commit
a74ff71242
|
@ -56,6 +56,7 @@ static Evas_Object *sc, *bt;
|
||||||
static Ecore_Thread *fill_thread = NULL;
|
static Ecore_Thread *fill_thread = NULL;
|
||||||
static Entry *dir_entry = NULL;
|
static Entry *dir_entry = NULL;
|
||||||
static Eina_List *entries = 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);
|
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;
|
if (!message) return;
|
||||||
message->type = type;
|
message->type = type;
|
||||||
message->entry = entry;
|
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);
|
ecore_thread_feedback(th, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -523,7 +527,7 @@ _fill_feedback(void *data, Ecore_Thread *th, void *msg)
|
||||||
if (message->type == TYPE_NEW)
|
if (message->type == TYPE_NEW)
|
||||||
{
|
{
|
||||||
eina_lock_take(&(entry->lock));
|
eina_lock_take(&(entry->lock));
|
||||||
if ((entry->dirs) || (entry->files))
|
// if ((entry->dirs) || (entry->files))
|
||||||
{
|
{
|
||||||
if (!entry->base)
|
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);
|
elm_table_pack(entry->table, o, 0, 0, 1, 1);
|
||||||
evas_object_show(o);
|
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);
|
elm_box_pack_end(bx, entry->base);
|
||||||
else
|
else
|
||||||
elm_box_pack_end(entry->parent->box, entry->base);
|
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);
|
_entry_files_redo(win, entry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// allow the freedback thread to step more
|
||||||
|
eina_lock_release(&step_lock);
|
||||||
free(msg);
|
free(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -591,6 +599,7 @@ _fill_end(void *data, Ecore_Thread *th)
|
||||||
{
|
{
|
||||||
Fill_Data *fdat = data;
|
Fill_Data *fdat = data;
|
||||||
if (th == fill_thread) fill_thread = NULL;
|
if (th == fill_thread) fill_thread = NULL;
|
||||||
|
eina_lock_free(&step_lock);
|
||||||
free(fdat->videos);
|
free(fdat->videos);
|
||||||
free(fdat);
|
free(fdat);
|
||||||
}
|
}
|
||||||
|
@ -639,6 +648,7 @@ _fill(Evas_Object *win)
|
||||||
if (!fdat) return;
|
if (!fdat) return;
|
||||||
fdat->videos = _videos_dir_get();
|
fdat->videos = _videos_dir_get();
|
||||||
fdat->win = win;
|
fdat->win = win;
|
||||||
|
eina_lock_new(&step_lock);
|
||||||
fill_thread = ecore_thread_feedback_run(_fill_thread, _fill_feedback,
|
fill_thread = ecore_thread_feedback_run(_fill_thread, _fill_feedback,
|
||||||
_fill_end, _fill_cancel,
|
_fill_end, _fill_cancel,
|
||||||
fdat, EINA_TRUE);
|
fdat, EINA_TRUE);
|
||||||
|
@ -948,7 +958,6 @@ browser_show(Evas_Object *win)
|
||||||
evas_object_show(bx);
|
evas_object_show(bx);
|
||||||
|
|
||||||
elm_object_part_content_set(inf->lay, "rage.browser", sc);
|
elm_object_part_content_set(inf->lay, "rage.browser", sc);
|
||||||
evas_object_show(sc);
|
|
||||||
|
|
||||||
_fill(win);
|
_fill(win);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue