]> code.delx.au - gnu-emacs/commitdiff
Prevent timers from messing up TTY menus
authorEli Zaretskii <eliz@gnu.org>
Thu, 24 Sep 2015 18:04:42 +0000 (21:04 +0300)
committerEli Zaretskii <eliz@gnu.org>
Thu, 24 Sep 2015 18:04:42 +0000 (21:04 +0300)
* src/term.c (tty_menu_activate): Inhibit redisplay for as long as
the TTY menu is open.  (Bug#21530)

src/term.c

index 8ebb620dd9b26ef04ecb4bfee779315f94cd72c9..5acc47395dbe0e4dd165fd12bdc3b48e7c5cf63c 100644 (file)
@@ -3117,6 +3117,7 @@ tty_menu_activate (tty_menu *menu, int *pane, int *selidx,
   Lisp_Object selectface;
   int first_item = 0;
   int col, row;
+  Lisp_Object prev_inhibit_redisplay = Vinhibit_redisplay;
   USE_SAFE_ALLOCA;
 
   /* Don't allow non-positive x0 and y0, lest the menu will wrap
@@ -3159,6 +3160,11 @@ tty_menu_activate (tty_menu *menu, int *pane, int *selidx,
       buffers_num_deleted = 1;
     }
 
+  /* Inhibit redisplay for as long as the menu is active, to avoid
+     messing the screen if some timer calls sit-for or a similar
+     function.  */
+  Vinhibit_redisplay = Qt;
+
   /* Force update of the current frame, so that the desired and the
      current matrices are identical.  */
   update_frame_with_menu (sf, -1, -1);
@@ -3349,6 +3355,7 @@ tty_menu_activate (tty_menu *menu, int *pane, int *selidx,
   if (!kbd_buffer_events_waiting ())
     clear_input_pending ();
   SAFE_FREE ();
+  Vinhibit_redisplay = prev_inhibit_redisplay;
   return result;
 }