win: no longer segfaults from typop with multiple files

This commit is contained in:
Boris Faure 2019-10-10 22:55:21 +02:00
parent 6b8e6f0516
commit 80124a72ca
1 changed files with 24 additions and 25 deletions

View File

@ -4085,6 +4085,24 @@ _cb_media_loop(void *data,
} }
} }
static void
_popmedia_queue_add(Term *term, const char *src,
Eina_Bool from_user_interaction)
{
struct Pop_Media *pm = calloc(1, sizeof(struct Pop_Media));
if (!pm)
return;
pm->src = eina_stringshare_add(src);
pm->from_user_interaction = from_user_interaction;
term->popmedia_queue = eina_list_append(term->popmedia_queue, pm);
if (!term->popmedia)
_popmedia_queue_process(term);
}
static void static void
_popmedia_show(Term *term, const char *src, Media_Type type) _popmedia_show(Term *term, const char *src, Media_Type type)
{ {
@ -4094,14 +4112,15 @@ _popmedia_show(Term *term, const char *src, Media_Type type)
EINA_SAFETY_ON_NULL_RETURN(config); EINA_SAFETY_ON_NULL_RETURN(config);
if (term->popmedia) if (term->popmedia)
{ {
const char *s; struct Pop_Media *pm;
EINA_LIST_FREE(term->popmedia_queue, s) /* Flush queue */
EINA_LIST_FREE(term->popmedia_queue, pm)
{ {
eina_stringshare_del(s); eina_stringshare_del(pm->src);
} }
term->popmedia_queue = eina_list_append(term->popmedia_queue, /* queue new item */
eina_stringshare_add(src)); _popmedia_queue_add(term, src, EINA_FALSE);
edje_object_signal_emit(term->bg, "popmedia,off", "terminology"); edje_object_signal_emit(term->bg, "popmedia,off", "terminology");
return; return;
} }
@ -4162,7 +4181,6 @@ _ty_http_head_delete(Ty_Http_Head *ty_head)
free(ty_head); free(ty_head);
} }
static Eina_Bool static Eina_Bool
_media_http_head_timeout(void *data) _media_http_head_timeout(void *data)
{ {
@ -4307,8 +4325,6 @@ error:
} }
} }
static void static void
_popmedia_queue_process(Term *term) _popmedia_queue_process(Term *term)
{ {
@ -4326,23 +4342,6 @@ _popmedia_queue_process(Term *term)
free(pm); free(pm);
} }
static void
_popmedia_queue_add(Term *term, const char *src,
Eina_Bool from_user_interaction)
{
struct Pop_Media *pm = calloc(1, sizeof(struct Pop_Media));
if (!pm)
return;
pm->src = eina_stringshare_add(src);
pm->from_user_interaction = from_user_interaction;
term->popmedia_queue = eina_list_append(term->popmedia_queue, pm);
if (!term->popmedia)
_popmedia_queue_process(term);
}
static void static void
_cb_popup(void *data, _cb_popup(void *data,
Evas_Object *_obj EINA_UNUSED, Evas_Object *_obj EINA_UNUSED,