diff options
Diffstat (limited to 'libmenu/menu_cmdlist.c')
-rw-r--r-- | libmenu/menu_cmdlist.c | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/libmenu/menu_cmdlist.c b/libmenu/menu_cmdlist.c index 0e4730f61a..cd0c8ff763 100644 --- a/libmenu/menu_cmdlist.c +++ b/libmenu/menu_cmdlist.c @@ -27,6 +27,8 @@ struct list_entry_s { char* ok; char* cancel; + char* left; + char* right; }; struct menu_priv_s { @@ -47,6 +49,12 @@ static m_option_t cfg_fields[] = { static void read_cmd(menu_t* menu,int cmd) { switch(cmd) { + case MENU_CMD_RIGHT: + if(mpriv->p.current->right) { + mp_cmd_t* c = mp_input_parse_cmd(mpriv->p.current->right); + if(c) mp_input_queue_cmd(c); + break; + } // fallback on ok if right is not defined case MENU_CMD_OK: { if(mpriv->p.current->ok) { mp_cmd_t* c = mp_input_parse_cmd(mpriv->p.current->ok); @@ -54,6 +62,12 @@ static void read_cmd(menu_t* menu,int cmd) { mp_input_queue_cmd(c); } } break; + case MENU_CMD_LEFT: + if(mpriv->p.current->left) { + mp_cmd_t* c = mp_input_parse_cmd(mpriv->p.current->left); + if(c) mp_input_queue_cmd(c); + break; + } // fallback on cancel if left is not defined case MENU_CMD_CANCEL: if(mpriv->p.current->cancel) { mp_cmd_t* c = mp_input_parse_cmd(mpriv->p.current->cancel); @@ -84,7 +98,7 @@ static void close(menu_t* menu) { } static int parse_args(menu_t* menu,char* args) { - char *element,*body, **attribs, *name, *ok, *cancel; + char *element,*body, **attribs, *name; list_entry_t* m = NULL; int r; ASX_Parser_t* parser = asx_parser_new(); @@ -110,12 +124,12 @@ static int parse_args(menu_t* menu,char* args) { asx_free_attribs(attribs); continue; } - ok = asx_get_attrib("ok",attribs); - cancel = asx_get_attrib("cancel",attribs); m = calloc(1,sizeof(struct list_entry_s)); m->p.txt = name; - m->ok = ok; - m->cancel = cancel; + m->ok = asx_get_attrib("ok",attribs); + m->cancel = asx_get_attrib("cancel",attribs); + m->left = asx_get_attrib("left",attribs); + m->right = asx_get_attrib("right",attribs); menu_list_add_entry(menu,m); free(element); |