From 990897b2f098f3ed898919e3e66c8830c2e3b450 Mon Sep 17 00:00:00 2001 From: Lukas Fleischer Date: Mon, 19 May 2014 10:54:50 +0200 Subject: Resize panels properly Rewrite the panel resize code and remove the code that reinitializes the caption and the selected item when the window is resized. Signed-off-by: Lukas Fleischer --- src/calcurse.c | 2 +- src/calcurse.h | 4 ++-- src/custom.c | 2 +- src/wins.c | 32 +++++++++++++++++++------------- 4 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/calcurse.c b/src/calcurse.c index de0d5a5..95a6dea 100644 --- a/src/calcurse.c +++ b/src/calcurse.c @@ -589,7 +589,7 @@ int main(int argc, char **argv) io_load_keys(conf.pager); io_load_todo(); io_load_app(); - wins_reinit(); + wins_resize(); /* * Refresh the hidden key handler window here to prevent wgetch() from * implicitly calling wrefresh() later (causing ncurses race conditions). diff --git a/src/calcurse.h b/src/calcurse.h index b33bbf5..cb083df 100644 --- a/src/calcurse.h +++ b/src/calcurse.h @@ -1101,8 +1101,8 @@ void wins_scrollwin_display(struct scrollwin *); void wins_scrollwin_up(struct scrollwin *, int); void wins_scrollwin_down(struct scrollwin *, int); void wins_scrollwin_ensure_visible(struct scrollwin *, unsigned); -void wins_reinit(void); -void wins_reinit_panels(void); +void wins_resize(void); +void wins_resize_panels(void); void wins_show(WINDOW *, const char *); void wins_get_config(void); void wins_update_border(int); diff --git a/src/custom.c b/src/custom.c index 688ca21..4fc3fb5 100644 --- a/src/custom.c +++ b/src/custom.c @@ -303,7 +303,7 @@ void custom_sidebar_config(void) resize = 0; wins_reset(); } else { - wins_reinit_panels(); + wins_resize_panels(); wins_update_border(FLAG_ALL); wins_update_panels(FLAG_ALL); keys_display_bindings_bar(win[STA].p, bindings, diff --git a/src/wins.c b/src/wins.c index 0c12d8e..0d8160a 100644 --- a/src/wins.c +++ b/src/wins.c @@ -396,28 +396,34 @@ void wins_scrollwin_ensure_visible(struct scrollwin *sw, unsigned line) sw->line_off = line - inner_h + 1; } -void wins_reinit_panels(void) +void wins_resize_panels(void) { - wins_scrollwin_delete(&sw_cal); - listbox_delete(&lb_apt); - listbox_delete(&lb_todo); wins_get_config(); - wins_init_panels(); + wins_scrollwin_resize(&sw_cal, win[CAL].y, win[CAL].x, + CALHEIGHT + (conf.compact_panels ? 2 : 4), + wins_sbar_width()); + listbox_resize(&lb_apt, win[APP].y, win[APP].x, win[APP].h, + win[APP].w); + listbox_resize(&lb_todo, win[TOD].y, win[TOD].x, win[TOD].h, + win[TOD].w); } /* * Delete the existing windows and recreate them with their new * size and placement. */ -void wins_reinit(void) +void wins_resize(void) { - wins_scrollwin_delete(&sw_cal); - listbox_delete(&lb_apt); - listbox_delete(&lb_todo); + wins_resize_panels(); + delwin(win[STA].p); delwin(win[KEY].p); - wins_get_config(); - wins_init(); + win[STA].p = newwin(win[STA].h, win[STA].w, win[STA].y, win[STA].x); + win[KEY].p = newwin(1, 1, 1, 1); + + keypad(win[STA].p, TRUE); + keypad(win[KEY].p, TRUE); + if (notify_bar()) notify_reinit_bar(); } @@ -540,7 +546,7 @@ void wins_reset_noupdate(void) endwin(); wins_refresh(); curs_set(0); - wins_reinit(); + wins_resize(); } /* Reset the screen, needed when resizing terminal for example. */ @@ -572,7 +578,7 @@ void wins_unprepare_external(void) curs_set(0); ui_mode = UI_CURSES; wins_refresh(); - wins_reinit(); + wins_resize(); wins_update(FLAG_ALL); if (notify_bar()) notify_start_main_thread(); -- cgit v1.2.3