From fb6b7e9f755d30496c1e059fc4249590f2990bcf Mon Sep 17 00:00:00 2001 From: Boris Faure Date: Sat, 29 Nov 2014 21:35:38 +0100 Subject: [PATCH] work on bell status --- data/themes/default.edc | 39 ++++ src/bin/term_container.h | 4 + src/bin/win.c | 383 +++++++++++++++++++++++++++++---------- 3 files changed, 332 insertions(+), 94 deletions(-) diff --git a/data/themes/default.edc b/data/themes/default.edc index dd4f3335..c2eb4163 100644 --- a/data/themes/default.edc +++ b/data/themes/default.edc @@ -2302,6 +2302,45 @@ target: "0.clip"; target: "1.clip"; target: "2.clip"; target: "3.clip"; target: } } + group { name: "terminology/tab"; + parts { + part { name: "terminology.tabmissed.label"; type: TEXT; mouse_events: 0; + effect: GLOW; + scale: 1; + description { state: "default" 0.0; + fixed: 1 1; + color: 255 255 64 255; + color2: 255 153 51 128; + color3: 255 0 0 20; + align: 0 0.5; + text { font: "Sans"; size: 10; + align: 0 0.5; + min: 1 1; + ellipsis: 0; + } + } + } + part { name: "terminology.tabtitle.label"; type: TEXT; mouse_events: 0; + effect: GLOW; + scale: 1; + description { state: "default" 0.0; + fixed: 1 1; + rel1.to: "terminology.tabmissed.label"; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + color: 255 255 255 255; + color2: 51 153 255 128; + color3: 51 153 255 20; + align: 0.5 0.5; + text { font: "Sans"; size: 10; + align: 0.5 0.5; + min: 1 1; + ellipsis: 1; + } + } + } + } + } group { name: "terminology/tabs"; parts { part { name: "terminology.bg"; diff --git a/src/bin/term_container.h b/src/bin/term_container.h index a4ed35aa..b40b3c7b 100644 --- a/src/bin/term_container.h +++ b/src/bin/term_container.h @@ -34,6 +34,8 @@ struct _Term_Container { Term_Container *parent; Win *wn; Evas_Object *selector_img; + Eina_Bool missed_bell; + Eina_Bool is_focused; const char *title; Term *(*term_next)(Term_Container *tc, Term_Container *child); @@ -47,7 +49,9 @@ struct _Term_Container { void (*swallow)(Term_Container *container, Term_Container *orig, Term_Container *new_child); void (*focus)(Term_Container *tc, Term_Container *relative); + void (*unfocus)(Term_Container *tc, Term_Container *relative); void (*set_title)(Term_Container *tc, Term_Container *child, const char *title); + void (*bell)(Term_Container *tc, Term_Container *child); void (*close)(Term_Container *container, Term_Container *child, Eina_Bool refocus); }; diff --git a/src/bin/win.c b/src/bin/win.c index f881c771..cc40aea2 100644 --- a/src/bin/win.c +++ b/src/bin/win.c @@ -46,7 +46,6 @@ struct _Term struct { int x, y; } down; - unsigned char focused : 1; unsigned char hold : 1; unsigned char unswallowed : 1; unsigned char missed_bell : 1; @@ -66,8 +65,8 @@ struct _Solo { typedef struct _Tab_Item Tab_Item; struct _Tab_Item { Term_Container *tc; + Evas_Object *obj; Elm_Object_Item *elm_item; - Elm_Object_Item *separator; void *selector_entry; }; @@ -113,7 +112,6 @@ struct _Win Evas_Object *cmdbox; Ecore_Timer *cmdbox_del_timer; Ecore_Timer *cmdbox_focus_timer; - unsigned char focused : 1; unsigned char cmdbox_up : 1; }; @@ -122,6 +120,8 @@ struct _Win static Eina_List *wins = NULL; +static Eina_Bool _win_is_focused(Win *wn); +static Eina_Bool _term_is_focused(Term *term); static Term_Container *_solo_new(Term *term, Win *wn); static Term_Container *_split_new(Term_Container *tc1, Term_Container *tc2, Eina_Bool is_horizontal); static Term_Container *_tabs_new(Term_Container *child, Term_Container *parent); @@ -183,10 +183,11 @@ static void _cb_win_focus_in(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) { Win *wn = data; + Term_Container *tc = (Term_Container*) wn; Term *term; - if (!wn->focused) elm_win_urgent_set(wn->win, EINA_FALSE); - wn->focused = EINA_TRUE; + if (!tc->is_focused) elm_win_urgent_set(wn->win, EINA_FALSE); + tc->is_focused = EINA_TRUE; if ((wn->cmdbox_up) && (wn->cmdbox)) elm_object_focus_set(wn->cmdbox, EINA_TRUE); @@ -214,12 +215,8 @@ _cb_win_focus_in(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUS } } - if (!term) return; - - edje_object_signal_emit(term->bg, "focus,in", "terminology"); - edje_object_signal_emit(term->base, "focus,in", "terminology"); - if (!wn->cmdbox_up) - elm_object_focus_set(term->termio, EINA_TRUE); + if (term) + _term_focus(term); } static void @@ -228,13 +225,19 @@ _cb_win_focus_out(void *data, Evas_Object *obj EINA_UNUSED, { Win *wn = data; Term *term; + Term_Container *tc = (Term_Container*) wn; - wn->focused = EINA_FALSE; + DBG("win focus out"); + + tc->is_focused = EINA_FALSE; if ((wn->cmdbox_up) && (wn->cmdbox)) elm_object_focus_set(wn->cmdbox, EINA_FALSE); term = _win_focused_term_get(wn); + DBG("term:%p", term); if (!term) return; + tc = term->container; + tc->unfocus(tc, tc); edje_object_signal_emit(term->bg, "focus,out", "terminology"); edje_object_signal_emit(term->base, "focus,out", "terminology"); if (!wn->cmdbox_up) @@ -254,11 +257,9 @@ _cb_term_mouse_in(void *data, Evas *e EINA_UNUSED, config = termio_config_get(term->termio); if ((!config) || (!config->mouse_over_focus)) return; - if ((!term->wn) || (!term->wn->focused)) + if (!_win_is_focused(term->wn)) return; - term->focused = EINA_TRUE; - _term_focus(term); } @@ -409,11 +410,40 @@ _solo_set_title(Term_Container *tc, Term_Container *child EINA_UNUSED, const char *title) { eina_stringshare_del(tc->title); - tc->title = eina_stringshare_add(title); + tc->title = eina_stringshare_add(title); DBG("set title: '%s'", title); tc->parent->set_title(tc->parent, tc, title); } +static void +_solo_bell(Term_Container *tc EINA_UNUSED, Term_Container *child EINA_UNUSED) +{ + DBG("bell is_focused:%d", tc->is_focused); + if (tc->is_focused) + return; + tc->missed_bell = EINA_TRUE; + tc->parent->bell(tc->parent, tc); +} + +static void +_solo_unfocus(Term_Container *tc, Term_Container *relative EINA_UNUSED) +{ + assert (tc->type == TERM_CONTAINER_TYPE_SOLO); + + DBG("unfocus %d", tc->is_focused); + + if (!tc->is_focused) + return; + + if (tc->parent != relative) + { + DBG("unfocus from child"); + tc->parent->unfocus(tc->parent, tc); + } + + tc->is_focused = EINA_FALSE; +} + static void _solo_focus(Term_Container *tc, Term_Container *relative EINA_UNUSED) { @@ -421,6 +451,13 @@ _solo_focus(Term_Container *tc, Term_Container *relative EINA_UNUSED) assert (tc->type == TERM_CONTAINER_TYPE_SOLO); solo = (Solo*) tc; + DBG("focus %d", tc->is_focused); + + if (tc->is_focused) + return; + + tc->missed_bell = EINA_FALSE; + if (tc->parent == relative) { DBG("focus from parent"); @@ -431,6 +468,8 @@ _solo_focus(Term_Container *tc, Term_Container *relative EINA_UNUSED) DBG("focus from child"); tc->parent->focus(tc->parent, tc); } + + tc->is_focused = EINA_TRUE; } static Term_Container * @@ -455,8 +494,12 @@ _solo_new(Term *term, Win *wn) tc->size_eval = _solo_size_eval; tc->swallow = NULL; tc->focus = _solo_focus; + tc->unfocus = _solo_unfocus; tc->set_title = _solo_set_title; + tc->bell = _solo_bell; tc->close= _solo_close; + tc->title = eina_stringshare_add("Terminology"); + tc->type = TERM_CONTAINER_TYPE_SOLO; DBG("tc:%p", tc); @@ -464,7 +507,6 @@ _solo_new(Term *term, Win *wn) tc->wn = wn; solo->term = term; - tc->type = TERM_CONTAINER_TYPE_SOLO; term->container = tc; @@ -474,6 +516,18 @@ _solo_new(Term *term, Win *wn) /* }}} */ /* {{{ Win */ +static Eina_Bool +_win_is_focused(Win *wn) +{ + Term_Container *tc; + if (!wn) + return EINA_FALSE; + + tc = (Term_Container*) wn; + + return tc->is_focused; +} + int win_term_set(Win *wn, Term *term) { @@ -803,9 +857,30 @@ _win_focus(Term_Container *tc, Term_Container *child EINA_UNUSED) wn = (Win*) tc; DBG("focus from child"); - if (!wn->focused) elm_win_urgent_set(wn->win, EINA_FALSE); - wn->focused = EINA_TRUE; - /* TODO: go down? */ + if (!tc->is_focused) elm_win_urgent_set(wn->win, EINA_FALSE); + tc->is_focused = EINA_TRUE; +} + +static void +_win_unfocus(Term_Container *tc, Term_Container *child EINA_UNUSED) +{ + tc->is_focused = EINA_FALSE; +} + +static void +_win_bell(Term_Container *tc EINA_UNUSED, Term_Container *child EINA_UNUSED) +{ + Win *wn; + assert (tc->type == TERM_CONTAINER_TYPE_WIN); + + wn = (Win*) tc; + + if (tc->is_focused) return; + + if (wn->config->urg_bell) + { + elm_win_urgent_set(wn->win, EINA_TRUE); + } } static void @@ -856,8 +931,11 @@ win_new(const char *name, const char *role, const char *title, tc->size_eval = _win_size_eval; tc->swallow = _win_swallow; tc->focus = _win_focus; + tc->unfocus = _win_unfocus; tc->set_title = _win_set_title; + tc->bell = _win_bell; tc->close = _win_close; + tc->title = eina_stringshare_add("Terminology"); tc->type = TERM_CONTAINER_TYPE_WIN; config_default_font_set(config, evas_object_evas_get(wn->win)); @@ -915,7 +993,7 @@ main_close(Evas_Object *win, Evas_Object *term) wn->terms = eina_list_remove(wn->terms, tm); tc = tm->container; - tc->close(tc, tc, tm->focused); + tc->close(tc, tc, _term_is_focused(tm)); term_free(tm); @@ -1044,7 +1122,8 @@ _win_focused_term_get(Win *wn) EINA_LIST_FOREACH(wn->terms, l, term) { - if (term->focused) return term; + DBG("term:%p", term); + if (_term_is_focused(term)) return term; } return NULL; } @@ -1223,6 +1302,10 @@ _split_swallow(Term_Container *tc, Term_Container *orig, evas_object_geometry_set(o, x, y, w, h); evas_object_show(o); evas_object_show(split->panes); + + tc->missed_bell = EINA_FALSE; + if (split->tc1->missed_bell || split->tc2->missed_bell) + tc->missed_bell = EINA_TRUE; } static Term * @@ -1285,6 +1368,8 @@ _split_focus(Term_Container *tc, Term_Container *relative) assert (tc->type == TERM_CONTAINER_TYPE_SPLIT); split = (Split*) tc; + if (tc->is_focused) + return; if (tc->parent == relative) { @@ -1297,6 +1382,21 @@ _split_focus(Term_Container *tc, Term_Container *relative) split->last_focus = relative; tc->parent->focus(tc->parent, tc); } + + tc->missed_bell = EINA_FALSE; + if (split->tc1->missed_bell || split->tc2->missed_bell) + tc->missed_bell = EINA_TRUE; +} + +static void +_split_unfocus(Term_Container *tc, Term_Container *relative EINA_UNUSED) +{ + if (!tc->is_focused) + return; + + tc->is_focused = EINA_TRUE; + + tc->parent->unfocus(tc->parent, tc); } static void @@ -1319,6 +1419,21 @@ _split_set_title(Term_Container *tc, Term_Container *child, } } +static void +_split_bell(Term_Container *tc, Term_Container *child) +{ + assert (tc->type == TERM_CONTAINER_TYPE_SPLIT); + + DBG("bell: self:%p child:%p", tc, child); + + if (tc->is_focused) + return; + + tc->missed_bell = EINA_TRUE; + + tc->parent->bell(tc->parent, tc); +} + static Term_Container * _split_new(Term_Container *tc1, Term_Container *tc2, Eina_Bool is_horizontal) { @@ -1342,14 +1457,17 @@ _split_new(Term_Container *tc1, Term_Container *tc2, Eina_Bool is_horizontal) tc->size_eval = _split_size_eval; tc->swallow = _split_swallow; tc->focus = _split_focus; + tc->unfocus = _split_unfocus; tc->set_title = _split_set_title; + tc->bell = _split_bell; tc->close = _split_close; + tc->title = eina_stringshare_add("Terminology"); + tc->type = TERM_CONTAINER_TYPE_SPLIT; + tc->parent = NULL; tc->wn = tc1->wn; - tc->type = TERM_CONTAINER_TYPE_SPLIT; - tc1->parent = tc2->parent = tc; split->tc1 = tc1; @@ -2003,7 +2121,7 @@ _tabs_selector_cb_selected(void *data, Tabs *tabs = data; Eina_List *l; Tab_Item *tab_item; - /* TODO: boris */ + DBG("selected: %p info:%p", tabs, info); EINA_LIST_FOREACH(tabs->tabs, l, tab_item) @@ -2017,27 +2135,6 @@ _tabs_selector_cb_selected(void *data, } DBG("FAIL"); -#if 0 - Split *sp = data; - Eina_List *l; - Term *tm; - - EINA_LIST_FOREACH(sp->terms, l, tm) - { - if (tm->sel == info) - { - _term_focus(tm); - _term_focus_show(sp, tm); - _sel_restore(sp); - _term_miniview_check(tm); - return; - } - } - _sel_restore(sp); - _term_focus(sp->term); - _term_focus_show(sp, sp->term); - _term_miniview_check(tm); -#endif } static void @@ -2057,12 +2154,8 @@ _tabs_selector_cb_ending(void *data, void *info EINA_UNUSED) { Tabs *tabs = data; - /* TODO: boris */ + /* TODO */ DBG("ending: %p", tabs); -#if 0 - Split *sp = data; - edje_object_signal_emit(sp->sel_bg, "end", "terminology"); -#endif } @@ -2245,6 +2338,27 @@ _tab_item_find(Tabs *tabs, Term_Container *child) return NULL; } +static void +_tabs_bells_check(Tabs *tabs) +{ + Term_Container *tc = (Term_Container*)tabs; + Eina_List *l; + Tab_Item *tab_item; + + tc->missed_bell = EINA_FALSE; + + EINA_LIST_FOREACH(tabs->tabs, l, tab_item) + { + if (tab_item->tc->missed_bell) + { + tc->missed_bell = EINA_TRUE; + goto end; + } + } + end: + edje_object_part_text_set(tabs->base, "terminology.tabmissed.label", + tc->missed_bell ? "!" : ""); +} static void _tabs_close(Term_Container *tc, Term_Container *child, @@ -2277,6 +2391,7 @@ _tabs_close(Term_Container *tc, Term_Container *child, { Eina_List *l; Tab_Item *tab_item; + char buf[32]; l = _tab_item_find(tabs, child); tab_item = l->data; @@ -2306,11 +2421,14 @@ _tabs_close(Term_Container *tc, Term_Container *child, evas_object_del(o); } - elm_object_item_del(tab_item->elm_item); - elm_object_item_del(tab_item->separator); tabs->tabs = eina_list_remove_list(tabs->tabs, l); free(tab_item); + + _tabs_bells_check(tabs); + count--; + snprintf(buf, sizeof(buf), "%i", count); + edje_object_part_text_set(tabs->base, "terminology.tabcount.label", buf); } } @@ -2427,6 +2545,8 @@ _tabs_swallow(Term_Container *tc, Term_Container *orig, edje_object_part_swallow(tabs->base, "content", new_child->get_evas_object(new_child)); } + + _tabs_bells_check(tabs); } @@ -2473,9 +2593,11 @@ tab_item_new(Tabs *tabs, Term_Container *child) tab_item->tc = child; assert(child != NULL); + toolbar_item = elm_toolbar_item_append(tabs->tabbar, NULL, "Terminology", _tab_selected, tab_item); + elm_toolbar_item_priority_set(toolbar_item, 1); tab_item->elm_item = toolbar_item; @@ -2510,6 +2632,8 @@ _tab_new_cb(void *data, tc_new->parent = tc_parent; tab_item_new(tabs, tc_new); + + tc_new->focus(tc_new, tc_parent); } static void @@ -2533,9 +2657,14 @@ _tab_hide_cb(void *data, { Evas_Coord w = 0, h = 0; Tabs *tabs = data; + Term_Container *tc; + char buf[32]; + int n; DBG("hide"); + tc = (Term_Container*) tabs; + elm_coords_finger_size_adjust(1, &w, 1, &h); if (!tabs->tabbar_spacer) @@ -2560,9 +2689,11 @@ _tab_hide_cb(void *data, tabs->selector_spacer); } - /* TODO */ - edje_object_part_text_set(tabs->base, "terminology.tabcount.label", "1337"); - edje_object_part_text_set(tabs->base, "terminology.tabmissed.label", "42"); + n = eina_list_count(tabs->tabs); + snprintf(buf, sizeof(buf), "%i", n); + edje_object_part_text_set(tabs->base, "terminology.tabcount.label", buf); + edje_object_part_text_set(tabs->base, "terminology.tabmissed.label", + tc->missed_bell ? "!" : ""); edje_object_signal_emit(tabs->base, "tabbar,off", "terminology"); edje_object_signal_emit(tabs->base, "tabcontrols,on", "terminology"); @@ -2570,19 +2701,41 @@ _tab_hide_cb(void *data, evas_object_hide(tabs->box); } +static void +_tab_item_redo_title(Tab_Item *tab_item) +{ + Term_Container *tc = tab_item->tc; + + if (tc->missed_bell) + { + const char *custom_title; + custom_title = eina_stringshare_printf("! %s", tc->title); + elm_object_item_text_set(tab_item->elm_item, custom_title); + eina_stringshare_del(custom_title); + } + else + { + elm_object_item_text_set(tab_item->elm_item, tc->title); + } +} + + static void _tabs_focus(Term_Container *tc, Term_Container *relative) { Tabs *tabs; + if (tc->is_focused) + return; + assert (tc->type == TERM_CONTAINER_TYPE_TABS); tabs = (Tabs*) tc; - if (tc->parent == relative) { DBG("focus from parent"); tabs->current->tc->focus(tabs->current->tc, tc); + _tab_item_redo_title(tabs->current); } else { @@ -2597,7 +2750,47 @@ _tabs_focus(Term_Container *tc, Term_Container *relative) elm_toolbar_item_selected_set(tabs->current->elm_item, EINA_FALSE); elm_toolbar_item_selected_set(tab_item->elm_item, EINA_TRUE); tc->parent->focus(tc->parent, tc); + + _tab_item_redo_title(tab_item); } + _tabs_bells_check(tabs); +} + +static void +_tabs_unfocus(Term_Container *tc, Term_Container *relative EINA_UNUSED) +{ + if (!tc->is_focused) + return; + + tc->is_focused = EINA_FALSE; + + tc->parent->unfocus(tc->parent, tc); +} + +static void +_tabs_bell(Term_Container *tc EINA_UNUSED, Term_Container *child EINA_UNUSED) +{ + Tabs *tabs; + Tab_Item *tab_item; + Eina_List *l; + + DBG("bell"); + + assert (tc->type == TERM_CONTAINER_TYPE_TABS); + tabs = (Tabs*) tc; + + _tabs_bells_check(tabs); + + if (tc->is_focused) + return; + + l = _tab_item_find(tabs, child); + assert(l); + tab_item = l->data; + + _tab_item_redo_title(tab_item); + + tc->parent->bell(tc->parent, tc); } static void @@ -2615,7 +2808,7 @@ _tabs_set_title(Term_Container *tc, Term_Container *child, assert(l); tab_item = l->data; - elm_object_item_part_text_set(tab_item->elm_item, "elm.text", title); + _tab_item_redo_title(tab_item); DBG("set title: '%s' child:%p current->tc:%p", title, child, tabs->current->tc); @@ -2660,8 +2853,11 @@ _tabs_new(Term_Container *child, Term_Container *parent) tc->size_eval = _tabs_size_eval; tc->swallow = _tabs_swallow; tc->focus = _tabs_focus; + tc->unfocus = _tabs_unfocus; tc->set_title = _tabs_set_title; + tc->bell = _tabs_bell; tc->close= _tabs_close; + tc->title = eina_stringshare_add("Terminology"); tc->type = TERM_CONTAINER_TYPE_TABS; tc->parent = parent; @@ -2728,6 +2924,18 @@ _tabs_new(Term_Container *child, Term_Container *parent) /* }}} */ /* {{{ Term */ +static Eina_Bool +_term_is_focused(Term *term) +{ + Term_Container *tc; + + if (!term) + return EINA_FALSE; + + tc = term->container; + return tc->is_focused; +} + #if 0 static void _cb_size_track(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event EINA_UNUSED) @@ -2793,31 +3001,33 @@ _term_focus(Term *term) Term *term2; const char *title; - DBG("term focus"); + DBG("term focus: %d", _term_is_focused(term)); + if (_term_is_focused(term)) + return; EINA_LIST_FOREACH(term->wn->terms, l, term2) { if (term2 != term) { - if (term2->focused) + if (_term_is_focused(term2)) { - term2->focused = EINA_FALSE; + tc = term2->container; + tc->unfocus(tc, tc); edje_object_signal_emit(term2->bg, "focus,out", "terminology"); edje_object_signal_emit(term2->base, "focus,out", "terminology"); elm_object_focus_set(term2->termio, EINA_FALSE); } } } - term->focused = EINA_TRUE; + + tc = term->container; + tc->focus(tc, tc); + edje_object_signal_emit(term->bg, "focus,in", "terminology"); edje_object_signal_emit(term->base, "focus,in", "terminology"); if (term->wn->cmdbox) elm_object_focus_set(term->wn->cmdbox, EINA_FALSE); elm_object_focus_set(term->termio, EINA_TRUE); - tc = term->container; - - tc->focus(tc, tc); - title = termio_title_get(term->termio); if (title) tc->set_title(tc, tc, title); @@ -3008,7 +3218,7 @@ _term_miniview_check(Term *term) //Split *sp = _split_find(term->wn->win, term->term, NULL); if (term->miniview_shown) { - if (term->focused) + if (_term_is_focused(term)) edje_object_signal_emit(term->bg, "miniview,on", "terminology"); #if 0 else if (sp->term != term) @@ -3264,7 +3474,7 @@ static void _cb_icon(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) { Term *term = data; - if (term->focused) + if (_term_is_focused(term)) elm_win_icon_name_set(term->wn->win, termio_icon_name_get(term->termio)); } @@ -3752,7 +3962,7 @@ main_term_bg_config(Term *term) } } - if ((term->focused) && (term->wn->focused)) + if (_term_is_focused(term) && (_win_is_focused(term->wn))) { edje_object_signal_emit(term->bg, "focus,in", "terminology"); edje_object_signal_emit(term->base, "focus,in", "terminology"); @@ -3845,35 +4055,21 @@ static void _cb_bell(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) { Term *term = data; - Config *config = termio_config_get(term->termio); + Term_Container *tc; - if (!config) return; - if (!config->disable_visual_bell) + tc = term->container; + + tc->bell(tc, tc); + + if (!tc->wn->config->disable_visual_bell) { -#if 0 - Split *sp; - edje_object_signal_emit(term->bg, "bell", "terminology"); edje_object_signal_emit(term->base, "bell", "terminology"); - if (config->bell_rings) + if (tc->wn->config->bell_rings) { edje_object_signal_emit(term->bg, "bell,ring", "terminology"); edje_object_signal_emit(term->base, "bell,ring", "terminology"); } - sp = _split_find(term->wn->win, term->term, NULL); - if (sp) - { - if (sp->term != term) - { - term->missed_bell = EINA_TRUE; - _split_tabcount_update(sp, sp->term); - } - } -#endif - } - if (config->urg_bell) - { - if (!term->wn->focused) elm_win_urgent_set(term->wn->win, EINA_TRUE); } } @@ -3884,10 +4080,11 @@ _cb_options_done(void *data EINA_UNUSED) Win *wn = data; Eina_List *l; Term *term; - if (!wn->focused) return; + + if (!_win_is_focused(wn)) return; EINA_LIST_FOREACH(wn->terms, l, term) { - if (term->focused) + if (_term_is_focused(term)) { elm_object_focus_set(term->termio, EINA_TRUE); termio_event_feed_mouse_in(term->termio); @@ -4037,8 +4234,6 @@ term_new(Win *wn, Config *config, const char *cmd, evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_IN, _cb_term_mouse_in, term); - if (!wn->terms) term->focused = EINA_TRUE; - wn->terms = eina_list_append(wn->terms, term); app_server_term_add(term);