infra for multiple terms per split slot.
This commit is contained in:
parent
7d90f43fff
commit
eca8593193
|
@ -42,6 +42,12 @@ _cb_ct_paste(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
|
||||||
termio_paste_clipboard(data);
|
termio_paste_clipboard(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_cb_ct_new(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
|
||||||
|
{
|
||||||
|
main_new(ct_win, ct_term);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_cb_ct_split_v(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
|
_cb_ct_split_v(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
|
||||||
{
|
{
|
||||||
|
@ -144,6 +150,16 @@ controls_toggle(Evas_Object *win, Evas_Object *bg, Evas_Object *term)
|
||||||
elm_box_pack_end(ct_boxh, o);
|
elm_box_pack_end(ct_boxh, o);
|
||||||
evas_object_show(o);
|
evas_object_show(o);
|
||||||
|
|
||||||
|
// XXX: need real icon
|
||||||
|
o = elm_button_add(win);
|
||||||
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
|
||||||
|
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
||||||
|
elm_object_text_set(o, "*");
|
||||||
|
elm_box_pack_end(ct_box2, o);
|
||||||
|
evas_object_show(o);
|
||||||
|
evas_object_smart_callback_add(o, "clicked", _cb_ct_new, NULL);
|
||||||
|
|
||||||
|
// XXX: need real icon
|
||||||
o = elm_button_add(win);
|
o = elm_button_add(win);
|
||||||
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
|
||||||
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
||||||
|
@ -152,6 +168,7 @@ controls_toggle(Evas_Object *win, Evas_Object *bg, Evas_Object *term)
|
||||||
evas_object_show(o);
|
evas_object_show(o);
|
||||||
evas_object_smart_callback_add(o, "clicked", _cb_ct_split_v, NULL);
|
evas_object_smart_callback_add(o, "clicked", _cb_ct_split_v, NULL);
|
||||||
|
|
||||||
|
// XXX: need real icon
|
||||||
o = elm_button_add(win);
|
o = elm_button_add(win);
|
||||||
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
|
||||||
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
||||||
|
@ -160,6 +177,7 @@ controls_toggle(Evas_Object *win, Evas_Object *bg, Evas_Object *term)
|
||||||
evas_object_show(o);
|
evas_object_show(o);
|
||||||
evas_object_smart_callback_add(o, "clicked", _cb_ct_split_h, NULL);
|
evas_object_smart_callback_add(o, "clicked", _cb_ct_split_h, NULL);
|
||||||
|
|
||||||
|
// XXX: need real icon
|
||||||
o = elm_button_add(win);
|
o = elm_button_add(win);
|
||||||
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
|
||||||
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
||||||
|
|
194
src/bin/main.c
194
src/bin/main.c
|
@ -65,8 +65,9 @@ struct _Split
|
||||||
Win *wn; // win this split belongs to
|
Win *wn; // win this split belongs to
|
||||||
Split *parent; // the parent split or null if toplevel
|
Split *parent; // the parent split or null if toplevel
|
||||||
Split *s1, *s2; // left/right or top/bottom child splits, null if leaf
|
Split *s1, *s2; // left/right or top/bottom child splits, null if leaf
|
||||||
Term *term; // if leaf node this is not null
|
Term *term; // if leaf node this is not null - the CURRENT term from terms list
|
||||||
Evas_Object *panes;
|
Eina_List *terms; // list of terms in the "tabs"
|
||||||
|
Evas_Object *panes; // null if a leaf node
|
||||||
Eina_Bool horizontal : 1;
|
Eina_Bool horizontal : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -98,10 +99,16 @@ static Split *
|
||||||
_split_split_find(Split *sp, Evas_Object *term)
|
_split_split_find(Split *sp, Evas_Object *term)
|
||||||
{
|
{
|
||||||
Split *sp2;
|
Split *sp2;
|
||||||
|
Eina_List *l;
|
||||||
|
Term *tm;
|
||||||
|
|
||||||
if (sp->term)
|
if (sp->term)
|
||||||
{
|
{
|
||||||
if (sp->term->term == term) return sp;
|
if (sp->term->term == term) return sp;
|
||||||
|
EINA_LIST_FOREACH(sp->terms, l, tm)
|
||||||
|
{
|
||||||
|
if (tm->term == term) return sp;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (sp->s1)
|
if (sp->s1)
|
||||||
{
|
{
|
||||||
|
@ -149,9 +156,11 @@ _split_split(Split *sp, Eina_Bool horizontal)
|
||||||
sp2->parent = sp;
|
sp2->parent = sp;
|
||||||
sp2->wn = sp->wn;
|
sp2->wn = sp->wn;
|
||||||
sp2->term = sp->term;
|
sp2->term = sp->term;
|
||||||
|
sp2->terms = sp->terms;
|
||||||
|
sp->terms = NULL;
|
||||||
|
|
||||||
if (!sp->parent) edje_object_part_unswallow(sp->wn->base, sp->term->bg);
|
if (!sp->parent) edje_object_part_unswallow(sp->wn->base, sp->term->bg);
|
||||||
main_term_bg_redo(sp->term);
|
main_term_bg_redo(sp2->term);
|
||||||
|
|
||||||
sp2 = sp->s2 = calloc(1, sizeof(Split));
|
sp2 = sp->s2 = calloc(1, sizeof(Split));
|
||||||
sp2->parent = sp;
|
sp2->parent = sp;
|
||||||
|
@ -160,6 +169,7 @@ _split_split(Split *sp, Eina_Bool horizontal)
|
||||||
sp2->term = main_term_new(sp->wn, config,
|
sp2->term = main_term_new(sp->wn, config,
|
||||||
NULL, EINA_FALSE, NULL,
|
NULL, EINA_FALSE, NULL,
|
||||||
80, 24, EINA_FALSE);
|
80, 24, EINA_FALSE);
|
||||||
|
sp2->terms = eina_list_append(sp2->terms, sp2->term);
|
||||||
_term_focus(sp2->term);
|
_term_focus(sp2->term);
|
||||||
_term_media_update(sp2->term, config);
|
_term_media_update(sp2->term, config);
|
||||||
evas_object_data_set(sp2->term->term, "sizedone", sp2->term->term);
|
evas_object_data_set(sp2->term->term, "sizedone", sp2->term->term);
|
||||||
|
@ -185,6 +195,56 @@ _split_split(Split *sp, Eina_Bool horizontal)
|
||||||
sp->term = NULL;
|
sp->term = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_term_focus_show(Split *sp, Term *term)
|
||||||
|
{
|
||||||
|
if (term != sp->term)
|
||||||
|
{
|
||||||
|
evas_object_hide(sp->term->bg);
|
||||||
|
sp->term = term;
|
||||||
|
}
|
||||||
|
if (!sp->parent)
|
||||||
|
edje_object_part_swallow(sp->wn->base, "terminology.content",
|
||||||
|
sp->term->bg);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (sp == sp->parent->s1)
|
||||||
|
{
|
||||||
|
elm_object_part_content_unset(sp->parent->panes, PANES_TOP);
|
||||||
|
elm_object_part_content_set(sp->parent->panes, PANES_TOP,
|
||||||
|
sp->term->bg);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
elm_object_part_content_unset(sp->parent->panes, PANES_BOTTOM);
|
||||||
|
elm_object_part_content_set(sp->parent->panes, PANES_BOTTOM,
|
||||||
|
sp->term->bg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
evas_object_show(sp->term->bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
main_new(Evas_Object *win, Evas_Object *term)
|
||||||
|
{
|
||||||
|
Split *sp = _split_find(win, term);
|
||||||
|
Config *config;
|
||||||
|
int w, h;
|
||||||
|
|
||||||
|
if (!sp) return;
|
||||||
|
evas_object_hide(sp->term->bg);
|
||||||
|
config = config_fork(sp->term->config);
|
||||||
|
termio_size_get(sp->term->term, &w, &h);
|
||||||
|
sp->term = main_term_new(sp->wn, config,
|
||||||
|
NULL, EINA_FALSE, NULL,
|
||||||
|
w, h, EINA_FALSE);
|
||||||
|
sp->terms = eina_list_append(sp->terms, sp->term);
|
||||||
|
_term_focus(sp->term);
|
||||||
|
_term_media_update(sp->term, config);
|
||||||
|
evas_object_data_set(sp->term->term, "sizedone", sp->term->term);
|
||||||
|
_term_focus_show(sp, sp->term);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
main_split_h(Evas_Object *win, Evas_Object *term)
|
main_split_h(Evas_Object *win, Evas_Object *term)
|
||||||
{
|
{
|
||||||
|
@ -206,7 +266,8 @@ main_split_v(Evas_Object *win, Evas_Object *term)
|
||||||
static void
|
static void
|
||||||
_split_append(Split *sp, Eina_List **flat)
|
_split_append(Split *sp, Eina_List **flat)
|
||||||
{
|
{
|
||||||
if (sp->term) *flat = eina_list_append(*flat, sp);
|
if (sp->term)
|
||||||
|
*flat = eina_list_append(*flat, sp);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_split_append(sp->s1, flat);
|
_split_append(sp->s1, flat);
|
||||||
|
@ -230,6 +291,8 @@ _term_next_get(Term *termin)
|
||||||
Eina_List *flat, *l;
|
Eina_List *flat, *l;
|
||||||
|
|
||||||
sp = _split_find(termin->wn->win, termin->term);
|
sp = _split_find(termin->wn->win, termin->term);
|
||||||
|
l = eina_list_data_find_list(sp->terms, termin);
|
||||||
|
if ((l) && (l->next)) return l->next->data;
|
||||||
if (!sp->parent) return NULL;
|
if (!sp->parent) return NULL;
|
||||||
flat = _split_flatten(termin->wn->split);
|
flat = _split_flatten(termin->wn->split);
|
||||||
if (!flat) return NULL;
|
if (!flat) return NULL;
|
||||||
|
@ -243,10 +306,12 @@ _term_next_get(Term *termin)
|
||||||
{
|
{
|
||||||
sp = l->next->data;
|
sp = l->next->data;
|
||||||
eina_list_free(flat);
|
eina_list_free(flat);
|
||||||
|
if (sp->terms) return sp->terms->data;
|
||||||
return sp->term;
|
return sp->term;
|
||||||
}
|
}
|
||||||
sp = flat->data;
|
sp = flat->data;
|
||||||
eina_list_free(flat);
|
eina_list_free(flat);
|
||||||
|
if (sp->terms) return sp->terms->data;
|
||||||
return sp->term;
|
return sp->term;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -257,6 +322,8 @@ _term_prev_get(Term *termin)
|
||||||
Eina_List *flat, *l;
|
Eina_List *flat, *l;
|
||||||
|
|
||||||
sp = _split_find(termin->wn->win, termin->term);
|
sp = _split_find(termin->wn->win, termin->term);
|
||||||
|
l = eina_list_data_find_list(sp->terms, termin);
|
||||||
|
if ((l) && (l->prev)) return l->prev->data;
|
||||||
if (!sp->parent) return NULL;
|
if (!sp->parent) return NULL;
|
||||||
flat = _split_flatten(termin->wn->split);
|
flat = _split_flatten(termin->wn->split);
|
||||||
if (!flat) return NULL;
|
if (!flat) return NULL;
|
||||||
|
@ -270,6 +337,8 @@ _term_prev_get(Term *termin)
|
||||||
{
|
{
|
||||||
sp = l->prev->data;
|
sp = l->prev->data;
|
||||||
eina_list_free(flat);
|
eina_list_free(flat);
|
||||||
|
l = eina_list_last(sp->terms);
|
||||||
|
if (l) return l->data;
|
||||||
return sp->term;
|
return sp->term;
|
||||||
}
|
}
|
||||||
#if (EINA_VERSION_MAJOR > 1) || (EINA_VERSION_MINOR >= 8)
|
#if (EINA_VERSION_MAJOR > 1) || (EINA_VERSION_MINOR >= 8)
|
||||||
|
@ -278,6 +347,8 @@ _term_prev_get(Term *termin)
|
||||||
sp = eina_list_data_get(eina_list_last(flat));
|
sp = eina_list_data_get(eina_list_last(flat));
|
||||||
#endif
|
#endif
|
||||||
eina_list_free(flat);
|
eina_list_free(flat);
|
||||||
|
l = eina_list_last(sp->terms);
|
||||||
|
if (l) return l->data;
|
||||||
return sp->term;
|
return sp->term;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -291,6 +362,8 @@ _split_merge(Split *spp, Split *sp, const char *slot)
|
||||||
main_term_bg_redo(sp->term);
|
main_term_bg_redo(sp->term);
|
||||||
spp->term = sp->term;
|
spp->term = sp->term;
|
||||||
sp->term = NULL;
|
sp->term = NULL;
|
||||||
|
spp->terms = sp->terms;
|
||||||
|
sp->terms = NULL;
|
||||||
o = spp->term->bg;
|
o = spp->term->bg;
|
||||||
spp->s1 = NULL;
|
spp->s1 = NULL;
|
||||||
spp->s2 = NULL;
|
spp->s2 = NULL;
|
||||||
|
@ -358,47 +431,91 @@ main_close(Evas_Object *win, Evas_Object *term)
|
||||||
Split *sp = _split_find(win, term);
|
Split *sp = _split_find(win, term);
|
||||||
Split *spp, *spkeep = NULL;
|
Split *spp, *spkeep = NULL;
|
||||||
Term *termfoc = NULL;
|
Term *termfoc = NULL;
|
||||||
#ifdef ELM_PANE_BUG_1_7
|
Eina_List *l;
|
||||||
const char *slot = "left";
|
const char *slot = PANES_TOP;
|
||||||
#else
|
|
||||||
const char *slot = "top";
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!sp) return;
|
if (!sp) return;
|
||||||
if (!sp->term) return;
|
if (!sp->term) return;
|
||||||
spp = sp->parent;
|
spp = sp->parent;
|
||||||
if ((sp->term->focused) && (spp)) termfoc = _term_next_get(sp->term);
|
if ((sp->term->focused) && (spp)) termfoc = _term_next_get(sp->term);
|
||||||
sp->wn->terms = eina_list_remove(sp->wn->terms, sp->term);
|
sp->wn->terms = eina_list_remove(sp->wn->terms, sp->term);
|
||||||
|
// printf("main_close %p %p\n", win, term);
|
||||||
if (spp)
|
if (spp)
|
||||||
{
|
{
|
||||||
if (sp == spp->s2)
|
if (eina_list_count(sp->terms) <= 1)
|
||||||
{
|
{
|
||||||
spkeep = spp->s1;
|
if (sp == spp->s2)
|
||||||
spp->s2 = NULL;
|
{
|
||||||
|
spkeep = spp->s1;
|
||||||
|
spp->s2 = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
spkeep = spp->s2;
|
||||||
|
spp->s1 = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
l = eina_list_data_find_list(sp->terms, sp->term);
|
||||||
|
main_term_free(sp->term);
|
||||||
|
sp->term = NULL;
|
||||||
|
if (l)
|
||||||
|
{
|
||||||
|
if (l->next) sp->term = l->next->data;
|
||||||
|
else if (l->prev) sp->term = l->prev->data;
|
||||||
|
sp->terms = eina_list_remove_list(sp->terms, l);
|
||||||
|
}
|
||||||
|
// printf("sp->term = %p foc %p\n", sp->term, termfoc);
|
||||||
|
if (!sp->term)
|
||||||
|
{
|
||||||
|
_split_free(sp);
|
||||||
|
if ((spp->parent) && (spp->parent->s2 == spp))
|
||||||
|
slot = PANES_BOTTOM;
|
||||||
|
_split_merge(spp, spkeep, slot);
|
||||||
|
|
||||||
|
if (termfoc)
|
||||||
|
{
|
||||||
|
_term_focus(termfoc);
|
||||||
|
sp = _split_find(win, termfoc->term);
|
||||||
|
if (sp) _term_focus_show(sp, termfoc);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
spkeep = spp->s2;
|
if ((sp->parent) && (sp->parent->s2 == sp)) slot = PANES_BOTTOM;
|
||||||
spp->s1 = NULL;
|
/*
|
||||||
|
printf("slot '%s' par: %p s1=%p s2=%p\n",
|
||||||
|
slot, sp->parent,
|
||||||
|
sp->parent->s1, sp->parent->s2);
|
||||||
|
*/
|
||||||
|
elm_object_part_content_set(sp->parent->panes, slot,
|
||||||
|
sp->term->bg);
|
||||||
|
evas_object_show(sp->term->bg);
|
||||||
|
_term_focus(sp->term);
|
||||||
|
_term_focus_show(sp, sp->term);
|
||||||
}
|
}
|
||||||
|
|
||||||
main_term_free(sp->term);
|
|
||||||
sp->term = NULL;
|
|
||||||
_split_free(sp);
|
|
||||||
|
|
||||||
if ((spp->parent) && (spp->parent->s2 == spp))
|
|
||||||
{
|
|
||||||
slot = PANES_BOTTOM;
|
|
||||||
}
|
|
||||||
_split_merge(spp, spkeep, slot);
|
|
||||||
|
|
||||||
if (termfoc) _term_focus(termfoc);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
edje_object_part_unswallow(sp->wn->base, sp->term->bg);
|
edje_object_part_unswallow(sp->wn->base, sp->term->bg);
|
||||||
|
l = eina_list_data_find_list(sp->terms, sp->term);
|
||||||
main_term_free(sp->term);
|
main_term_free(sp->term);
|
||||||
sp->term = NULL;
|
sp->term = NULL;
|
||||||
|
if (l)
|
||||||
|
{
|
||||||
|
if (l->next)
|
||||||
|
sp->term = l->next->data;
|
||||||
|
else if (l->prev)
|
||||||
|
sp->term = l->prev->data;
|
||||||
|
sp->terms = eina_list_remove_list(sp->terms, l);
|
||||||
|
}
|
||||||
|
if (sp->term)
|
||||||
|
{
|
||||||
|
edje_object_part_swallow(sp->wn->base, "terminology.content",
|
||||||
|
sp->term->bg);
|
||||||
|
evas_object_show(sp->term->bg);
|
||||||
|
_term_focus(sp->term);
|
||||||
|
_term_focus_show(sp, sp->term);
|
||||||
|
}
|
||||||
if (!sp->wn->terms) evas_object_del(sp->wn->win);
|
if (!sp->wn->terms) evas_object_del(sp->wn->win);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -523,6 +640,7 @@ _split_size_walk(Split *sp, Sizeinfo *info)
|
||||||
info->step_y = sp->term->step_y;
|
info->step_y = sp->term->step_y;
|
||||||
info->req_w = sp->term->req_w;
|
info->req_w = sp->term->req_w;
|
||||||
info->req_h = sp->term->req_h;
|
info->req_h = sp->term->req_h;
|
||||||
|
// XXXX sp->terms sizedone too?
|
||||||
if (!evas_object_data_get(sp->term->term, "sizedone"))
|
if (!evas_object_data_get(sp->term->term, "sizedone"))
|
||||||
{
|
{
|
||||||
evas_object_data_set(sp->term->term, "sizedone", sp->term->term);
|
evas_object_data_set(sp->term->term, "sizedone", sp->term->term);
|
||||||
|
@ -885,7 +1003,14 @@ _cb_prev(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
|
||||||
Term *term2 = NULL;
|
Term *term2 = NULL;
|
||||||
|
|
||||||
if (term->focused) term2 = _term_prev_get(term);
|
if (term->focused) term2 = _term_prev_get(term);
|
||||||
if (term2) _term_focus(term2);
|
if (term2)
|
||||||
|
{
|
||||||
|
Split *sp;
|
||||||
|
|
||||||
|
_term_focus(term2);
|
||||||
|
sp = _split_find(term2->wn->win, term2->term);
|
||||||
|
if (sp) _term_focus_show(sp, term2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -895,13 +1020,22 @@ _cb_next(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
|
||||||
Term *term2 = NULL;
|
Term *term2 = NULL;
|
||||||
|
|
||||||
if (term->focused) term2 = _term_next_get(term);
|
if (term->focused) term2 = _term_next_get(term);
|
||||||
if (term2) _term_focus(term2);
|
if (term2)
|
||||||
|
{
|
||||||
|
Split *sp;
|
||||||
|
|
||||||
|
_term_focus(term2);
|
||||||
|
sp = _split_find(term2->wn->win, term2->term);
|
||||||
|
if (sp) _term_focus_show(sp, term2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_cb_new(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
|
_cb_new(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
|
||||||
{
|
{
|
||||||
// Term *term = data;
|
Term *term = data;
|
||||||
|
|
||||||
|
main_new(term->wn->win, term->term);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1763,6 +1897,7 @@ main_ipc_new(Ipc_Instance *inst)
|
||||||
sp = wn->split = calloc(1, sizeof(Split));
|
sp = wn->split = calloc(1, sizeof(Split));
|
||||||
sp->wn = wn;
|
sp->wn = wn;
|
||||||
sp->term = term;
|
sp->term = term;
|
||||||
|
sp->terms = eina_list_append(sp->terms, sp->term);
|
||||||
|
|
||||||
main_trans_update(config);
|
main_trans_update(config);
|
||||||
main_media_update(config);
|
main_media_update(config);
|
||||||
|
@ -2230,6 +2365,7 @@ remote:
|
||||||
sp = wn->split = calloc(1, sizeof(Split));
|
sp = wn->split = calloc(1, sizeof(Split));
|
||||||
sp->wn = wn;
|
sp->wn = wn;
|
||||||
sp->term = term;
|
sp->term = term;
|
||||||
|
sp->terms = eina_list_append(sp->terms, sp->term);
|
||||||
|
|
||||||
main_trans_update(config);
|
main_trans_update(config);
|
||||||
main_media_update(config);
|
main_media_update(config);
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
void main_new(Evas_Object *win, Evas_Object *term);
|
||||||
void main_split_h(Evas_Object *win, Evas_Object *term);
|
void main_split_h(Evas_Object *win, Evas_Object *term);
|
||||||
void main_split_v(Evas_Object *win, Evas_Object *term);
|
void main_split_v(Evas_Object *win, Evas_Object *term);
|
||||||
void main_close(Evas_Object *win, Evas_Object *term);
|
void main_close(Evas_Object *win, Evas_Object *term);
|
||||||
|
|
|
@ -63,6 +63,7 @@ struct _Termio
|
||||||
int zoom_fontsize_start;
|
int zoom_fontsize_start;
|
||||||
int scroll;
|
int scroll;
|
||||||
unsigned int last_keyup;
|
unsigned int last_keyup;
|
||||||
|
Eina_List *mirrors;
|
||||||
Eina_List *seq;
|
Eina_List *seq;
|
||||||
Evas_Object *event;
|
Evas_Object *event;
|
||||||
Termpty *pty;
|
Termpty *pty;
|
||||||
|
@ -89,6 +90,7 @@ static Evas_Smart *_smart = NULL;
|
||||||
static Evas_Smart_Class _parent_sc = EVAS_SMART_CLASS_INIT_NULL;
|
static Evas_Smart_Class _parent_sc = EVAS_SMART_CLASS_INIT_NULL;
|
||||||
|
|
||||||
static void _smart_calculate(Evas_Object *obj);
|
static void _smart_calculate(Evas_Object *obj);
|
||||||
|
static void _smart_mirror_del(void *data, Evas *evas __UNUSED__, Evas_Object *obj, void *info __UNUSED__);
|
||||||
|
|
||||||
static inline Eina_Bool
|
static inline Eina_Bool
|
||||||
_should_inline(const Evas_Object *obj)
|
_should_inline(const Evas_Object *obj)
|
||||||
|
@ -2716,6 +2718,12 @@ _smart_del(Evas_Object *obj)
|
||||||
Termio *sd = evas_object_smart_data_get(obj);
|
Termio *sd = evas_object_smart_data_get(obj);
|
||||||
|
|
||||||
if (!sd) return;
|
if (!sd) return;
|
||||||
|
EINA_LIST_FREE(sd->mirrors, o)
|
||||||
|
{
|
||||||
|
evas_object_event_callback_del_full(o, EVAS_CALLBACK_DEL,
|
||||||
|
_smart_mirror_del, obj);
|
||||||
|
evas_object_del(o);
|
||||||
|
}
|
||||||
if (sd->imf)
|
if (sd->imf)
|
||||||
{
|
{
|
||||||
ecore_imf_context_event_callback_del
|
ecore_imf_context_event_callback_del
|
||||||
|
@ -3479,3 +3487,28 @@ termio_textgrid_get(Evas_Object *obj)
|
||||||
|
|
||||||
return sd->grid.obj;
|
return sd->grid.obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_smart_mirror_del(void *data, Evas *evas __UNUSED__, Evas_Object *obj, void *info __UNUSED__)
|
||||||
|
{
|
||||||
|
Termio *sd = evas_object_smart_data_get(data);
|
||||||
|
if (!sd) return;
|
||||||
|
evas_object_event_callback_del_full(obj, EVAS_CALLBACK_DEL,
|
||||||
|
_smart_mirror_del, data);
|
||||||
|
sd->mirrors = eina_list_remove(sd->mirrors, obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
Evas_Object *
|
||||||
|
termio_mirror_add(Evas_Object *obj)
|
||||||
|
{
|
||||||
|
Evas_Object *img;
|
||||||
|
Termio *sd = evas_object_smart_data_get(obj);
|
||||||
|
if (!sd) return NULL;
|
||||||
|
img = evas_object_image_filled_add(evas_object_evas_get(obj));
|
||||||
|
evas_object_image_source_set(img, obj);
|
||||||
|
sd->mirrors = eina_list_append(sd->mirrors, img);
|
||||||
|
evas_object_data_set(img, "termio", obj);
|
||||||
|
evas_object_event_callback_add(img, EVAS_CALLBACK_DEL,
|
||||||
|
_smart_mirror_del, obj);
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
|
@ -22,5 +22,6 @@ void termio_grid_size_set(Evas_Object *obj, int w, int h);
|
||||||
pid_t termio_pid_get(const Evas_Object *obj);
|
pid_t termio_pid_get(const Evas_Object *obj);
|
||||||
Eina_Bool termio_cwd_get(const Evas_Object *obj, char *buf, size_t size);
|
Eina_Bool termio_cwd_get(const Evas_Object *obj, char *buf, size_t size);
|
||||||
Evas_Object *termio_textgrid_get(Evas_Object *obj);
|
Evas_Object *termio_textgrid_get(Evas_Object *obj);
|
||||||
|
Evas_Object *termio_mirror_add(Evas_Object *obj);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -959,7 +959,7 @@ _handle_esc_xterm(Termpty *ty, const Eina_Unicode *c, Eina_Unicode *ce)
|
||||||
static int
|
static int
|
||||||
_handle_esc_terminology(Termpty *ty, const Eina_Unicode *c, const Eina_Unicode *ce)
|
_handle_esc_terminology(Termpty *ty, const Eina_Unicode *c, const Eina_Unicode *ce)
|
||||||
{
|
{
|
||||||
Eina_Unicode *cc, *be;
|
Eina_Unicode *cc;
|
||||||
Eina_Unicode *buf, bufsmall[1024], *b;
|
Eina_Unicode *buf, bufsmall[1024], *b;
|
||||||
char *s;
|
char *s;
|
||||||
int blen = 0, slen = 0;
|
int blen = 0, slen = 0;
|
||||||
|
@ -975,7 +975,6 @@ _handle_esc_terminology(Termpty *ty, const Eina_Unicode *c, const Eina_Unicode *
|
||||||
buf = malloc((blen * sizeof(Eina_Unicode)) + 40);
|
buf = malloc((blen * sizeof(Eina_Unicode)) + 40);
|
||||||
cc = (Eina_Unicode *)c;
|
cc = (Eina_Unicode *)c;
|
||||||
b = buf;
|
b = buf;
|
||||||
be = buf + blen + 1;
|
|
||||||
while ((cc < ce) && (*cc != 0x0))
|
while ((cc < ce) && (*cc != 0x0))
|
||||||
{
|
{
|
||||||
*b = *cc;
|
*b = *cc;
|
||||||
|
|
Loading…
Reference in New Issue