/* local subsystem functions */ static Eina_Bool _cb_key_down(__UNUSED__ void *data, __UNUSED__ int type, void *event) { Ecore_Event_Key *ev; ev = event; if (ev->event_window != input_window) return ECORE_CALLBACK_PASS_ON; if (!strcmp(ev->key, "Escape")) e_syscon_hide(); else if ((!strcmp(ev->key, "Left")) || (!strcmp(ev->key, "Up"))) { if (!o_selected) { if (e_flowlayout_pack_count_get(o_flow_extra)) o_selected_flow = o_flow_extra, o_selected = e_flowlayout_pack_object_last(o_flow_extra); else if (e_flowlayout_pack_count_get(o_flow_secondary)) o_selected_flow = o_flow_secondary, o_selected = e_flowlayout_pack_object_last(o_flow_secondary); else o_selected_flow = o_flow_main, o_selected = e_flowlayout_pack_object_last(o_flow_main); } else { edje_object_signal_emit(o_selected, "e,state,focused", "e"); o_selected = e_flowlayout_pack_object_prev(o_selected_flow, o_selected); if (!o_selected) { if (o_selected_flow == o_flow_extra) { if (e_flowlayout_pack_count_get(o_flow_secondary)) o_selected_flow = o_flow_secondary, o_selected = e_flowlayout_pack_object_last(o_flow_secondary); else o_selected_flow = o_flow_main, o_selected = e_flowlayout_pack_object_last(o_flow_main); } else if (o_selected_flow == o_flow_secondary) o_selected_flow = o_flow_main, o_selected = e_flowlayout_pack_object_last(o_flow_main); else { if (e_flowlayout_pack_count_get(o_flow_extra)) o_selected_flow = o_flow_extra, o_selected = e_flowlayout_pack_object_last(o_flow_extra); else if (e_flowlayout_pack_count_get(o_flow_secondary)) o_selected_flow = o_flow_secondary, o_selected = e_flowlayout_pack_object_last(o_flow_secondary); else o_selected_flow = o_flow_main, o_selected = e_flowlayout_pack_object_last(o_flow_main); } } } edje_object_signal_emit(o_selected, "e,state,unfocused", "e"); } else if ((!strcmp(ev->key, "Right")) || (!strcmp(ev->key, "Down")) || (!strcmp(ev->key, "Tab"))) { if (!o_selected) o_selected_flow = o_flow_main, o_selected = e_flowlayout_pack_object_first(o_flow_main); else { edje_object_signal_emit(o_selected, "e,state,focused", "e"); o_selected = e_flowlayout_pack_object_next(o_selected_flow, o_selected); if (!o_selected) { if (o_selected_flow == o_flow_extra) o_selected_flow = o_flow_main, o_selected = e_flowlayout_pack_object_first(o_flow_main); else if (o_selected_flow == o_flow_secondary) { if (e_flowlayout_pack_count_get(o_flow_extra)) o_selected_flow = o_flow_extra, o_selected = e_flowlayout_pack_object_first(o_flow_extra); else o_selected_flow = o_flow_main, o_selected = e_flowlayout_pack_object_first(o_flow_main); } else { if (e_flowlayout_pack_count_get(o_flow_secondary)) o_selected_flow = o_flow_secondary, o_selected = e_flowlayout_pack_object_first(o_flow_secondary); else if (e_flowlayout_pack_count_get(o_flow_extra)) o_selected_flow = o_flow_extra, o_selected = e_flowlayout_pack_object_first(o_flow_extra); else o_selected_flow = o_flow_main, o_selected = e_flowlayout_pack_object_first(o_flow_main); } } } edje_object_signal_emit(o_selected, "e,state,unfocused", "e"); } else if ((!strcmp(ev->keyname, "KP_Enter")) || (!strcmp(ev->keyname, "Return"))) { if (!o_selected) return ECORE_CALLBACK_RENEW; edje_object_signal_emit(o_selected, "e,state,focused", "e"); edje_object_signal_emit(o_selected, "e,action,click", ""); o_selected = o_selected_flow = NULL; } else { E_Action *act; double t; t = ecore_loop_time_get(); if (t - show_time > 0.5) { act = e_bindings_key_down_event_find(E_BINDING_CONTEXT_ANY, ev); if ((act) && (act->name)) { if (!strcmp(act->name, "syscon")) { if (popup) { e_syscon_show(popup->zone, do_defact); } } else { Eina_List *l; for (l = e_config->syscon.actions; l; l = l->next) { E_Config_Syscon_Action *sca; if (!(sca = l->data)) continue; if (!sca->action) continue; if (!strcmp(sca->action, act->name)) { act_count++; if (act_count > 2) { act->func.go(NULL, sca->params); e_syscon_hide(); break; } } } } } } } return ECORE_CALLBACK_PASS_ON; }
/* local subsystem functions */ static Eina_Bool _cb_key_down(__UNUSED__ void *data, __UNUSED__ int type, void *event) { Ecore_Event_Key *ev; ev = event; if (ev->event_window != input_window) return ECORE_CALLBACK_PASS_ON; if (!strcmp(ev->key, "Escape")) e_syscon_hide(); else if (!strcmp(ev->key, "Up")) { // FIXME: implement focus and key control... eventually } else if (!strcmp(ev->key, "Down")) { // FIXME: implement focus and key control... eventually } else if (!strcmp(ev->key, "Left")) { // FIXME: implement focus and key control... eventually } else if (!strcmp(ev->key, "Right")) { // FIXME: implement focus and key control... eventually } else if (!strcmp(ev->key, "Tab")) { // FIXME: implement focus and key control... eventually } else if (!strcmp(ev->key, "Enter")) { // FIXME: implement focus and key control... eventually } else { E_Action *act; double t; t = ecore_loop_time_get(); if (t - show_time > 0.5) { act = e_bindings_key_down_event_find(E_BINDING_CONTEXT_ANY, ev); if ((act) && (act->name)) { if (!strcmp(act->name, "syscon")) { if (popup) { e_syscon_show(popup->zone, do_defact); } } else { Eina_List *l; for (l = e_config->syscon.actions; l; l = l->next) { E_Config_Syscon_Action *sca; if (!(sca = l->data)) continue; if (!sca->action) continue; if (!strcmp(sca->action, act->name)) { act_count++; if (act_count > 2) { act->func.go(NULL, sca->params); e_syscon_hide(); break; } } } } } } } return ECORE_CALLBACK_PASS_ON; }