X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Flist_window.c;h=ca857b8a06ec60185e3d9d334c318d084b881b55;hb=d08e14fad65e573e4764b12a0236df4fef278520;hp=e02d92babc0a64b61804497c97a35fcb4e351622;hpb=abd152996b9d591f80a6160867ed72f8448afd28;p=ncmpc.git diff --git a/src/list_window.c b/src/list_window.c index e02d92b..ca857b8 100644 --- a/src/list_window.c +++ b/src/list_window.c @@ -24,7 +24,7 @@ #include "match.h" #include "command.h" #include "colors.h" -#include "screen.h" +#include "screen_message.h" #include "i18n.h" #include @@ -64,7 +64,6 @@ list_window_reset(struct list_window *lw) lw->selected_end = 0; lw->range_selection = false; lw->range_base = 0; - lw->xoffset = 0; lw->start = 0; } @@ -88,6 +87,19 @@ list_window_check_selected(struct list_window *lw, unsigned length) if(lw->range_selection) { + if (length == 0) { + lw->selected_start = 0; + lw->selected_end = 0; + lw->range_base = 0; + } else { + if (lw->selected_start >= length) + lw->selected_start = length - 1; + if (lw->selected_end >= length) + lw->selected_end = length - 1; + if (lw->range_base >= length) + lw->range_base = length - 1; + } + if(lw->range_base > lw->selected_end) lw->selected_end = lw->selected; if(lw->range_base < lw->selected_start) @@ -197,14 +209,12 @@ list_window_bottom(struct list_window *lw, unsigned length) static void list_window_first(struct list_window *lw) { - lw->xoffset = 0; list_window_set_selected(lw, 0); } static void list_window_last(struct list_window *lw, unsigned length) { - lw->xoffset = 0; if (length > 0) list_window_set_selected(lw, length - 1); else @@ -313,7 +323,7 @@ list_window_paint(struct list_window *lw, lw->start = 0; else { - while ( start > 0 && callback(start + lw->rows - 1, &highlight, callback_data) == NULL) + while ( start > 0 && callback(start + lw->rows - 1, &highlight, NULL, callback_data) == NULL) start--; lw->start = start; } @@ -321,9 +331,10 @@ list_window_paint(struct list_window *lw, for (i = 0; i < lw->rows; i++) { const char *label; + char *second_column = NULL; highlight = false; - label = callback(lw->start + i, &highlight, callback_data); + label = callback(lw->start + i, &highlight, &second_column, callback_data); wmove(lw->w, i, 0); if (label) { @@ -335,7 +346,8 @@ list_window_paint(struct list_window *lw, else colors_use(lw->w, COLOR_LIST); - if (show_cursor && selected) + if (show_cursor && selected && + (!options.hardware_cursor || lw->range_selection)) wattron(lw->w, A_REVERSE); //waddnstr(lw->w, label, lw->cols); @@ -343,6 +355,19 @@ list_window_paint(struct list_window *lw, if (fill && len < lw->cols) whline(lw->w, ' ', lw->cols-len); + if(second_column) + { + unsigned sc_len = utf8_width(second_column) + 1; + if(lw->cols > sc_len) + { + wmove(lw->w, i, lw->cols - sc_len); + waddstr(lw->w, " "); + wmove(lw->w, i, lw->cols - sc_len + 1); + waddstr(lw->w, second_column); + } + g_free(second_column); + } + if (selected) wattroff(lw->w, A_REVERSE); @@ -351,6 +376,12 @@ list_window_paint(struct list_window *lw, } else wclrtoeol(lw->w); } + + if (options.hardware_cursor && lw->selected >= lw->start && + lw->selected < lw->start + lw->rows) { + curs_set(1); + wmove(lw->w, lw->selected - lw->start, 0); + } } bool @@ -366,7 +397,7 @@ list_window_find(struct list_window *lw, const char *label; do { - while ((label = callback(i,&h,callback_data))) { + while ((label = callback(i,&h,NULL,callback_data))) { if (str && label && match_line(label, str)) { lw->selected = i; if(!lw->range_selection || i > lw->selected_end) @@ -409,7 +440,7 @@ list_window_rfind(struct list_window *lw, return false; do { - while (i >= 0 && (label = callback(i,&h,callback_data))) { + while (i >= 0 && (label = callback(i,&h,NULL,callback_data))) { if( str && label && match_line(label, str) ) { lw->selected = i; if(!lw->range_selection || i > (int)lw->selected_end) @@ -443,7 +474,7 @@ list_window_jump(struct list_window *lw, unsigned i = 0; const char *label; - while ((label = callback(i,&h,callback_data))) { + while ((label = callback(i,&h,NULL,callback_data))) { if (label && label[0] == '[') label++; #ifndef NCMPC_MINI