X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fscreen_keydef.c;h=8ecc003ac94cc0493a0c6daaef125dafc9cb5769;hb=0796b270b1699336f29908d11bca92d64da0653c;hp=28822e58f5e56ed3d1f1f385935ab27c733ac19a;hpb=15eacd43a481a4fc67789a25d56bb5f1527bfc12;p=ncmpc.git diff --git a/src/screen_keydef.c b/src/screen_keydef.c index 28822e5..8ecc003 100644 --- a/src/screen_keydef.c +++ b/src/screen_keydef.c @@ -1,5 +1,5 @@ /* ncmpc (Ncurses MPD Client) - * (c) 2004-2009 The Music Player Daemon Project + * (c) 2004-2010 The Music Player Daemon Project * Project homepage: http://musicpd.org * This program is free software; you can redistribute it and/or modify @@ -26,6 +26,7 @@ #include "screen.h" #include "screen_utils.h" +#include #include #include #include @@ -42,7 +43,7 @@ #define LIST_ITEM_APPLY_LABEL _("===> Apply key bindings ") -static list_window_t *lw = NULL; +static struct list_window *lw; static unsigned command_list_length = 0; static command_definition_t *cmds = NULL; @@ -117,6 +118,7 @@ check_subcmd_length(void) } else subcmd_addpos = 0; subcmd_length += STATIC_SUB_ITEMS; + list_window_set_length(lw, subcmd_length); } static void @@ -188,38 +190,38 @@ assign_new_key(int cmd_index, int key_index) } static const char * -list_callback(unsigned idx, bool *highlight, G_GNUC_UNUSED char** sc, G_GNUC_UNUSED void *data) +list_callback(unsigned idx, G_GNUC_UNUSED void *data) { static char buf[BUFSIZE]; if (subcmd < 0) { - if (idx < (unsigned)command_list_length) { - if (cmds[idx].flags & COMMAND_KEY_CONFLICT) - *highlight = true; - return cmds[idx].name; - } else if (idx == LIST_ITEM_APPLY()) + if (idx == LIST_ITEM_APPLY()) return LIST_ITEM_APPLY_LABEL; else if (idx == LIST_ITEM_SAVE()) return LIST_ITEM_SAVE_LABEL; + + assert(idx < (unsigned)command_list_length); + + return cmds[idx].name; } else { if (idx == 0) return "[..]"; idx--; - if (idx < MAX_COMMAND_KEYS && cmds[subcmd].keys[idx] > 0) { - g_snprintf(buf, - BUFSIZE, "%d. %-20s (%d) ", - idx + 1, - key2str(cmds[subcmd].keys[idx]), - cmds[subcmd].keys[idx]); - return buf; - } else if (idx == subcmd_addpos) { + if (idx == subcmd_addpos) { g_snprintf(buf, BUFSIZE, "%d. %s", idx + 1, _("Add new key")); return buf; } - } - return NULL; + assert(idx < MAX_COMMAND_KEYS && cmds[subcmd].keys[idx] > 0); + + g_snprintf(buf, + BUFSIZE, "%d. %-20s (%d) ", + idx + 1, + key2str(cmds[subcmd].keys[idx]), + cmds[subcmd].keys[idx]); + return buf; + } } static void @@ -231,8 +233,7 @@ keydef_init(WINDOW *w, int cols, int rows) static void keydef_resize(int cols, int rows) { - lw->cols = cols; - lw->rows = rows; + list_window_resize(lw, cols, rows); } static void @@ -263,7 +264,7 @@ keydef_open(G_GNUC_UNUSED struct mpdclient *c) } subcmd = -1; - list_window_check_selected(lw, LIST_LENGTH()); + list_window_set_length(lw, LIST_LENGTH()); } static void @@ -295,15 +296,10 @@ keydef_paint(void) static bool keydef_cmd(G_GNUC_UNUSED struct mpdclient *c, command_t cmd) { - int length = LIST_LENGTH(); - - if (subcmd >= 0) - length = subcmd_length; - if (cmd == CMD_LIST_RANGE_SELECT) return false; - if (list_window_cmd(lw, length, cmd)) { + if (list_window_cmd(lw, cmd)) { keydef_repaint(); return true; } @@ -318,18 +314,15 @@ keydef_cmd(G_GNUC_UNUSED struct mpdclient *c, command_t cmd) save_keys(); } else { subcmd = lw->selected; - lw->selected=0; - lw->selected_start = lw->selected; - lw->selected_end = lw->selected; + list_window_reset(lw); check_subcmd_length(); keydef_repaint(); } } else { if (lw->selected == 0) { /* up */ - lw->selected = subcmd; - lw->selected_start = lw->selected; - lw->selected_end = lw->selected; + list_window_set_length(lw, LIST_LENGTH()); + list_window_set_cursor(lw, subcmd); subcmd = -1; keydef_repaint(); @@ -340,9 +333,8 @@ keydef_cmd(G_GNUC_UNUSED struct mpdclient *c, command_t cmd) return true; case CMD_GO_PARENT_DIRECTORY: if (subcmd >=0) { - lw->selected = subcmd; - lw->selected_start = lw->selected; - lw->selected_end = lw->selected; + list_window_set_length(lw, LIST_LENGTH()); + list_window_set_cursor(lw, subcmd); subcmd = -1; keydef_repaint(); @@ -361,8 +353,7 @@ keydef_cmd(G_GNUC_UNUSED struct mpdclient *c, command_t cmd) case CMD_LIST_RFIND: case CMD_LIST_FIND_NEXT: case CMD_LIST_RFIND_NEXT: - screen_find(lw, length, - cmd, list_callback, NULL); + screen_find(lw, cmd, list_callback, NULL); keydef_repaint(); return true;