diff --git a/src/list_window.c b/src/list_window.c
index 0b6031483e8854fc86bc410070fe9089bd45d540..f8ab8e9a708ccd0d996c26443d7a7f126f64ecdc 100644 (file)
--- a/src/list_window.c
+++ b/src/list_window.c
}
}
+void
+list_window_paint2(const struct list_window *lw,
+ list_window_paint_callback_t paint_callback,
+ void *callback_data)
+{
+ bool show_cursor = !lw->hide_cursor &&
+ (!options.hardware_cursor || lw->range_selection);
+ struct list_window_range range;
+
+ if (show_cursor)
+ list_window_get_range(lw, &range);
+
+ for (unsigned i = 0; i < lw->rows; i++) {
+ bool selected;
+
+ wmove(lw->w, i, 0);
+
+ if (lw->start + i >= lw->length) {
+ wclrtobot(lw->w);
+ break;
+ }
+
+ selected = show_cursor &&
+ lw->start + i >= range.start &&
+ lw->start + i < range.end;
+
+ paint_callback(lw->w, lw->start + i, i, lw->cols,
+ selected, callback_data);
+
+ if (selected)
+ wattroff(lw->w, A_REVERSE);
+ }
+
+ 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
list_window_find(struct list_window *lw,
list_window_callback_fn_t callback,