tab_selector: fix focus issue

This commit is contained in:
Boris Faure 2019-07-07 16:26:32 +02:00
parent 0f462611c3
commit 14d799d63e
3 changed files with 70 additions and 36 deletions

View File

@ -182,18 +182,18 @@ _autozoom(Evas_Object *obj)
sd->autozoom_timeout = ecore_timer_add(0.5, _autozoom_reset, obj);
}
void
_key_down_cb(void *data,
Evas *_e EINA_UNUSED,
Evas_Object *obj,
void *event)
sel_key_down(Evas_Object *obj,
Evas_Event_Key_Down *event)
{
Evas_Event_Key_Down *ev = event;
Sel *sd = evas_object_smart_data_get(data);
Sel *sd = evas_object_smart_data_get(obj);
Eina_List *l;
Entry *en;
if (!sd) return;
EINA_SAFETY_ON_NULL_RETURN(sd);
if ((!strcmp(ev->key, "Next")) ||
(!strcmp(ev->key, "Right")))
{
@ -207,11 +207,14 @@ _key_down_cb(void *data,
sel_entry_selected_set(obj, en->obj, EINA_FALSE);
break;
}
else return;
else
{
return;
}
}
}
sd->exit_now = EINA_FALSE;
_autozoom(data);
_autozoom(obj);
}
else if ((!strcmp(ev->key, "Prior")) ||
(!strcmp(ev->key, "Left")))
@ -226,11 +229,14 @@ _key_down_cb(void *data,
sel_entry_selected_set(obj, en->obj, EINA_FALSE);
break;
}
else return;
else
{
return;
}
}
}
sd->exit_now = EINA_FALSE;
_autozoom(data);
_autozoom(obj);
}
else if (!strcmp(ev->key, "Up"))
{
@ -255,12 +261,14 @@ _key_down_cb(void *data,
}
}
if (found == EINA_FALSE)
return;
{
return;
}
break;
}
}
sd->exit_now = EINA_FALSE;
_autozoom(data);
_autozoom(obj);
}
else if (!strcmp(ev->key, "Down"))
{
@ -285,12 +293,14 @@ _key_down_cb(void *data,
}
}
if (found == EINA_FALSE)
return;
{
return;
}
break;
}
}
sd->exit_now = EINA_FALSE;
_autozoom(data);
_autozoom(obj);
}
else if ((!strcmp(ev->key, "Return")) ||
(!strcmp(ev->key, "KP_Enter")) ||
@ -303,8 +313,8 @@ _key_down_cb(void *data,
ecore_timer_del(sd->autozoom_timeout);
sd->autozoom_timeout = NULL;
}
evas_object_smart_callback_call(data, "ending", NULL);
sel_zoom(data, 1.0);
evas_object_smart_callback_call(obj, "ending", NULL);
sel_zoom(obj, 1.0);
}
else if (!strcmp(ev->key, "Escape"))
{
@ -322,8 +332,8 @@ _key_down_cb(void *data,
ecore_timer_del(sd->autozoom_timeout);
sd->autozoom_timeout = NULL;
}
evas_object_smart_callback_call(data, "ending", NULL);
sel_zoom(data, 1.0);
evas_object_smart_callback_call(obj, "ending", NULL);
sel_zoom(obj, 1.0);
}
}
@ -670,8 +680,6 @@ sel_add(Evas_Object *parent)
_mouse_up_cb, obj);
evas_object_event_callback_add(sd->o_event, EVAS_CALLBACK_MOUSE_MOVE,
_mouse_move_cb, obj);
evas_object_event_callback_add(obj, EVAS_CALLBACK_KEY_DOWN,
_key_down_cb, obj);
sd->zoom = 1.0;
return obj;

View File

