forked from enlightenment/terminology
controls: avoid uses after free
CID1422109 CID1422110 CID1422111
This commit is contained in:
parent
6411f119ce
commit
4c9091c9c6
|
@ -22,11 +22,10 @@ typedef struct _Controls_Ctx {
|
||||||
} Controls_Ctx;
|
} Controls_Ctx;
|
||||||
|
|
||||||
|
|
||||||
|
/* /!\ can free ctx */
|
||||||
static void
|
static void
|
||||||
controls_hide(Controls_Ctx *ctx, Eina_Bool call_cb);
|
controls_hide(Controls_Ctx *ctx, Eina_Bool call_cb);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_cb_sel_on(void *data,
|
_cb_sel_on(void *data,
|
||||||
Evas_Object *_term EINA_UNUSED,
|
Evas_Object *_term EINA_UNUSED,
|
||||||
|
@ -80,6 +79,8 @@ _cb_ct_copy(void *data,
|
||||||
Evas_Object *term = ctx->term;
|
Evas_Object *term = ctx->term;
|
||||||
|
|
||||||
controls_hide(ctx, EINA_TRUE);
|
controls_hide(ctx, EINA_TRUE);
|
||||||
|
ctx = NULL;
|
||||||
|
|
||||||
termio_take_selection(term, ELM_SEL_TYPE_CLIPBOARD);
|
termio_take_selection(term, ELM_SEL_TYPE_CLIPBOARD);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,6 +93,8 @@ _cb_ct_paste(void *data,
|
||||||
Evas_Object *term = ctx->term;
|
Evas_Object *term = ctx->term;
|
||||||
|
|
||||||
controls_hide(ctx, EINA_TRUE);
|
controls_hide(ctx, EINA_TRUE);
|
||||||
|
ctx = NULL;
|
||||||
|
|
||||||
termio_paste_selection(term, ELM_SEL_TYPE_CLIPBOARD);
|
termio_paste_selection(term, ELM_SEL_TYPE_CLIPBOARD);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,8 +104,12 @@ _cb_ct_new(void *data,
|
||||||
void *_event EINA_UNUSED)
|
void *_event EINA_UNUSED)
|
||||||
{
|
{
|
||||||
Controls_Ctx *ctx = data;
|
Controls_Ctx *ctx = data;
|
||||||
|
Evas_Object *term = ctx->term;
|
||||||
|
|
||||||
controls_hide(ctx, EINA_TRUE);
|
controls_hide(ctx, EINA_TRUE);
|
||||||
main_new(ctx->term);
|
ctx = NULL;
|
||||||
|
|
||||||
|
main_new(term);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -111,8 +118,13 @@ _cb_ct_split_v(void *data,
|
||||||
void *_event EINA_UNUSED)
|
void *_event EINA_UNUSED)
|
||||||
{
|
{
|
||||||
Controls_Ctx *ctx = data;
|
Controls_Ctx *ctx = data;
|
||||||
|
Evas_Object *term = ctx->term;
|
||||||
|
|
||||||
|
|
||||||
controls_hide(ctx, EINA_TRUE);
|
controls_hide(ctx, EINA_TRUE);
|
||||||
split_vertically(ctx->win, ctx->term, NULL);
|
ctx = NULL;
|
||||||
|
|
||||||
|
split_vertically(term, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -121,8 +133,12 @@ _cb_ct_split_h(void *data,
|
||||||
void *_event EINA_UNUSED)
|
void *_event EINA_UNUSED)
|
||||||
{
|
{
|
||||||
Controls_Ctx *ctx = data;
|
Controls_Ctx *ctx = data;
|
||||||
|
Evas_Object *term = ctx->term;
|
||||||
|
|
||||||
controls_hide(ctx, EINA_TRUE);
|
controls_hide(ctx, EINA_TRUE);
|
||||||
split_horizontally(ctx->win, ctx->term, NULL);
|
ctx = NULL;
|
||||||
|
|
||||||
|
split_horizontally(term, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -141,7 +157,10 @@ _cb_ct_set_title(void *data,
|
||||||
{
|
{
|
||||||
Controls_Ctx *ctx = data;
|
Controls_Ctx *ctx = data;
|
||||||
Evas_Object *term = ctx->term;
|
Evas_Object *term = ctx->term;
|
||||||
|
|
||||||
controls_hide(ctx, EINA_TRUE);
|
controls_hide(ctx, EINA_TRUE);
|
||||||
|
ctx = NULL;
|
||||||
|
|
||||||
term_set_title(termio_term_get(term));
|
term_set_title(termio_term_get(term));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,6 +174,8 @@ _cb_ct_close(void *data,
|
||||||
Evas_Object *win = ctx->win;
|
Evas_Object *win = ctx->win;
|
||||||
|
|
||||||
controls_hide(ctx, EINA_TRUE);
|
controls_hide(ctx, EINA_TRUE);
|
||||||
|
ctx = NULL;
|
||||||
|
|
||||||
term_close(win, term, EINA_FALSE);
|
term_close(win, term, EINA_FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -624,16 +624,14 @@ _start(Ipc_Instance *instance, Eina_Bool need_scale_wizard)
|
||||||
if (instance->startup_split[i] == 'v')
|
if (instance->startup_split[i] == 'v')
|
||||||
{
|
{
|
||||||
cmd = eina_list_data_get(instance->cmds);
|
cmd = eina_list_data_get(instance->cmds);
|
||||||
split_vertically(win_evas_object_get(term_win_get(next)),
|
split_vertically(term_termio_get(next), cmd);
|
||||||
term_termio_get(next), cmd);
|
|
||||||
instance->cmds = eina_list_remove_list(instance->cmds,
|
instance->cmds = eina_list_remove_list(instance->cmds,
|
||||||
instance->cmds);
|
instance->cmds);
|
||||||
}
|
}
|
||||||
else if (instance->startup_split[i] == 'h')
|
else if (instance->startup_split[i] == 'h')
|
||||||
{
|
{
|
||||||
cmd = eina_list_data_get(instance->cmds);
|
cmd = eina_list_data_get(instance->cmds);
|
||||||
split_horizontally(win_evas_object_get(term_win_get(next)),
|
split_horizontally(term_termio_get(next), cmd);
|
||||||
term_termio_get(next), cmd);
|
|
||||||
instance->cmds = eina_list_remove_list(instance->cmds,
|
instance->cmds = eina_list_remove_list(instance->cmds,
|
||||||
instance->cmds);
|
instance->cmds);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3049,8 +3049,7 @@ _cb_size_hint(void *data,
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
split_horizontally(Evas_Object *_win EINA_UNUSED,
|
split_horizontally(Evas_Object *term,
|
||||||
Evas_Object *term,
|
|
||||||
const char *cmd)
|
const char *cmd)
|
||||||
{
|
{
|
||||||
Term *tm;
|
Term *tm;
|
||||||
|
@ -3064,8 +3063,7 @@ split_horizontally(Evas_Object *_win EINA_UNUSED,
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
split_vertically(Evas_Object *_win EINA_UNUSED,
|
split_vertically(Evas_Object *term,
|
||||||
Evas_Object *term,
|
|
||||||
const char *cmd)
|
const char *cmd)
|
||||||
{
|
{
|
||||||
Term *tm;
|
Term *tm;
|
||||||
|
|
|
@ -18,8 +18,8 @@ void term_set_title(Term *term);
|
||||||
void term_miniview_hide(Term *term);
|
void term_miniview_hide(Term *term);
|
||||||
Eina_Bool term_tab_go(Term *term, int tnum);
|
Eina_Bool term_tab_go(Term *term, int tnum);
|
||||||
|
|
||||||
void split_horizontally(Evas_Object *win, Evas_Object *term, const char *cmd);
|
void split_horizontally(Evas_Object *term, const char *cmd);
|
||||||
void split_vertically(Evas_Object *win, Evas_Object *term, const char *cmd);
|
void split_vertically(Evas_Object *term, const char *cmd);
|
||||||
|
|
||||||
|
|
||||||
Win *
|
Win *
|
||||||
|
|
Loading…
Reference in New Issue