- allow tab when there is no state to get back from empty selector

- fix segv window could have been deleted


SVN revision: 48873
This commit is contained in:
Hannes Janetzek 2010-05-14 22:41:30 +00:00
parent 6127ee87f2
commit f6b49da880
1 changed files with 31 additions and 22 deletions

View File

@ -141,7 +141,7 @@ evry_show(E_Zone *zone, const char *params)
if (!(params && eina_list_count(win->selectors[0]->states) == 1)) if (!(params && eina_list_count(win->selectors[0]->states) == 1))
evry_hide(1); evry_hide(1);
if (win->selector && params) if (win && win->selector && params)
{ {
EINA_LIST_FOREACH(win->selectors[0]->plugins, l, p) EINA_LIST_FOREACH(win->selectors[0]->plugins, l, p)
if (!strcmp(params, p->name)) break; if (!strcmp(params, p->name)) break;
@ -1418,6 +1418,7 @@ _evry_cb_key_down(void *data __UNUSED__, int type __UNUSED__, void *event)
{ {
Ecore_Event_Key *ev = event; Ecore_Event_Key *ev = event;
Evry_State *s; Evry_State *s;
Evry_Selector *sel;
const char *key = NULL, *old; const char *key = NULL, *old;
if (ev->event_window != input_window) if (ev->event_window != input_window)
@ -1457,18 +1458,16 @@ _evry_cb_key_down(void *data __UNUSED__, int type __UNUSED__, void *event)
{ {
if (!(act = e_action_find(bind->action))) continue; if (!(act = e_action_find(bind->action))) continue;
if (act->func.go) if (!act->func.go) continue;
act->func.go(E_OBJECT(win->popup->zone), bind->params);
act->func.go(E_OBJECT(win->popup->zone), bind->params);
return 1;
} }
} }
} }
if (!win->selector || !win->selector->state)
return 1;
win->request_selection = EINA_FALSE;
s = win->selector->state;
old = ev->key; old = ev->key;
win->request_selection = EINA_FALSE;
if (!strcmp(ev->key, "KP_Enter")) if (!strcmp(ev->key, "KP_Enter"))
{ {
@ -1524,6 +1523,18 @@ _evry_cb_key_down(void *data __UNUSED__, int type __UNUSED__, void *event)
ev->key = key; ev->key = key;
} }
if (!win || !(sel = win->selector))
goto end;
if (!ev->modifiers && !strcmp(key, "Tab"))
{
_evry_selectors_switch(1);
goto end;
}
if (!(s = sel->state))
goto end;
if (!win->visible && (!strcmp(key, "Down"))) if (!win->visible && (!strcmp(key, "Down")))
{ {
_evry_list_win_show(); _evry_list_win_show();
@ -1551,14 +1562,14 @@ _evry_cb_key_down(void *data __UNUSED__, int type __UNUSED__, void *event)
{ {
if (!strcmp(key, "u")) if (!strcmp(key, "u"))
{ {
if (!_evry_clear(win->selector)) if (!_evry_clear(sel))
evry_browse_back(win->selector); evry_browse_back(sel);
goto end; goto end;
} }
else if (!strcmp(key, "1")) else if (!strcmp(key, "1"))
_evry_view_toggle(s, NULL); _evry_view_toggle(s, NULL);
else if (!strcmp(key, "Return")) else if (!strcmp(key, "Return"))
_evry_plugin_action(win->selector, 0); _evry_plugin_action(sel, 0);
else if (!strcmp(key, "v")) else if (!strcmp(key, "v"))
{ {
win->request_selection = EINA_TRUE; win->request_selection = EINA_TRUE;
@ -1577,28 +1588,26 @@ _evry_cb_key_down(void *data __UNUSED__, int type __UNUSED__, void *event)
goto end; goto end;
else if (!strcmp(key, "Right")) else if (!strcmp(key, "Right"))
{ {
if (!evry_browse_item(win->selector) && if (!evry_browse_item(sel) &&
(win->selector != win->selectors[2])) (sel != win->selectors[2]))
_evry_selectors_switch(1); _evry_selectors_switch(1);
} }
else if (!strcmp(key, "Left")) else if (!strcmp(key, "Left"))
{ {
if (!evry_browse_back(win->selector)) if (!evry_browse_back(sel))
_evry_selectors_switch(-1); _evry_selectors_switch(-1);
} }
else if (!strcmp(key, "Return")) else if (!strcmp(key, "Return"))
{ {
if (ev->modifiers & ECORE_EVENT_MODIFIER_SHIFT) if (ev->modifiers & ECORE_EVENT_MODIFIER_SHIFT)
_evry_plugin_action(win->selector, 0); _evry_plugin_action(sel, 0);
else /*if (!_evry_browse_item(win->selector))*/ else /*if (!_evry_browse_item(sel))*/
_evry_plugin_action(win->selector, 1); _evry_plugin_action(sel, 1);
} }
else if (!strcmp(key, "Tab"))
_evry_selectors_switch(1);
else if (!strcmp(key, "BackSpace")) else if (!strcmp(key, "BackSpace"))
{ {
if (!_evry_backspace(win->selector)) if (!_evry_backspace(sel))
evry_browse_back(win->selector); evry_browse_back(sel);
} }
else if (_evry_view_key_press(s, ev)) else if (_evry_view_key_press(s, ev))
goto end; goto end;
@ -1613,7 +1622,7 @@ _evry_cb_key_down(void *data __UNUSED__, int type __UNUSED__, void *event)
{ {
strcat(s->inp, ev->compose); strcat(s->inp, ev->compose);
_evry_update(win->selector, 1); _evry_update(sel, 1);
} }
} }