binutils-gdb/gdb/tui/tui-command.c
Tom Tromey 7523da63ca Make TUI window handle a unique_ptr
This changes tui_gen_win_info::handle to be a specialization of
unique_ptr.  This is perhaps mildly uglier in some spots, due to the
proliferation of "get"; but on the other hand it cleans up some manual
management and it allows for the removal of tui_delete_win.

gdb/ChangeLog
2019-10-09  Tom Tromey  <tom@tromey.com>

	* tui/tui-wingeneral.h (tui_delete_win): Don't declare.
	* tui/tui-stack.c (tui_locator_window::rerender): Update.
	* tui/tui-command.c (tui_cmd_window::resize)
	(tui_refresh_cmd_win): Update.
	* tui/tui-win.c (tui_resize_all, tui_set_focus_command): Update.
	* tui/tui.c (tui_rl_other_window, tui_enable): Update.
	* tui/tui-data.c (~tui_gen_win_info): Remove.
	* tui/tui-layout.c (tui_gen_win_info::resize): Update.
	* tui/tui-io.c (update_cmdwin_start_line, tui_putc, tui_puts)
	(tui_redisplay_readline, tui_mld_flush)
	(tui_mld_erase_entire_line, tui_mld_getc, tui_getc): Update.
	* tui/tui-regs.c (tui_data_window::delete_data_content_windows)
	(tui_data_window::erase_data_content)
	(tui_data_item_window::rerender)
	(tui_data_item_window::refresh_window): Update.
	* tui/tui-wingeneral.c (tui_gen_win_info::refresh_window)
	(box_win, tui_gen_win_info::make_window)
	(tui_gen_win_info::make_visible): Update.
	(tui_delete_win): Remove.
	* tui/tui-winsource.c
	(tui_source_window_base::do_erase_source_content): Update.
	(tui_show_source_line, tui_source_window_base::update_tab_width)
	(tui_source_window_base::update_exec_info): Update.
	* tui/tui-data.h (struct curses_deleter): New.
	(struct tui_gen_win_info) <handle>: Now a unique_ptr.
	(struct tui_gen_win_info) <~tui_gen_win_info>: Define.
2019-10-09 16:50:35 -06:00

88 lines
2.3 KiB
C

/* Specific command window processing.
Copyright (C) 1998-2019 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/>. */
#include "defs.h"
#include "tui/tui.h"
#include "tui/tui-data.h"
#include "tui/tui-win.h"
#include "tui/tui-io.h"
#include "tui/tui-command.h"
#include "tui/tui-wingeneral.h"
#include "gdb_curses.h"
/* See tui-command.h. */
int
tui_cmd_window::max_height () const
{
return tui_term_height () - 4;
}
void
tui_cmd_window::resize (int height_, int width_, int origin_x, int origin_y)
{
width = width_;
height = height_;
if (height > 1)
{
/* Note this differs from the base class implementation, because
this window can't be boxed. */
viewport_height = height - 1;
}
else
viewport_height = 1;
origin.x = origin_x;
origin.y = origin_y;
if (handle == nullptr)
make_window ();
else
{
/* Another reason we don't call the base class method here is
that for the command window in particular, we want to avoid
destroying the underlying handle. We don't currently track
the contents of this window, and so have no way to re-render
it. However we can at least move it and keep the old size if
wresize isn't available. */
#ifdef HAVE_WRESIZE
wresize (handle.get (), height, width);
#endif
mvwin (handle.get (), origin.y, origin.x);
wmove (handle.get (), 0, 0);
}
}
/* See tui-command.h. */
void
tui_refresh_cmd_win (void)
{
WINDOW *w = TUI_CMD_WIN->handle.get ();
wrefresh (w);
/* FIXME: It's not clear why this is here.
It was present in the original tui_puts code and is kept in order to
not introduce some subtle breakage. */
fflush (stdout);
}