diff options
author | Lukas Fleischer <calcurse@cryptocrack.de> | 2014-07-18 08:19:12 +0200 |
---|---|---|
committer | Lukas Fleischer <calcurse@cryptocrack.de> | 2014-07-18 08:30:09 +0200 |
commit | 80a7267f8c03a1c307b4f6b9bee1a906f53a0a01 (patch) | |
tree | 36281a483e856ece21a70efac2504f7d5d58cce4 | |
parent | 0ad6ff74df54c58afeca5b755054667728c53c1e (diff) | |
download | calcurse-80a7267f8c03a1c307b4f6b9bee1a906f53a0a01.zip |
Fix selection in listbox_load_items()
Call listbox_fix_sel() after setting an initial selection in
listbox_load_items() to make sure we do not pick a caption row.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
-rw-r--r-- | src/listbox.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/src/listbox.c b/src/listbox.c index 853dc03..c886dce 100644 --- a/src/listbox.c +++ b/src/listbox.c @@ -82,20 +82,18 @@ void listbox_set_cb_data(struct listbox *lb, void *cb_data) lb->cb_data = cb_data; } +static void listbox_fix_sel(struct listbox *, int); + void listbox_load_items(struct listbox *lb, int item_count) { int i, ch; lb->item_count = item_count; - if (item_count > 0 && lb->item_sel < 0) - lb->item_sel = 0; - - if (lb->item_sel >= item_count) - lb->item_sel = item_count - 1; - - if (item_count == 0) + if (item_count == 0) { + lb->item_sel = -1; return; + } free(lb->type); free(lb->ch); @@ -109,6 +107,14 @@ void listbox_load_items(struct listbox *lb, int item_count) lb->ch[item_count] = ch; wins_scrollwin_set_linecount(&(lb->sw), ch); + + if (item_count > 0 && lb->item_sel < 0) { + lb->item_sel = 0; + listbox_fix_sel(lb, 1); + } else if (lb->item_sel >= item_count) { + lb->item_sel = item_count - 1; + listbox_fix_sel(lb, -1); + } } void listbox_draw_deco(struct listbox *lb, int hilt) |