gdb: Don't call tui_enable too early.

Calling tui_enable too early in tui_layout_command can leave the tui in
an enabled state if the user has entered an invalid layout name.
Instead postpone the call to tui_enable until later in
tui_set_layout_for_display_command just before the layout is changed.

gdb/ChangeLog:

	* tui/tui-layout.c (tui_layout_command): Move call to tui_enable
	into ...
	(tui_set_layout_for_display_command): ...here, before calling
	tui_set_layout.  Only set the layout if gdb has not already
	entered the TUI_FAILURE state.
This commit is contained in:
Andrew Burgess 2015-05-21 00:45:26 +02:00
parent a014503004
commit 880d1e40c7
2 changed files with 14 additions and 4 deletions

View File

@ -1,3 +1,11 @@
2015-05-21 Andrew Burgess <andrew.burgess@embecosm.com>
* tui/tui-layout.c (tui_layout_command): Move call to tui_enable
into ...
(tui_set_layout_for_display_command): ...here, before calling
tui_set_layout. Only set the layout if gdb has not already
entered the TUI_FAILURE state.
2015-05-21 Andrew Burgess <andrew.burgess@embecosm.com>
* tui/tui-layout.c (layout_completer): New function.

View File

@ -443,7 +443,12 @@ tui_set_layout_by_name (const char *layout_name)
else
status = TUI_FAILURE;
tui_set_layout (new_layout);
if (status == TUI_SUCCESS)
{
/* Make sure the curses mode is enabled. */
tui_enable ();
tui_set_layout (new_layout);
}
}
xfree (buf_ptr);
}
@ -492,9 +497,6 @@ extract_display_start_addr (struct gdbarch **gdbarch_p, CORE_ADDR *addr_p)
static void
tui_layout_command (char *arg, int from_tty)
{
/* Make sure the curses mode is enabled. */
tui_enable ();
/* Switch to the selected layout. */
if (tui_set_layout_by_name (arg) != TUI_SUCCESS)
warning (_("Invalid layout specified.\n%s"), LAYOUT_USAGE);