diff options
author | ulion <ulion@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2007-12-04 10:42:59 +0000 |
---|---|---|
committer | ulion <ulion@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2007-12-04 10:42:59 +0000 |
commit | a986e2a1f68b1145d51f9b63c70cd0df9731e950 (patch) | |
tree | 873b487166057476f47ed6c0915ee6717ace6d22 /libmenu/menu_list.c | |
parent | fe27bf007ba98da826eb146404eea09610aecf23 (diff) | |
download | mpv-a986e2a1f68b1145d51f9b63c70cd0df9731e950.tar.bz2 mpv-a986e2a1f68b1145d51f9b63c70cd0df9731e950.tar.xz |
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
by menu config file.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@25291 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmenu/menu_list.c')
-rw-r--r-- | libmenu/menu_list.c | 67 |
1 files changed, 29 insertions, 38 deletions
diff --git a/libmenu/menu_list.c b/libmenu/menu_list.c index 511ca8e912..94e4c77505 100644 --- a/libmenu/menu_list.c +++ b/libmenu/menu_list.c @@ -153,6 +153,8 @@ void menu_list_draw(menu_t* menu,mp_image_t* mpi) { } void menu_list_read_cmd(menu_t* menu,int cmd) { + list_entry_t* m; + int i; switch(cmd) { case MENU_CMD_UP: while(mpriv->current->prev) { @@ -179,6 +181,27 @@ void menu_list_read_cmd(menu_t* menu,int cmd) { if(!mpriv->current->hide) return; } break; + case MENU_CMD_HOME: + mpriv->current = mpriv->menu; + break; + case MENU_CMD_END: + for(m = mpriv->current ; m && m->next ; m = m->next) + /**/; + if(m) + mpriv->current = m; + break; + case MENU_CMD_PAGE_UP: + for(i = 0, m = mpriv->current ; m && m->prev && i < mpriv->disp_lines ; m = m->prev, i++) + /**/; + if(m) + mpriv->current = m; + break; + case MENU_CMD_PAGE_DOWN: + for(i = 0, m = mpriv->current ; m && m->next && i < mpriv->disp_lines ; m = m->next, i++) + /**/; + if(m) + mpriv->current = m; + break; case MENU_CMD_LEFT: case MENU_CMD_CANCEL: menu->show = 0; @@ -187,57 +210,25 @@ void menu_list_read_cmd(menu_t* menu,int cmd) { } } -void menu_list_jump_to_key(menu_t* menu,int c) { +int menu_list_jump_to_key(menu_t* menu,int c) { if(c < 256 && isalnum(c)) { list_entry_t* e = mpriv->current; if(e->txt[0] == c) e = e->next; for( ; e ; e = e->next) { if(e->txt[0] == c) { mpriv->current = e; - return; + return 1; } } for(e = mpriv->menu ; e ; e = e->next) { if(e->txt[0] == c) { mpriv->current = e; - return; + return 1; } } - } else - menu_dflt_read_key(menu,c); -} - -void menu_list_read_key(menu_t* menu,int c,int jump_to) { - list_entry_t* m; - int i; - switch(c) { - case KEY_HOME: - mpriv->current = mpriv->menu; - break; - case KEY_END: - for(m = mpriv->current ; m && m->next ; m = m->next) - /**/; - if(m) - mpriv->current = m; - break; - case KEY_PAGE_UP: - for(i = 0, m = mpriv->current ; m && m->prev && i < mpriv->disp_lines ; m = m->prev, i++) - /**/; - if(m) - mpriv->current = m; - break; - case KEY_PAGE_DOWN: - for(i = 0, m = mpriv->current ; m && m->next && i < mpriv->disp_lines ; m = m->next, i++) - /**/; - if(m) - mpriv->current = m; - break; - default: - if(jump_to) - menu_list_jump_to_key(menu,c); - else - menu_dflt_read_key(menu,c); - } + return 1; + } + return 0; } void menu_list_add_entry(menu_t* menu,list_entry_t* entry) { |