@ -13,5 +13,6 @@ void sel_entry_selected_set(Evas_Object *obj, Evas_Object *entry, Eina_Bool keep
void sel_zoom(Evas_Object *obj, double zoom);
void sel_orig_zoom_set(Evas_Object *obj, double zoom);
void sel_exit(Evas_Object *obj);
void sel_key_down(Evas_Object *obj, Evas_Event_Key_Down *event);
#endif

View File

@ -1303,7 +1303,30 @@ _cb_win_key_down(void *data,
DBG("ctrl:%d alt:%d shift:%d win:%d meta:%d hyper:%d",
ctrl, alt, shift, win, meta, hyper);
/* 1st/ Miniview */
/* 1st/ Tab selector */
{
Term_Container *tc = (Term_Container*) wn;
term = tc->focused_term_get(tc);
if (term)
{
Term_Container *tc = term->container;
Term_Container *tc_parent = tc->parent;
if (tc_parent->type == TERM_CONTAINER_TYPE_TABS)
{
Tabs *tabs = (Tabs*) tc_parent;
if (tabs->selector != NULL)
{
sel_key_down(tabs->selector, ev);
return;
}
}
}
}
/* 2nd/ Miniview */
if (wn->group_input)
{
GROUPED_INPUT_TERM_FOREACH(wn, l, term)
@ -1329,7 +1352,7 @@ _cb_win_key_down(void *data,
}
/* 2nd/ PopMedia */
/* 3rd/ PopMedia */
done = EINA_FALSE;
if (wn->group_input)
{
@ -1361,7 +1384,7 @@ _cb_win_key_down(void *data,
goto end;
}
/* 3rd/ Handle key bindings */
/* 4th/ Handle key bindings */
done = EINA_FALSE;
if (wn->group_input)
{
@ -1391,7 +1414,7 @@ _cb_win_key_down(void *data,
}
done = EINA_FALSE;
/* 4th/ Composing */
/* 5th/ Composing */
/* composing */
if (wn->khdl.imf)
{
@ -1472,7 +1495,7 @@ _cb_win_key_down(void *data,
goto end;
}
/* 5th/ send key to pty */
/* 6th/ send key to pty */
if (wn->group_input)
{
GROUPED_INPUT_TERM_FOREACH(wn, l, term)
@ -1489,7 +1512,7 @@ _cb_win_key_down(void *data,
keyin_handle_key_to_pty(ty, ev, alt, shift, ctrl);
}
/* 6th: specifics: jump on keypress / flicker on key */
/* 7th: specifics: jump on keypress / flicker on key */
end:
if (wn->group_input)
{
@ -2719,6 +2742,8 @@ _tabs_restore(Tabs *tabs)
Term *term;
Solo *solo;
Win *wn = tc->wn;
Evas_Object *selector = tabs->selector;
Evas_Object *selector_bg = tabs->selector_bg;
if (!tabs->selector)
return;
@ -2741,19 +2766,17 @@ _tabs_restore(Tabs *tabs)
tab_item->tc->unfocus(tab_item->tc, tc);
}
evas_object_smart_callback_del_full(tabs->selector, "selected",
evas_object_smart_callback_del_full(selector, "selected",
_tabs_selector_cb_selected, tabs);
evas_object_smart_callback_del_full(tabs->selector, "exit",
evas_object_smart_callback_del_full(selector, "exit",
_tabs_selector_cb_exit, tabs);
evas_object_smart_callback_del_full(tabs->selector, "ending",
evas_object_smart_callback_del_full(selector, "ending",
_tabs_selector_cb_ending, tabs);
evas_object_del(tabs->selector);
evas_object_del(tabs->selector_bg);
tabs->selector = NULL;
tabs->selector_bg = NULL;
wn->on_popover = EINA_FALSE;
/* XXX: reswallow in parent */
tc->parent->swallow(tc->parent, tc, tc);
solo = (Solo*)tabs->current->tc;
@ -2763,6 +2786,11 @@ _tabs_restore(Tabs *tabs)
_tabs_refresh(tabs);
tabs->current->tc->unfocus(tabs->current->tc, tabs->current->tc);
tabs->current->tc->focus(tabs->current->tc, tabs->current->tc);
elm_object_focus_set(selector, EINA_FALSE);
evas_object_del(selector);
evas_object_del(selector_bg);
}
static void
@ -2822,8 +2850,6 @@ _cb_tab_selector_show(Tabs *tabs, Tab_Item *to_item)
if (tabs->selector_bg)
return;
wn->on_popover = EINA_TRUE;
o = tc->get_evas_object(tc);
evas_object_geometry_get(o, &x, &y, &w, &h);
@ -2899,7 +2925,6 @@ _cb_tab_selector_show(Tabs *tabs, Tab_Item *to_item)
EINA_TRUE);
sel_exit(tabs->selector);
}
elm_object_focus_set(tabs->selector, EINA_TRUE);
}
static void