forked from enlightenment/enlightenment
parent
d9d176a8fc
commit
285abec812
|
@ -52,6 +52,7 @@ static int _e_app_copy (E_App *dst, E_App *src);
|
||||||
static void _e_app_save_order (E_App *app);
|
static void _e_app_save_order (E_App *app);
|
||||||
static int _e_app_cb_event_border_add(void *data, int type, void *event);
|
static int _e_app_cb_event_border_add(void *data, int type, void *event);
|
||||||
static int _e_app_cb_expire_timer (void *data);
|
static int _e_app_cb_expire_timer (void *data);
|
||||||
|
static E_App *_e_app_ecore_exe_find (Ecore_Exe *exe);
|
||||||
|
|
||||||
/* local subsystem globals */
|
/* local subsystem globals */
|
||||||
static Evas_Hash *_e_apps = NULL;
|
static Evas_Hash *_e_apps = NULL;
|
||||||
|
@ -510,7 +511,8 @@ e_app_exec(E_App *a, int launch_id)
|
||||||
if (!a->exe) return 0;
|
if (!a->exe) return 0;
|
||||||
/* FIXME: set up locale, encoding and input method env vars if they are in
|
/* FIXME: set up locale, encoding and input method env vars if they are in
|
||||||
* the eapp file */
|
* the eapp file */
|
||||||
inst = calloc(1, sizeof(E_App_Instance));
|
inst = E_NEW(E_App_Instance, 1);
|
||||||
|
if (!inst) return 0;
|
||||||
exe = ecore_exe_run(a->exe, inst);
|
exe = ecore_exe_run(a->exe, inst);
|
||||||
if (!exe)
|
if (!exe)
|
||||||
{
|
{
|
||||||
|
@ -1643,56 +1645,42 @@ static int
|
||||||
_e_apps_cb_exit(void *data, int type, void *event)
|
_e_apps_cb_exit(void *data, int type, void *event)
|
||||||
{
|
{
|
||||||
Ecore_Event_Exe_Exit *ev;
|
Ecore_Event_Exe_Exit *ev;
|
||||||
|
Evas_List *l;
|
||||||
E_App *a;
|
E_App *a;
|
||||||
|
|
||||||
/* FIXME: Check if we launched this exe, else it isn't sure that
|
|
||||||
* the exe data is an E_App! (see 8 lines down also)
|
|
||||||
*/
|
|
||||||
ev = event;
|
|
||||||
if (ev->exe)
|
|
||||||
{
|
|
||||||
E_App_Instance *ai;
|
|
||||||
|
|
||||||
ai = ecore_exe_data_get(ev->exe);
|
|
||||||
if (!ai) /* related to FIXME above */
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
a = ai->app;
|
ev = event;
|
||||||
if (a)
|
if (!ev->exe) return 1;
|
||||||
|
a = _e_app_ecore_exe_find(ev->exe);
|
||||||
|
if (!a) return 1;
|
||||||
|
|
||||||
|
if (ev->exit_code == 127) /* /bin/sh uses this if cmd not found */
|
||||||
|
e_error_dialog_show(_("Run Error"),
|
||||||
|
_("Enlightenment was unable run the program:\n"
|
||||||
|
"\n"
|
||||||
|
"%s\n"
|
||||||
|
"\n"
|
||||||
|
"The command was not found\n"),
|
||||||
|
a->exe);
|
||||||
|
for (l = a->instances; l; l = l->next)
|
||||||
|
{
|
||||||
|
E_App_Instance *inst;
|
||||||
|
|
||||||
|
inst = l->data;
|
||||||
|
if (ev->exe == inst->exe)
|
||||||
{
|
{
|
||||||
Evas_List *l;
|
if (inst->expire_timer)
|
||||||
|
|
||||||
if (ev->exit_code == 127) /* /bin/sh uses this if cmd not found */
|
|
||||||
e_error_dialog_show(_("Run Error"),
|
|
||||||
_("Enlightenment was unable run the program:\n"
|
|
||||||
"\n"
|
|
||||||
"%s\n"
|
|
||||||
"\n"
|
|
||||||
"The command was not found\n"),
|
|
||||||
a->exe);
|
|
||||||
for (l = a->instances; l; l = l->next)
|
|
||||||
{
|
{
|
||||||
E_App_Instance *inst;
|
ecore_timer_del(inst->expire_timer);
|
||||||
|
inst->expire_timer = NULL;
|
||||||
inst = l->data;
|
|
||||||
if (ev->exe == inst->exe)
|
|
||||||
{
|
|
||||||
if (inst->expire_timer)
|
|
||||||
{
|
|
||||||
ecore_timer_del(inst->expire_timer);
|
|
||||||
inst->expire_timer = NULL;
|
|
||||||
}
|
|
||||||
inst->exe = NULL;
|
|
||||||
a->instances = evas_list_remove_list(a->instances, l);
|
|
||||||
free(inst);
|
|
||||||
_e_apps_start_pending = evas_list_remove(_e_apps_start_pending, a);
|
|
||||||
// e_object_unref(E_OBJECT(a));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
_e_app_change(a, E_APP_EXIT);
|
inst->exe = NULL;
|
||||||
|
a->instances = evas_list_remove_list(a->instances, l);
|
||||||
|
free(inst);
|
||||||
|
_e_apps_start_pending = evas_list_remove(_e_apps_start_pending, a);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
_e_app_change(a, E_APP_EXIT);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1749,3 +1737,25 @@ _e_app_cb_expire_timer(void *data)
|
||||||
_e_app_change(a, E_APP_READY_EXPIRE);
|
_e_app_change(a, E_APP_READY_EXPIRE);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static E_App *
|
||||||
|
_e_app_ecore_exe_find(Ecore_Exe *exe)
|
||||||
|
{
|
||||||
|
Evas_List *l, *l2;
|
||||||
|
|
||||||
|
for (l = _e_apps_start_pending; l; l = l->next)
|
||||||
|
{
|
||||||
|
E_App *a;
|
||||||
|
|
||||||
|
a = l->data;
|
||||||
|
for (l2 = a->instances; l2; l2 = l2->next)
|
||||||
|
{
|
||||||
|
E_App_Instance *inst;
|
||||||
|
|
||||||
|
inst = l2->data;
|
||||||
|
if (inst->exe == exe)
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue