diff options
author | Lars Henriksen <LarsHenriksen@get2net.dk> | 2018-08-20 20:22:24 +0200 |
---|---|---|
committer | Lukas Fleischer <lfleischer@calcurse.org> | 2018-10-21 20:01:34 +0200 |
commit | a94b0ecde01d021795c6c29a90d60a45f9198e2d (patch) | |
tree | 6cb955bdbe1ddc7e555a9e50acdfbd081b34b582 | |
parent | 37d8725e7883b02d089fd3497c1c7801130a0a58 (diff) | |
download | calcurse-a94b0ecde01d021795c6c29a90d60a45f9198e2d.tar.gz calcurse-a94b0ecde01d021795c6c29a90d60a45f9198e2d.zip |
Fix window update after hook execution
The introduction of hooks raised a problem with window updates. The diagnosis
in commit feb059e8 (Fix segmentation fault on reload with pre-load hook) was
right, the cure was wrong.
The problem is wins_update(), not the listbox contents. The wins_update() call
does not belong in wins_unprepare_external() (or in io_reload_data()), but at a
higher level. It should be called _after_ reload, as indeed it is in
key_generic_reload() when the listbox contents have been updated (todo as well
as appointments). The call was introduced in commit 8ae75f3 without comment.
The todo updates in io_reload_data() also belong in key_generic_reload() where
they were before commit 7f06c252.
When saving data, all panels must be updated in case a hook was executed.
Signed-off-by: Lars Henriksen <LarsHenriksen@get2net.dk>
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
-rw-r--r-- | src/calcurse.c | 6 | ||||
-rw-r--r-- | src/io.c | 11 | ||||
-rw-r--r-- | src/wins.c | 1 |
3 files changed, 4 insertions, 14 deletions
diff --git a/src/calcurse.c b/src/calcurse.c index 8e1978e..920cbcd 100644 --- a/src/calcurse.c +++ b/src/calcurse.c @@ -272,17 +272,19 @@ static inline void key_generic_help(void) static inline void key_generic_save(void) { io_save_cal(IO_SAVE_DISPLAY_BAR); - wins_update(FLAG_STA); + wins_update(FLAG_ALL); } static inline void key_generic_reload(void) { if (io_reload_data()) { + ui_todo_load_items(); + ui_todo_sel_reset(); do_storage(0); notify_check_next_app(1); ui_calendar_monthly_view_cache_set_invalid(); - wins_update(FLAG_ALL); } + wins_update(FLAG_ALL); } static inline void key_generic_import(void) @@ -935,7 +935,6 @@ int io_reload_data(void) case 3: /* FALLTHROUGH */ default: - wins_update(FLAG_STA); goto cleanup; } } @@ -961,20 +960,10 @@ int io_reload_data(void) recur_event_llist_init(); todo_init_list(); - /* - * Temporarily reinitialize the todo list box without any items to make - * sure wins_unprepare_external() does not fail when it is called after - * executing the pre-load hook. - */ - ui_todo_load_items(); - ui_todo_sel_reset(); - io_load_data(NULL); run_hook("post-load"); io_unset_modified(); - ui_todo_load_items(); - ui_todo_sel_reset(); if (show_dialogs()) { status_mesg(reload_success, enter); @@ -613,7 +613,6 @@ void wins_unprepare_external(void) ui_mode = UI_CURSES; wins_refresh(); wins_resize(); - wins_update(FLAG_ALL); if (notify_bar()) notify_start_main_thread(); if (conf.periodic_save > 0) |