45bbae5c4b
In some cases, the TUI flickers when redrawing. This can be seen mostly easily when switching layouts. This patch fixes the problem by exploiting the double buffering that curses already does. In some spots, the TUI will now disable flushing the curses buffers to the screen; and then flush them all at once when the rendering is complete. gdb/ChangeLog 2020-01-19 Tom Tromey <tom@tromey.com> * tui/tui.c (tui_show_assembly): Use tui_suppress_output. * tui/tui-wingeneral.h (class tui_suppress_output): New. (tui_wrefresh): Declare. * tui/tui-wingeneral.c (suppress_output): New global. (tui_suppress_output, ~tui_suppress_output): New constructor and destructor. (tui_wrefresh): New function. (tui_gen_win_info::refresh_window): Use tui_wrefresh. (tui_gen_win_info::make_window): Call wnoutrefresh when needed. * tui/tui-regs.h (struct tui_data_window) <no_refresh>: Declare method. * tui/tui-regs.c (tui_data_window::erase_data_content): Call tui_wrefresh. (tui_data_window::no_refresh): New method. (tui_data_item_window::refresh_window): Call tui_wrefresh. (tui_reg_command): Use tui_suppress_output * tui/tui-layout.c (tui_set_layout): Use tui_suppress_output. * tui/tui-data.h (struct tui_gen_win_info) <no_refresh>: New method. * tui/tui-command.c (tui_refresh_cmd_win): Call tui_wrefresh. Change-Id: Icb832ae100b861de3af3307488e636fa928d5c9f
60 lines
1.7 KiB
C++
60 lines
1.7 KiB
C++
/* General window behavior.
|
|
|
|
Copyright (C) 1998-2020 Free Software Foundation, Inc.
|
|
|
|
Contributed by Hewlett-Packard Company.
|
|
|
|
This file is part of GDB.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
#ifndef TUI_TUI_WINGENERAL_H
|
|
#define TUI_TUI_WINGENERAL_H
|
|
|
|
#include "gdb_curses.h"
|
|
|
|
struct tui_win_info;
|
|
|
|
/* Makes all windows invisible. */
|
|
extern void tui_make_all_invisible (void);
|
|
|
|
extern void tui_unhighlight_win (struct tui_win_info *);
|
|
extern void tui_highlight_win (struct tui_win_info *);
|
|
extern void tui_refresh_all ();
|
|
|
|
/* An RAII class that suppresses output on construction (calling
|
|
wnoutrefresh on the existing windows), and then flushes the output
|
|
(via doupdate) when destroyed. */
|
|
|
|
class tui_suppress_output
|
|
{
|
|
public:
|
|
|
|
tui_suppress_output ();
|
|
~tui_suppress_output ();
|
|
|
|
DISABLE_COPY_AND_ASSIGN (tui_suppress_output);
|
|
|
|
private:
|
|
|
|
/* Save the state of the suppression global. */
|
|
bool m_saved_suppress;
|
|
};
|
|
|
|
/* Call wrefresh on the given window. However, if output is being
|
|
suppressed via tui_suppress_output, do not call wrefresh. */
|
|
extern void tui_wrefresh (WINDOW *win);
|
|
|
|
#endif /* TUI_TUI_WINGENERAL_H */
|