From ccfa58d6523fe63722425b2016b76fc5ba1bd80e Mon Sep 17 00:00:00 2001
From: cancel <cancel@cancel.fm>
Date: Fri, 14 Dec 2018 01:57:47 +0900
Subject: [PATCH] Fix flicker when opening/closing submenus

---
 term_util.c | 4 ++++
 tui_main.c  | 4 +---
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/term_util.c b/term_util.c
index 6789ec8..fbaa868 100644
--- a/term_util.c
+++ b/term_util.c
@@ -181,6 +181,10 @@ void qmenu_free(Qmenu* qm) {
 }
 
 void qnav_free_block(Qblock* qb) {
+  // erase any stuff underneath where this window is, in case it's outside of
+  // the grid in an area that isn't actively redraw
+  werase(qb->outer_window);
+  wnoutrefresh(qb->outer_window);
   switch (qb->tag) {
   case Qblock_type_qmsg: {
     Qmsg* qm = qmsg_of(qb);
diff --git a/tui_main.c b/tui_main.c
index 911f277..99d3e9e 100644
--- a/tui_main.c
+++ b/tui_main.c
@@ -1726,10 +1726,8 @@ int main(int argc, char** argv) {
       ged_apply_delta_secs(&ged_state, stm_sec(diff));
       ged_do_stuff(&ged_state);
       bool drew_any = false;
-      if (qnav_stack.stack_changed) {
-        werase(stdscr);
+      if (qnav_stack.stack_changed)
         drew_any = true;
-      }
       if (ged_is_draw_dirty(&ged_state) || drew_any) {
         werase(cont_window);
         ged_draw(&ged_state, cont_window);