aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/calcurse.h4
-rw-r--r--src/custom.c2
-rw-r--r--src/listbox.c7
-rw-r--r--src/wins.c27
4 files changed, 16 insertions, 24 deletions
diff --git a/src/calcurse.h b/src/calcurse.h
index afa9046..c568e89 100644
--- a/src/calcurse.h
+++ b/src/calcurse.h
@@ -1265,15 +1265,13 @@ void wins_slctd_next(void);
void wins_init(void);
void wins_scrollwin_init(struct scrollwin *, int, int, int, int, const char *);
void wins_scrollwin_resize(struct scrollwin *, int, int, int, int);
-void wins_scrollwin_set_linecount(struct scrollwin *, unsigned);
+void wins_scrollwin_set_pad(struct scrollwin *, unsigned);
void wins_scrollwin_delete(struct scrollwin *);
void wins_scrollwin_draw_deco(struct scrollwin *, int);
void wins_scrollwin_display(struct scrollwin *, int);
void wins_scrollwin_up(struct scrollwin *, int);
void wins_scrollwin_down(struct scrollwin *, int);
-int wins_scrollwin_is_visible(struct scrollwin *, unsigned);
void wins_scrollwin_ensure_visible(struct scrollwin *, unsigned);
-void wins_scrollwin_set_lower(struct scrollwin *, unsigned);
void wins_resize(void);
void wins_resize_panels(void);
void wins_show(WINDOW *, const char *);
diff --git a/src/custom.c b/src/custom.c
index 7771349..f0c99b4 100644
--- a/src/custom.c
+++ b/src/custom.c
@@ -980,7 +980,7 @@ void custom_keys_config(void)
clear();
nbdisplayed = ((notify_bar() ? row - 3 : row - 2) - LABELLINES) / LINESPERKEY;
wins_scrollwin_init(&kwin, 0, 0, notify_bar() ? row - 3 : row - 2, col, _("keys configuration"));
- wins_scrollwin_set_linecount(&kwin, NBKEYS * LINESPERKEY);
+ wins_scrollwin_set_pad(&kwin, NBKEYS * LINESPERKEY);
wins_scrollwin_draw_deco(&kwin, 0);
custom_keys_config_bar();
selrow = selelm = 0;
diff --git a/src/listbox.c b/src/listbox.c
index d511556..38e7647 100644
--- a/src/listbox.c
+++ b/src/listbox.c
@@ -62,7 +62,6 @@ void listbox_delete(struct listbox *lb)
static void listbox_fix_visible_region(struct listbox *lb)
{
- unsigned last_line = lb->ch[lb->item_count] - 1;
int i;
wins_scrollwin_ensure_visible(&(lb->sw), lb->ch[lb->item_sel]);
@@ -74,9 +73,6 @@ static void listbox_fix_visible_region(struct listbox *lb)
wins_scrollwin_ensure_visible(&(lb->sw), lb->ch[i + 1] - 1);
i++;
}
-
- if (wins_scrollwin_is_visible(&(lb->sw), last_line))
- wins_scrollwin_set_lower(&(lb->sw), last_line);
}
void listbox_resize(struct listbox *lb, int y, int x, int h, int w)
@@ -118,8 +114,7 @@ void listbox_load_items(struct listbox *lb, int item_count)
ch += lb->fn_height(i, lb->cb_data);
}
lb->ch[item_count] = ch;
-
- wins_scrollwin_set_linecount(&(lb->sw), ch);
+ wins_scrollwin_set_pad(&(lb->sw), ch);
if (item_count > 0 && lb->item_sel < 0)
lb->item_sel = 0;
diff --git a/src/wins.c b/src/wins.c
index bb08f08..0cc7ff7 100644
--- a/src/wins.c
+++ b/src/wins.c
@@ -315,14 +315,25 @@ void wins_scrollwin_resize(struct scrollwin *sw, int y, int x, int h, int w)
delwin(sw->win);
sw->win = newwin(h, w, y, x);
sw->inner = newpad(BUFSIZ, w);
+ wins_scrollwin_set_pad(sw, sw->line_num);
}
/*
- * Set the number of lines to be displayed.
+ * Set the number of lines (pad size) and the line offset
+ * (the part of the pad to be displayed in the viewport).
*/
-void wins_scrollwin_set_linecount(struct scrollwin *sw, unsigned lines)
+void wins_scrollwin_set_pad(struct scrollwin *sw, unsigned lines)
{
+ int inner_h = sw->h - (conf.compact_panels ? 2 : 4);
+
sw->line_num = lines;
+ if (lines > inner_h) {
+ /* pad partly displayed in viewport */
+ if (sw->line_off > lines - inner_h)
+ /* offset too big */
+ sw->line_off = lines - inner_h;
+ } else
+ sw->line_off = 0;
}
/* Free an already created scrollwin. */
@@ -404,12 +415,6 @@ void wins_scrollwin_down(struct scrollwin *sw, int amount)
sw->line_off = sw->line_num - inner_h;
}
-int wins_scrollwin_is_visible(struct scrollwin *sw, unsigned line)
-{
- int inner_h = sw->h - (conf.compact_panels ? 2 : 4);
- return ((line >= sw->line_off) && (line < sw->line_off + inner_h));
-}
-
void wins_scrollwin_ensure_visible(struct scrollwin *sw, unsigned line)
{
int inner_h = sw->h - (conf.compact_panels ? 2 : 4);
@@ -420,12 +425,6 @@ void wins_scrollwin_ensure_visible(struct scrollwin *sw, unsigned line)
sw->line_off = line - inner_h + 1;
}
-void wins_scrollwin_set_lower(struct scrollwin *sw, unsigned line)
-{
- int inner_h = sw->h - (conf.compact_panels ? 2 : 4);
- sw->line_off = MAX((int)line - inner_h + 1, 0);
-}
-
void wins_resize_panels(void)
{
wins_get_config();