group input: handle only_visible or all terms
This commit is contained in:
parent
26b19dc31d
commit
19cca3e2f2
|
@ -60,6 +60,7 @@ struct _Term_Container {
|
||||||
void (*bell)(Term_Container *tc, Term_Container *child);
|
void (*bell)(Term_Container *tc, Term_Container *child);
|
||||||
void (*close)(Term_Container *container, Term_Container *child);
|
void (*close)(Term_Container *container, Term_Container *child);
|
||||||
void (*update)(Term_Container *tc);
|
void (*update)(Term_Container *tc);
|
||||||
|
Eina_Bool (*is_visible)(Term_Container *tc, Term_Container *child);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -483,6 +483,13 @@ _solo_update(Term_Container *tc)
|
||||||
assert (tc->type == TERM_CONTAINER_TYPE_SOLO);
|
assert (tc->type == TERM_CONTAINER_TYPE_SOLO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Eina_Bool
|
||||||
|
_solo_is_visible(Term_Container *tc, Term_Container *_child EINA_UNUSED)
|
||||||
|
{
|
||||||
|
assert (tc->type == TERM_CONTAINER_TYPE_SOLO);
|
||||||
|
return tc->parent->is_visible(tc->parent, tc);
|
||||||
|
}
|
||||||
|
|
||||||
static Term_Container *
|
static Term_Container *
|
||||||
_solo_new(Term *term, Win *wn)
|
_solo_new(Term *term, Win *wn)
|
||||||
{
|
{
|
||||||
|
@ -517,6 +524,7 @@ _solo_new(Term *term, Win *wn)
|
||||||
tc->close = _solo_close;
|
tc->close = _solo_close;
|
||||||
tc->update = _solo_update;
|
tc->update = _solo_update;
|
||||||
tc->title = eina_stringshare_add("Terminology");
|
tc->title = eina_stringshare_add("Terminology");
|
||||||
|
tc->is_visible = _solo_is_visible;
|
||||||
tc->type = TERM_CONTAINER_TYPE_SOLO;
|
tc->type = TERM_CONTAINER_TYPE_SOLO;
|
||||||
|
|
||||||
tc->parent = NULL;
|
tc->parent = NULL;
|
||||||
|
@ -1169,6 +1177,11 @@ _cb_win_key_up(void *data,
|
||||||
keyin_handle_up(&wn->khdl, ev);
|
keyin_handle_up(&wn->khdl, ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define GROUPED_INPUT_TERM_FOREACH(_wn, _list, _term) \
|
||||||
|
EINA_LIST_FOREACH(_wn->terms, _list, _term) \
|
||||||
|
if (!_wn->group_only_visible || term_is_visible(_term))
|
||||||
|
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
term_preedit_str_get(Term *term)
|
term_preedit_str_get(Term *term)
|
||||||
{
|
{
|
||||||
|
@ -1217,7 +1230,7 @@ _imf_event_commit_cb(void *data,
|
||||||
len = strlen(str);
|
len = strlen(str);
|
||||||
if (wn->group_input)
|
if (wn->group_input)
|
||||||
{
|
{
|
||||||
EINA_LIST_FOREACH(wn->terms, l, term)
|
GROUPED_INPUT_TERM_FOREACH(wn, l, term)
|
||||||
{
|
{
|
||||||
ty = termio_pty_get(term->termio);
|
ty = termio_pty_get(term->termio);
|
||||||
if (ty)
|
if (ty)
|
||||||
|
@ -1309,7 +1322,7 @@ _cb_win_key_down(void *data,
|
||||||
/* 1st/ Miniview */
|
/* 1st/ Miniview */
|
||||||
if (wn->group_input)
|
if (wn->group_input)
|
||||||
{
|
{
|
||||||
EINA_LIST_FOREACH(wn->terms, l, term)
|
GROUPED_INPUT_TERM_FOREACH(wn, l, term)
|
||||||
{
|
{
|
||||||
done = miniview_handle_key(term_miniview_get(term), ev);
|
done = miniview_handle_key(term_miniview_get(term), ev);
|
||||||
if (!wn->group_input)
|
if (!wn->group_input)
|
||||||
|
@ -1336,7 +1349,7 @@ _cb_win_key_down(void *data,
|
||||||
done = EINA_FALSE;
|
done = EINA_FALSE;
|
||||||
if (wn->group_input)
|
if (wn->group_input)
|
||||||
{
|
{
|
||||||
EINA_LIST_FOREACH(wn->terms, l, term)
|
GROUPED_INPUT_TERM_FOREACH(wn, l, term)
|
||||||
{
|
{
|
||||||
if (term_has_popmedia(term) && !strcmp(ev->key, "Escape"))
|
if (term_has_popmedia(term) && !strcmp(ev->key, "Escape"))
|
||||||
{
|
{
|
||||||
|
@ -1369,7 +1382,7 @@ _cb_win_key_down(void *data,
|
||||||
if (wn->group_input)
|
if (wn->group_input)
|
||||||
{
|
{
|
||||||
wn->group_once_handled = EINA_FALSE;
|
wn->group_once_handled = EINA_FALSE;
|
||||||
EINA_LIST_FOREACH(wn->terms, l, term)
|
GROUPED_INPUT_TERM_FOREACH(wn, l, term)
|
||||||
{
|
{
|
||||||
done = keyin_handle_key_binding(term->termio, ev, ctrl, alt,
|
done = keyin_handle_key_binding(term->termio, ev, ctrl, alt,
|
||||||
shift, win, meta, hyper);
|
shift, win, meta, hyper);
|
||||||
|
@ -1453,7 +1466,7 @@ _cb_win_key_down(void *data,
|
||||||
int len = strlen(compres);
|
int len = strlen(compres);
|
||||||
if (wn->group_input)
|
if (wn->group_input)
|
||||||
{
|
{
|
||||||
EINA_LIST_FOREACH(wn->terms, l, term)
|
GROUPED_INPUT_TERM_FOREACH(wn, l, term)
|
||||||
{
|
{
|
||||||
ty = termio_pty_get(term->termio);
|
ty = termio_pty_get(term->termio);
|
||||||
if (ty && termpty_can_handle_key(ty, &wn->khdl, ev))
|
if (ty && termpty_can_handle_key(ty, &wn->khdl, ev))
|
||||||
|
@ -1478,7 +1491,7 @@ _cb_win_key_down(void *data,
|
||||||
/* 5th/ send key to pty */
|
/* 5th/ send key to pty */
|
||||||
if (wn->group_input)
|
if (wn->group_input)
|
||||||
{
|
{
|
||||||
EINA_LIST_FOREACH(wn->terms, l, term)
|
GROUPED_INPUT_TERM_FOREACH(wn, l, term)
|
||||||
{
|
{
|
||||||
ty = termio_pty_get(term->termio);
|
ty = termio_pty_get(term->termio);
|
||||||
if (ty && termpty_can_handle_key(ty, &wn->khdl, ev))
|
if (ty && termpty_can_handle_key(ty, &wn->khdl, ev))
|
||||||
|
@ -1496,7 +1509,7 @@ _cb_win_key_down(void *data,
|
||||||
end:
|
end:
|
||||||
if (wn->group_input)
|
if (wn->group_input)
|
||||||
{
|
{
|
||||||
EINA_LIST_FOREACH(wn->terms, l, term)
|
GROUPED_INPUT_TERM_FOREACH(wn, l, term)
|
||||||
{
|
{
|
||||||
if (term)
|
if (term)
|
||||||
termio_key_down(term->termio, ev);
|
termio_key_down(term->termio, ev);
|
||||||
|
@ -1575,6 +1588,12 @@ _cb_win_mouse_move(void *data,
|
||||||
tc_child->focus(tc_child, tc);
|
tc_child->focus(tc_child, tc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Eina_Bool
|
||||||
|
_win_is_visible(Term_Container *tc, Term_Container *_child EINA_UNUSED)
|
||||||
|
{
|
||||||
|
assert (tc->type == TERM_CONTAINER_TYPE_WIN);
|
||||||
|
return EINA_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
Win *
|
Win *
|
||||||
win_new(const char *name, const char *role, const char *title,
|
win_new(const char *name, const char *role, const char *title,
|
||||||
|
@ -1618,6 +1637,7 @@ win_new(const char *name, const char *role, const char *title,
|
||||||
tc->bell = _win_bell;
|
tc->bell = _win_bell;
|
||||||
tc->close = _win_close;
|
tc->close = _win_close;
|
||||||
tc->update = _win_update;
|
tc->update = _win_update;
|
||||||
|
tc->is_visible = _win_is_visible;
|
||||||
tc->title = eina_stringshare_add(title? title : "Terminology");
|
tc->title = eina_stringshare_add(title? title : "Terminology");
|
||||||
tc->type = TERM_CONTAINER_TYPE_WIN;
|
tc->type = TERM_CONTAINER_TYPE_WIN;
|
||||||
tc->wn = wn;
|
tc->wn = wn;
|
||||||
|
@ -1797,7 +1817,7 @@ _win_toggle_group(Win *wn)
|
||||||
DBG("WIN TOGGLE");
|
DBG("WIN TOGGLE");
|
||||||
if (!wn->group_input)
|
if (!wn->group_input)
|
||||||
{
|
{
|
||||||
EINA_LIST_FOREACH(wn->terms, l, term)
|
GROUPED_INPUT_TERM_FOREACH(wn, l, term)
|
||||||
{
|
{
|
||||||
edje_object_signal_emit(term->bg, "focus,in", "terminology");
|
edje_object_signal_emit(term->bg, "focus,in", "terminology");
|
||||||
termio_event_feed_mouse_in(term->termio);
|
termio_event_feed_mouse_in(term->termio);
|
||||||
|
@ -1810,7 +1830,7 @@ _win_toggle_group(Win *wn)
|
||||||
{
|
{
|
||||||
wn->group_input = EINA_FALSE;
|
wn->group_input = EINA_FALSE;
|
||||||
DBG("GROUP INPUT is now FALSE");
|
DBG("GROUP INPUT is now FALSE");
|
||||||
EINA_LIST_FOREACH(wn->terms, l, term)
|
GROUPED_INPUT_TERM_FOREACH(wn, l, term)
|
||||||
{
|
{
|
||||||
edje_object_signal_emit(term->bg, "focus,out", "terminology");
|
edje_object_signal_emit(term->bg, "focus,out", "terminology");
|
||||||
termio_focus_out(term->termio);
|
termio_focus_out(term->termio);
|
||||||
|
@ -2280,6 +2300,15 @@ _split_split(Term_Container *tc, Term_Container *child,
|
||||||
evas_object_show(obj_split);
|
evas_object_show(obj_split);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Eina_Bool
|
||||||
|
_split_is_visible(Term_Container *tc, Term_Container *_child EINA_UNUSED)
|
||||||
|
{
|
||||||
|
assert (tc->type == TERM_CONTAINER_TYPE_SPLIT);
|
||||||
|
/* Could return True with the current design because splits are at a higher
|
||||||
|
* level than tabs */
|
||||||
|
return tc->parent->is_visible(tc->parent, tc);
|
||||||
|
}
|
||||||
|
|
||||||
static Term_Container *
|
static Term_Container *
|
||||||
_split_new(Term_Container *tc1, Term_Container *tc2,
|
_split_new(Term_Container *tc1, Term_Container *tc2,
|
||||||
Eina_Bool is_horizontal)
|
Eina_Bool is_horizontal)
|
||||||
|
@ -2315,6 +2344,7 @@ _split_new(Term_Container *tc1, Term_Container *tc2,
|
||||||
tc->bell = _split_bell;
|
tc->bell = _split_bell;
|
||||||
tc->close = _split_close;
|
tc->close = _split_close;
|
||||||
tc->update = _split_update;
|
tc->update = _split_update;
|
||||||
|
tc->is_visible = _split_is_visible;
|
||||||
tc->title = eina_stringshare_add("Terminology");
|
tc->title = eina_stringshare_add("Terminology");
|
||||||
tc->type = TERM_CONTAINER_TYPE_SPLIT;
|
tc->type = TERM_CONTAINER_TYPE_SPLIT;
|
||||||
|
|
||||||
|
@ -3575,6 +3605,16 @@ _tabs_split(Term_Container *tc,
|
||||||
tc->parent->split(tc->parent, tc, from, cmd, is_horizontal);
|
tc->parent->split(tc->parent, tc, from, cmd, is_horizontal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Eina_Bool
|
||||||
|
_tabs_is_visible(Term_Container *tc, Term_Container *child)
|
||||||
|
{
|
||||||
|
Tabs *tabs;
|
||||||
|
assert (tc->type == TERM_CONTAINER_TYPE_TABS);
|
||||||
|
tabs = (Tabs*) tc;
|
||||||
|
return child == tabs->current->tc;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static Term_Container *
|
static Term_Container *
|
||||||
_tabs_new(Term_Container *child, Term_Container *parent)
|
_tabs_new(Term_Container *child, Term_Container *parent)
|
||||||
{
|
{
|
||||||
|
@ -3613,6 +3653,7 @@ _tabs_new(Term_Container *child, Term_Container *parent)
|
||||||
tc->bell = _tabs_bell;
|
tc->bell = _tabs_bell;
|
||||||
tc->close = _tabs_close;
|
tc->close = _tabs_close;
|
||||||
tc->update = _tabs_update;
|
tc->update = _tabs_update;
|
||||||
|
tc->is_visible = _tabs_is_visible;
|
||||||
tc->title = eina_stringshare_add("Terminology");
|
tc->title = eina_stringshare_add("Terminology");
|
||||||
tc->type = TERM_CONTAINER_TYPE_TABS;
|
tc->type = TERM_CONTAINER_TYPE_TABS;
|
||||||
|
|
||||||
|
@ -3635,6 +3676,22 @@ _tabs_new(Term_Container *child, Term_Container *parent)
|
||||||
/* }}} */
|
/* }}} */
|
||||||
/* {{{ Term */
|
/* {{{ Term */
|
||||||
|
|
||||||
|
Eina_Bool
|
||||||
|
term_is_visible(Term *term)
|
||||||
|
{
|
||||||
|
/* TODO: boris */
|
||||||
|
Term_Container *tc;
|
||||||
|
|
||||||
|
if (!term)
|
||||||
|
return EINA_FALSE;
|
||||||
|
|
||||||
|
tc = term->container;
|
||||||
|
if (!tc)
|
||||||
|
return EINA_FALSE;
|
||||||
|
|
||||||
|
return tc->is_visible(tc, tc);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
background_set_shine(Config *config, Evas_Object *bg)
|
background_set_shine(Config *config, Evas_Object *bg)
|
||||||
{
|
{
|
||||||
|
|
|
@ -71,6 +71,8 @@ term_preedit_str_get(Term *term);
|
||||||
Ecore_IMF_Context *
|
Ecore_IMF_Context *
|
||||||
term_imf_context_get(Term *term);
|
term_imf_context_get(Term *term);
|
||||||
|
|
||||||
|
Eina_Bool term_is_visible(Term *term);
|
||||||
|
|
||||||
void win_font_size_set(Win *wn, int new_size);
|
void win_font_size_set(Win *wn, int new_size);
|
||||||
void win_font_update(Term *term);
|
void win_font_update(Term *term);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue