fix exit code handling and propagate exit from pty->io->main
SVN revision: 72545
This commit is contained in:
parent
596357c77a
commit
26a88cd2dd
|
@ -70,6 +70,12 @@ _cb_change(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event __UNU
|
||||||
else ecore_timer_delay(flush_timer, 0.25);
|
else ecore_timer_delay(flush_timer, 0.25);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_cb_exited(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
|
||||||
|
{
|
||||||
|
elm_exit();
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
main_trans_update(const Config *config)
|
main_trans_update(const Config *config)
|
||||||
{
|
{
|
||||||
|
@ -281,6 +287,7 @@ elm_main(int argc, char **argv)
|
||||||
edje_object_part_swallow(bg, "terminology.content", o);
|
edje_object_part_swallow(bg, "terminology.content", o);
|
||||||
evas_object_smart_callback_add(o, "options", _cb_options, NULL);
|
evas_object_smart_callback_add(o, "options", _cb_options, NULL);
|
||||||
evas_object_smart_callback_add(o, "change", _cb_change, NULL);
|
evas_object_smart_callback_add(o, "change", _cb_change, NULL);
|
||||||
|
evas_object_smart_callback_add(o, "exited", _cb_exited, NULL);
|
||||||
evas_object_show(o);
|
evas_object_show(o);
|
||||||
|
|
||||||
main_trans_update(config);
|
main_trans_update(config);
|
||||||
|
|
|
@ -1130,6 +1130,12 @@ _smart_pty_cancel_sel(void *data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_smart_pty_exited(void *data)
|
||||||
|
{
|
||||||
|
evas_object_smart_callback_call(data, "exited", NULL);
|
||||||
|
}
|
||||||
|
|
||||||
Evas_Object *
|
Evas_Object *
|
||||||
termio_add(Evas_Object *parent, Config *config, const char *cmd, int w, int h)
|
termio_add(Evas_Object *parent, Config *config, const char *cmd, int w, int h)
|
||||||
{
|
{
|
||||||
|
@ -1161,6 +1167,8 @@ termio_add(Evas_Object *parent, Config *config, const char *cmd, int w, int h)
|
||||||
sd->pty->cb.set_icon.data = obj;
|
sd->pty->cb.set_icon.data = obj;
|
||||||
sd->pty->cb.cancel_sel.func = _smart_pty_cancel_sel;
|
sd->pty->cb.cancel_sel.func = _smart_pty_cancel_sel;
|
||||||
sd->pty->cb.cancel_sel.data = obj;
|
sd->pty->cb.cancel_sel.data = obj;
|
||||||
|
sd->pty->cb.exited.func = _smart_pty_exited;
|
||||||
|
sd->pty->cb.exited.data = obj;
|
||||||
_smart_size(obj, w, h, EINA_FALSE);
|
_smart_size(obj, w, h, EINA_FALSE);
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1488,8 +1488,8 @@ _cb_exe_exit(void *data, int type __UNUSED__, void *event)
|
||||||
Termpty *ty = data;
|
Termpty *ty = data;
|
||||||
|
|
||||||
if (ev->pid != ty->pid) return ECORE_CALLBACK_PASS_ON;
|
if (ev->pid != ty->pid) return ECORE_CALLBACK_PASS_ON;
|
||||||
// XXX: report via cb
|
ty->exit_code = ev->exit_code;
|
||||||
exit(ev->exit_code);
|
if (ty->cb.exited.func) ty->cb.exited.func(ty->cb.exited.data);
|
||||||
return ECORE_CALLBACK_PASS_ON;
|
return ECORE_CALLBACK_PASS_ON;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -68,7 +68,7 @@ struct _Termpty
|
||||||
struct {
|
struct {
|
||||||
void (*func) (void *data);
|
void (*func) (void *data);
|
||||||
void *data;
|
void *data;
|
||||||
} change, scroll, set_title, set_icon, cancel_sel;
|
} change, scroll, set_title, set_icon, cancel_sel, exited;
|
||||||
} cb;
|
} cb;
|
||||||
struct {
|
struct {
|
||||||
const char *title;
|
const char *title;
|
||||||
|
@ -84,6 +84,7 @@ struct _Termpty
|
||||||
int *buf;
|
int *buf;
|
||||||
int buflen;
|
int buflen;
|
||||||
Termstate state, save, swap;
|
Termstate state, save, swap;
|
||||||
|
int exit_code;
|
||||||
unsigned int altbuf : 1;
|
unsigned int altbuf : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue