[32/66] Derive tui_win_info from tui_gen_win_info

Message ID 20190623224329.16060-33-tom@tromey.com
State New
Headers show
Series
  • Clean up the TUI
Related show

Commit Message

Tom Tromey June 23, 2019, 10:42 p.m.
This changes tui_win_info to derive from tui_gen_win_info, rather than
having a tui_gen_win_info as a member.  This removes a layer of member
access from the entire TUI, which is why this patch is so large.  This
change will enable further removal of switches based on window type.

2019-06-23  Tom Tromey  <tom@tromey.com>

	* tui/tui.c (tui_rl_other_window, tui_enable)
	(tui_is_window_visible, tui_get_command_dimension): Update.
	* tui/tui-winsource.c (tui_update_source_window_as_is)
	(tui_clear_source_content, tui_erase_source_content)
	(tui_show_source_line, tui_source_window_base::refill)
	(tui_source_window_base::do_scroll_horizontal)
	(tui_source_window_base::set_is_exec_point_at)
	(tui_update_breakpoint_info, tui_set_exec_info_content)
	(tui_alloc_source_buffer, tui_line_is_displayed)
	(tui_addr_is_displayed): Update.
	* tui/tui-wingeneral.c (tui_unhighlight_win, tui_highlight_win)
	(tui_check_and_display_highlight_if_needed)
	(tui_win_info::make_visible, tui_win_info::refresh)
	(tui_refresh_all): Update.
	* tui/tui-windata.c (tui_first_data_item_displayed)
	(tui_delete_data_content_windows, tui_erase_data_content)
	(tui_display_all_data, tui_data_window::refresh_all)
	(tui_check_data_values): Update.
	* tui/tui-win.c (window_name_completer, tui_update_gdb_sizes)
	(tui_set_win_focus_to, tui_win_info::forward_scroll)
	(tui_win_info::backward_scroll, tui_refresh_all_win)
	(tui_resize_all, tui_set_focus, tui_all_windows_info)
	(update_tab_width, tui_set_win_height, tui_adjust_win_heights)
	(tui_source_window_base::set_new_height)
	(tui_data_window::set_new_height)
	(make_invisible_and_set_new_height)
	(make_visible_with_new_height, new_height_ok)
	(parse_scrolling_args): Update.
	* tui/tui-stack.c (tui_show_frame_info): Update.
	* tui/tui-source.c (tui_set_source_content)
	(tui_set_source_content_nil, tui_source_is_displayed)
	(tui_source_window::do_scroll_vertical): Update.
	* tui/tui-regs.c (tui_show_registers, tui_show_register_group)
	(tui_display_registers_from, tui_display_reg_element_at_line)
	(tui_check_register_values, tui_reg_command): Update.
	* tui/tui-layout.c (tui_default_win_height)
	(show_source_disasm_command, show_data, init_and_make_win)
	(show_source_or_disasm_and_command): 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_cont_sig)
	(tui_getc): Update.
	* tui/tui-disasm.c (tui_set_disassem_content)
	(tui_disasm_window::do_scroll_vertical): Update.
	* tui/tui-data.h (struct tui_gen_win_info) <~tui_gen_win_info>:
	Now virtual.
	(struct tui_win_info): Derive from tui_gen_win_info.
	<~tui_win_info>: Mark as override.
	<generic>: Remove member.
	* tui/tui-data.c (tui_cmd_window::clear_detail, tui_next_win)
	(tui_prev_win, tui_partial_win_by_name, tui_win_info)
	(~tui_data_window, ~tui_win_info)
	(tui_free_all_source_wins_content): Update.
	* tui/tui-command.c (tui_refresh_cmd_win): Update.
---
 gdb/ChangeLog            |  57 ++++++++++
 gdb/tui/tui-command.c    |   2 +-
 gdb/tui/tui-data.c       |  47 ++++----
 gdb/tui/tui-data.h       |   8 +-
 gdb/tui/tui-disasm.c     |  13 +--
 gdb/tui/tui-io.c         |  24 ++--
 gdb/tui/tui-layout.c     |  76 ++++++-------
 gdb/tui/tui-regs.c       |  28 ++---
 gdb/tui/tui-source.c     |  33 +++---
 gdb/tui/tui-stack.c      |   2 +-
 gdb/tui/tui-win.c        | 238 +++++++++++++++++++--------------------
 gdb/tui/tui-windata.c    |  24 ++--
 gdb/tui/tui-wingeneral.c |  22 ++--
 gdb/tui/tui-winsource.c  |  95 ++++++++--------
 gdb/tui/tui.c            |  14 +--
 15 files changed, 366 insertions(+), 317 deletions(-)

-- 
2.17.2

Patch

diff --git a/gdb/tui/tui-command.c b/gdb/tui/tui-command.c
index 9603b3cfdca..259620f7ce7 100644
--- a/gdb/tui/tui-command.c
+++ b/gdb/tui/tui-command.c
@@ -94,7 +94,7 @@  tui_dispatch_ctrl_char (unsigned int ch)
 void
 tui_refresh_cmd_win (void)
 {
-  WINDOW *w = TUI_CMD_WIN->generic.handle;
+  WINDOW *w = TUI_CMD_WIN->handle;
 
   wrefresh (w);
 
diff --git a/gdb/tui/tui-data.c b/gdb/tui/tui-data.c
index 82af0c9cf77..63afec57141 100644
--- a/gdb/tui/tui-data.c
+++ b/gdb/tui/tui-data.c
@@ -169,7 +169,7 @@  tui_source_window_base::clear_detail ()
 void
 tui_cmd_window::clear_detail ()
 {
-  wmove (generic.handle, 0, 0);
+  wmove (handle, 0, 0);
 }
 
 /* See tui-data.h.  */
@@ -268,17 +268,17 @@  tui_set_current_layout_to (enum tui_layout_type new_layout)
 struct tui_win_info *
 tui_next_win (struct tui_win_info *cur_win)
 {
-  int type = cur_win->generic.type;
+  int type = cur_win->type;
   struct tui_win_info *next_win = NULL;
 
-  if (cur_win->generic.type == CMD_WIN)
+  if (cur_win->type == CMD_WIN)
     type = SRC_WIN;
   else
-    type = cur_win->generic.type + 1;
-  while (type != cur_win->generic.type && (next_win == NULL))
+    type = cur_win->type + 1;
+  while (type != cur_win->type && (next_win == NULL))
     {
       if (tui_win_list[type]
-	  && tui_win_list[type]->generic.is_visible)
+	  && tui_win_list[type]->is_visible)
 	next_win = tui_win_list[type];
       else
 	{
@@ -298,17 +298,17 @@  tui_next_win (struct tui_win_info *cur_win)
 struct tui_win_info *
 tui_prev_win (struct tui_win_info *cur_win)
 {
-  int type = cur_win->generic.type;
+  int type = cur_win->type;
   struct tui_win_info *prev = NULL;
 
-  if (cur_win->generic.type == SRC_WIN)
+  if (cur_win->type == SRC_WIN)
     type = CMD_WIN;
   else
-    type = cur_win->generic.type - 1;
-  while (type != cur_win->generic.type && (prev == NULL))
+    type = cur_win->type - 1;
+  while (type != cur_win->type && (prev == NULL))
     {
       if (tui_win_list[type]
-	  && tui_win_list[type]->generic.is_visible)
+	  && tui_win_list[type]->is_visible)
 	prev = tui_win_list[type];
       else
 	{
@@ -337,8 +337,7 @@  tui_partial_win_by_name (const char *name)
 	{
           if (tui_win_list[i] != 0)
             {
-              const char *cur_name =
-		tui_win_name (&tui_win_list[i]->generic);
+              const char *cur_name = tui_win_name (tui_win_list[i]);
 
               if (strlen (name) <= strlen (cur_name)
 		  && startswith (cur_name, name))
@@ -457,7 +456,7 @@  init_content_element (struct tui_win_element *element,
 }
 
 tui_win_info::tui_win_info (enum tui_win_type type)
-  : generic (type)
+  : tui_gen_win_info (type)
 {
 }
 
@@ -569,7 +568,7 @@  tui_source_window_base::~tui_source_window_base ()
 
 tui_data_window::~tui_data_window ()
 {
-  if (generic.content != NULL)
+  if (content != NULL)
     {
       tui_free_data_content (regs_content, regs_content_count);
       regs_content = NULL;
@@ -579,21 +578,21 @@  tui_data_window::~tui_data_window ()
       data_content_count = 0;
       regs_column_count = 1;
       display_regs = false;
-      generic.content = NULL;
-      generic.content_size = 0;
+      content = NULL;
+      content_size = 0;
     }
 }  
 
 tui_win_info::~tui_win_info ()
 {
-  if (generic.handle != NULL)
+  if (handle != NULL)
     {
-      tui_delete_win (generic.handle);
-      generic.handle = NULL;
-      tui_free_win_content (&generic);
+      tui_delete_win (handle);
+      handle = NULL;
+      tui_free_win_content (this);
     }
-  if (generic.title)
-    xfree (generic.title);
+  if (title)
+    xfree (title);
 }
 
 
@@ -602,7 +601,7 @@  tui_free_all_source_wins_content ()
 {
   for (tui_source_window_base *win_info : tui_source_windows ())
     {
-      tui_free_win_content (&(win_info->generic));
+      tui_free_win_content (win_info);
       tui_free_win_content (win_info->execution_info);
     }
 }
diff --git a/gdb/tui/tui-data.h b/gdb/tui/tui-data.h
index 1fc9e32c5c5..4d2f447c942 100644
--- a/gdb/tui/tui-data.h
+++ b/gdb/tui/tui-data.h
@@ -44,7 +44,7 @@  struct tui_gen_win_info
   {
   }
 
-  ~tui_gen_win_info ()
+  virtual ~tui_gen_win_info ()
   {
   }
 
@@ -246,7 +246,7 @@  struct tui_win_element
 };
 
 /* This defines information about each logical window.  */
-struct tui_win_info
+struct tui_win_info : public tui_gen_win_info
 {
 protected:
 
@@ -265,7 +265,7 @@  protected:
 
 public:
 
-  virtual ~tui_win_info ();
+  ~tui_win_info () override;
 
   /* Clear the pertinent detail in the window.  */
   virtual void clear_detail () = 0;
@@ -311,8 +311,6 @@  public:
   void left_scroll (int num_to_scroll);
   void right_scroll (int num_to_scroll);
 
-  struct tui_gen_win_info generic;	/* General window information.  */
-
   /* Can this window ever be highlighted?  */
   bool can_highlight = false;
 
diff --git a/gdb/tui/tui-disasm.c b/gdb/tui/tui-disasm.c
index 8dd156d0907..a9d827f5b78 100644
--- a/gdb/tui/tui-disasm.c
+++ b/gdb/tui/tui-disasm.c
@@ -191,8 +191,8 @@  tui_set_disassem_content (struct gdbarch *gdbarch, CORE_ADDR pc)
   cur_pc = locator->content[0]->which_element.locator.addr;
 
   /* Window size, excluding highlight box.  */
-  max_lines = TUI_DISASM_WIN->generic.height - 2;
-  line_width = TUI_DISASM_WIN->generic.width - 2;
+  max_lines = TUI_DISASM_WIN->height - 2;
+  line_width = TUI_DISASM_WIN->width - 2;
 
   /* Get temporary table that will hold all strings (addr & insn).  */
   asm_lines = XALLOCAVEC (struct tui_asm_line, max_lines);
@@ -228,7 +228,7 @@  tui_set_disassem_content (struct gdbarch *gdbarch, CORE_ADDR pc)
       struct tui_source_element *src;
       int cur_len;
 
-      element = TUI_DISASM_WIN->generic.content[i];
+      element = TUI_DISASM_WIN->content[i];
       src = &element->which_element.source;
       strcpy (line, asm_lines[i].addr_string);
       cur_len = strlen (line);
@@ -257,7 +257,7 @@  tui_set_disassem_content (struct gdbarch *gdbarch, CORE_ADDR pc)
       xfree (asm_lines[i].addr_string);
       xfree (asm_lines[i].insn);
     }
-  TUI_DISASM_WIN->generic.content_size = i;
+  TUI_DISASM_WIN->content_size = i;
   return TUI_SUCCESS;
 }
 
@@ -377,15 +377,12 @@  void
 tui_disasm_window::do_scroll_vertical
   (enum tui_scroll_direction scroll_direction, int num_to_scroll)
 {
-  if (generic.content != NULL)
+  if (content != NULL)
     {
       CORE_ADDR pc;
-      tui_win_content content;
       struct tui_line_or_address val;
       int dir;
 
-      content = generic.content;
-
       pc = content[0]->which_element.source.line_or_addr.u.addr;
       num_to_scroll++;
       dir = (scroll_direction == FORWARD_SCROLL)
diff --git a/gdb/tui/tui-io.c b/gdb/tui/tui-io.c
index cdb14bf5314..56d5974cb35 100644
--- a/gdb/tui/tui-io.c
+++ b/gdb/tui/tui-io.c
@@ -180,7 +180,7 @@  static void
 update_cmdwin_start_line ()
 {
   TUI_CMD_WIN->start_line
-    = getcury (TUI_CMD_WIN->generic.handle);
+    = getcury (TUI_CMD_WIN->handle);
 }
 
 /* Print a character in the curses command window.  The output is
@@ -190,7 +190,7 @@  update_cmdwin_start_line ()
 static void
 tui_putc (char c)
 {
-  WINDOW *w = TUI_CMD_WIN->generic.handle;
+  WINDOW *w = TUI_CMD_WIN->handle;
 
   do_tui_putc (w, c);
   update_cmdwin_start_line ();
@@ -502,7 +502,7 @@  void
 tui_puts (const char *string, WINDOW *w)
 {
   if (w == nullptr)
-    w = TUI_CMD_WIN->generic.handle;
+    w = TUI_CMD_WIN->handle;
   tui_puts_internal (w, string, nullptr);
 }
 
@@ -538,13 +538,13 @@  tui_redisplay_readline (void)
   
   c_pos = -1;
   c_line = -1;
-  w = TUI_CMD_WIN->generic.handle;
+  w = TUI_CMD_WIN->handle;
   start_line = TUI_CMD_WIN->start_line;
   wmove (w, start_line, 0);
   prev_col = 0;
   height = 1;
   if (prompt != nullptr)
-    tui_puts_internal (TUI_CMD_WIN->generic.handle, prompt, &height);
+    tui_puts_internal (TUI_CMD_WIN->handle, prompt, &height);
 
   prev_col = getcurx (w);
   for (in = 0; in <= rl_end; in++)
@@ -663,7 +663,7 @@  tui_mld_puts (const struct match_list_displayer *displayer, const char *s)
 static void
 tui_mld_flush (const struct match_list_displayer *displayer)
 {
-  wrefresh (TUI_CMD_WIN->generic.handle);
+  wrefresh (TUI_CMD_WIN->handle);
 }
 
 /* TUI version of displayer.erase_entire_line.  */
@@ -671,7 +671,7 @@  tui_mld_flush (const struct match_list_displayer *displayer)
 static void
 tui_mld_erase_entire_line (const struct match_list_displayer *displayer)
 {
-  WINDOW *w = TUI_CMD_WIN->generic.handle;
+  WINDOW *w = TUI_CMD_WIN->handle;
   int cur_y = getcury (w);
 
   wmove (w, cur_y, 0);
@@ -709,7 +709,7 @@  gdb_wgetch (WINDOW *win)
 static int
 tui_mld_getc (FILE *fp)
 {
-  WINDOW *w = TUI_CMD_WIN->generic.handle;
+  WINDOW *w = TUI_CMD_WIN->handle;
   int c = gdb_wgetch (w);
 
   return c;
@@ -845,7 +845,7 @@  tui_cont_sig (int sig)
       /* Force a refresh of the screen.  */
       tui_refresh_all_win ();
 
-      wrefresh (TUI_CMD_WIN->generic.handle);
+      wrefresh (TUI_CMD_WIN->handle);
     }
   signal (sig, tui_cont_sig);
 }
@@ -914,7 +914,7 @@  tui_getc (FILE *fp)
   int ch;
   WINDOW *w;
 
-  w = TUI_CMD_WIN->generic.handle;
+  w = TUI_CMD_WIN->handle;
 
 #ifdef TUI_USE_PIPE_FOR_READLINE
   /* Flush readline output.  */
@@ -950,8 +950,8 @@  tui_getc (FILE *fp)
 	  int px, py;
 	  getyx (w, py, px);
 	  px += rl_end - rl_point;
-	  py += px / TUI_CMD_WIN->generic.width;
-	  px %= TUI_CMD_WIN->generic.width;
+	  py += px / TUI_CMD_WIN->width;
+	  px %= TUI_CMD_WIN->width;
 	  wmove (w, py, px);
 	  tui_putc ('\n');
         }
diff --git a/gdb/tui/tui-layout.c b/gdb/tui/tui-layout.c
index 556bef833a3..9685d7fc4e5 100644
--- a/gdb/tui/tui-layout.c
+++ b/gdb/tui/tui-layout.c
@@ -296,7 +296,7 @@  tui_default_win_height (enum tui_win_type type,
   int h;
 
   if (tui_win_list[type] != NULL)
-    h = tui_win_list[type]->generic.height;
+    h = tui_win_list[type]->height;
   else
     {
       switch (layout)
@@ -306,7 +306,7 @@  tui_default_win_height (enum tui_win_type type,
 	  if (TUI_CMD_WIN == NULL)
 	    h = tui_term_height () / 2;
 	  else
-	    h = tui_term_height () - TUI_CMD_WIN->generic.height;
+	    h = tui_term_height () - TUI_CMD_WIN->height;
 	  break;
 	case SRC_DISASSEM_COMMAND:
 	case SRC_DATA_COMMAND:
@@ -314,7 +314,7 @@  tui_default_win_height (enum tui_win_type type,
 	  if (TUI_CMD_WIN == NULL)
 	    h = tui_term_height () / 3;
 	  else
-	    h = (tui_term_height () - TUI_CMD_WIN->generic.height) / 2;
+	    h = (tui_term_height () - TUI_CMD_WIN->height) / 2;
 	  break;
 	default:
 	  h = 0;
@@ -610,7 +610,7 @@  show_source_disasm_command (void)
       int cmd_height, src_height, asm_height;
 
       if (TUI_CMD_WIN != NULL)
-	cmd_height = TUI_CMD_WIN->generic.height;
+	cmd_height = TUI_CMD_WIN->height;
       else
 	cmd_height = tui_term_height () / 3;
 
@@ -621,10 +621,10 @@  show_source_disasm_command (void)
 	tui_win_list[SRC_WIN] = make_source_window (src_height, 0);
       else
 	{
-	  init_gen_win_info (&TUI_SRC_WIN->generic,
-			     TUI_SRC_WIN->generic.type,
+	  init_gen_win_info (TUI_SRC_WIN,
+			     TUI_SRC_WIN->type,
 			     src_height,
-			     TUI_SRC_WIN->generic.width,
+			     TUI_SRC_WIN->width,
 			     TUI_SRC_WIN->execution_info->width,
 			     0);
 	  TUI_SRC_WIN->can_highlight = true;
@@ -634,7 +634,7 @@  show_source_disasm_command (void)
 			     3,
 			     0,
 			     0);
-	  tui_make_visible (&TUI_SRC_WIN->generic);
+	  tui_make_visible (TUI_SRC_WIN);
 	  tui_make_visible (TUI_SRC_WIN->execution_info);
 	  TUI_SRC_WIN->m_has_locator = false;
 	}
@@ -665,10 +665,10 @@  show_source_disasm_command (void)
 			     0,
 			     (src_height + asm_height) - 1);
 	  TUI_DISASM_WIN->m_has_locator = true;
-	  init_gen_win_info (&TUI_DISASM_WIN->generic,
-			     TUI_DISASM_WIN->generic.type,
+	  init_gen_win_info (TUI_DISASM_WIN,
+			     TUI_DISASM_WIN->type,
 			     asm_height,
-			     TUI_DISASM_WIN->generic.width,
+			     TUI_DISASM_WIN->width,
 			     TUI_DISASM_WIN->execution_info->width,
 			     src_height - 1);
 	  init_gen_win_info (TUI_DISASM_WIN->execution_info,
@@ -678,7 +678,7 @@  show_source_disasm_command (void)
 			     0,
 			     src_height - 1);
 	  TUI_DISASM_WIN->can_highlight = true;
-	  tui_make_visible (&TUI_DISASM_WIN->generic);
+	  tui_make_visible (TUI_DISASM_WIN);
 	  tui_make_visible (TUI_DISASM_WIN->execution_info);
 	}
       TUI_SRC_WIN->m_has_locator = false;
@@ -692,16 +692,16 @@  show_source_disasm_command (void)
 	  = make_command_window (cmd_height, tui_term_height () - cmd_height);
       else
 	{
-	  init_gen_win_info (&TUI_CMD_WIN->generic,
-			     TUI_CMD_WIN->generic.type,
-			     TUI_CMD_WIN->generic.height,
-			     TUI_CMD_WIN->generic.width,
+	  init_gen_win_info (TUI_CMD_WIN,
+			     TUI_CMD_WIN->type,
+			     TUI_CMD_WIN->height,
+			     TUI_CMD_WIN->width,
 			     0,
-			     TUI_CMD_WIN->generic.origin.y);
+			     TUI_CMD_WIN->origin.y);
 	  TUI_CMD_WIN->can_highlight = false;
-	  tui_make_visible (&TUI_CMD_WIN->generic);
+	  tui_make_visible (TUI_CMD_WIN);
 	}
-      tui_refresh_win (&TUI_CMD_WIN->generic);
+      tui_refresh_win (TUI_CMD_WIN);
       tui_set_current_layout_to (SRC_DISASSEM_COMMAND);
     }
 }
@@ -712,7 +712,7 @@  show_source_disasm_command (void)
 static void
 show_data (enum tui_layout_type new_layout)
 {
-  int total_height = (tui_term_height () - TUI_CMD_WIN->generic.height);
+  int total_height = (tui_term_height () - TUI_CMD_WIN->height);
   int src_height, data_height;
   enum tui_win_type win_type;
   struct tui_gen_win_info *locator = tui_locator_win_info_ptr ();
@@ -752,10 +752,10 @@  show_data (enum tui_layout_type new_layout)
   else
     {
       base = (tui_source_window_base *) tui_win_list[win_type];
-      init_gen_win_info (&tui_win_list[win_type]->generic,
-			 tui_win_list[win_type]->generic.type,
+      init_gen_win_info (tui_win_list[win_type],
+			 tui_win_list[win_type]->type,
 			 src_height,
-			 tui_win_list[win_type]->generic.width,
+			 tui_win_list[win_type]->width,
 			 base->execution_info->width,
 			 data_height - 1);
       init_gen_win_info (base->execution_info,
@@ -764,7 +764,7 @@  show_data (enum tui_layout_type new_layout)
 			 3,
 			 0,
 			 data_height - 1);
-      tui_make_visible (&tui_win_list[win_type]->generic);
+      tui_make_visible (tui_win_list[win_type]);
       tui_make_visible (base->execution_info);
       init_gen_win_info (locator,
 			 LOCATOR_WIN,
@@ -829,7 +829,7 @@  init_and_make_win (void *opaque_win_info,
   if (tui_win_is_auxillary (win_type))
     generic = (struct tui_gen_win_info *) opaque_win_info;
   else
-    generic = &((struct tui_win_info *) opaque_win_info)->generic;
+    generic = (struct tui_win_info *) opaque_win_info;
 
   init_gen_win_info (generic, win_type, height, width, origin_x, origin_y);
   if (!tui_win_is_auxillary (win_type))
@@ -892,7 +892,7 @@  show_source_or_disasm_and_command (enum tui_layout_type layout_type)
       struct tui_gen_win_info *locator = tui_locator_win_info_ptr ();
 
       if (TUI_CMD_WIN != NULL)
-	cmd_height = TUI_CMD_WIN->generic.height;
+	cmd_height = TUI_CMD_WIN->height;
       else
 	cmd_height = tui_term_height () / 3;
       src_height = tui_term_height () - cmd_height;
@@ -930,10 +930,10 @@  show_source_or_disasm_and_command (enum tui_layout_type layout_type)
 			     0,
 			     src_height - 1);
 	  base->m_has_locator = true;
-	  init_gen_win_info (&(*win_info_ptr)->generic,
-			     (*win_info_ptr)->generic.type,
+	  init_gen_win_info (*win_info_ptr,
+			     (*win_info_ptr)->type,
 			     src_height - 1,
-			     (*win_info_ptr)->generic.width,
+			     (*win_info_ptr)->width,
 			     base->execution_info->width,
 			     0);
 	  init_gen_win_info (base->execution_info,
@@ -943,7 +943,7 @@  show_source_or_disasm_and_command (enum tui_layout_type layout_type)
 			     0,
 			     0);
 	  base->can_highlight = true;
-	  tui_make_visible (&(*win_info_ptr)->generic);
+	  tui_make_visible (*win_info_ptr);
 	  tui_make_visible (base->execution_info);
 	}
 
@@ -956,18 +956,18 @@  show_source_or_disasm_and_command (enum tui_layout_type layout_type)
 	{
 	  tui_win_list[CMD_WIN] = make_command_window (cmd_height,
 						       src_height);
-	  tui_refresh_win (&TUI_CMD_WIN->generic);
+	  tui_refresh_win (TUI_CMD_WIN);
 	}
       else
 	{
-	  init_gen_win_info (&TUI_CMD_WIN->generic,
-			     TUI_CMD_WIN->generic.type,
-			     TUI_CMD_WIN->generic.height,
-			     TUI_CMD_WIN->generic.width,
-			     TUI_CMD_WIN->generic.origin.x,
-			     TUI_CMD_WIN->generic.origin.y);
+	  init_gen_win_info (TUI_CMD_WIN,
+			     TUI_CMD_WIN->type,
+			     TUI_CMD_WIN->height,
+			     TUI_CMD_WIN->width,
+			     TUI_CMD_WIN->origin.x,
+			     TUI_CMD_WIN->origin.y);
 	  TUI_CMD_WIN->can_highlight = false;
-	  tui_make_visible (&TUI_CMD_WIN->generic);
+	  tui_make_visible (TUI_CMD_WIN);
 	}
       tui_set_current_layout_to (layout_type);
     }
diff --git a/gdb/tui/tui-regs.c b/gdb/tui/tui-regs.c
index 7367cf7c0cb..cfb735c81d5 100644
--- a/gdb/tui/tui-regs.c
+++ b/gdb/tui/tui-regs.c
@@ -135,7 +135,7 @@  tui_show_registers (struct reggroup *group)
 
   /* Make sure the register window is visible.  If not, select an
      appropriate layout.  */
-  if (TUI_DATA_WIN == NULL || !TUI_DATA_WIN->generic.is_visible)
+  if (TUI_DATA_WIN == NULL || !TUI_DATA_WIN->is_visible)
     tui_set_layout_by_name (DATA_NAME);
 
   if (group == 0)
@@ -195,8 +195,8 @@  tui_show_register_group (struct reggroup *group,
   /* Make a new title showing which group we display.  */
   snprintf (title, sizeof (title) - 1, "Register group: %s",
             reggroup_name (group));
-  xfree (TUI_DATA_WIN->generic.title);
-  TUI_DATA_WIN->generic.title = xstrdup (title);
+  xfree (TUI_DATA_WIN->title);
+  TUI_DATA_WIN->title = xstrdup (title);
 
   /* See how many registers must be displayed.  */
   nr_regs = 0;
@@ -235,10 +235,10 @@  tui_show_register_group (struct reggroup *group,
     {
       if (!refresh_values_only || allocated_here)
 	{
-	  TUI_DATA_WIN->generic.content = NULL;
-	  TUI_DATA_WIN->generic.content_size = 0;
-	  tui_add_content_elements (&TUI_DATA_WIN->generic, nr_regs);
-	  TUI_DATA_WIN->regs_content = TUI_DATA_WIN->generic.content;
+	  TUI_DATA_WIN->content = NULL;
+	  TUI_DATA_WIN->content_size = 0;
+	  tui_add_content_elements (TUI_DATA_WIN, nr_regs);
+	  TUI_DATA_WIN->regs_content = TUI_DATA_WIN->content;
 	  TUI_DATA_WIN->regs_content_count = nr_regs;
 	}
 
@@ -276,7 +276,7 @@  tui_show_register_group (struct reggroup *group,
           pos++;
 	}
 
-      TUI_DATA_WIN->generic.content_size =
+      TUI_DATA_WIN->content_size =
 	TUI_DATA_WIN->regs_content_count + TUI_DATA_WIN->data_content_count;
       ret = TUI_SUCCESS;
     }
@@ -326,17 +326,17 @@  tui_display_registers_from (int start_element_no)
       i = start_element_no;
 
       TUI_DATA_WIN->regs_column_count =
-        (TUI_DATA_WIN->generic.width - 2) / item_win_width;
+        (TUI_DATA_WIN->width - 2) / item_win_width;
       if (TUI_DATA_WIN->regs_column_count == 0)
         TUI_DATA_WIN->regs_column_count = 1;
       item_win_width =
-        (TUI_DATA_WIN->generic.width - 2) / TUI_DATA_WIN->regs_column_count;
+        (TUI_DATA_WIN->width - 2) / TUI_DATA_WIN->regs_column_count;
 
       /* Now create each data "sub" window, and write the display into
 	 it.  */
       cur_y = 1;
       while (i < TUI_DATA_WIN->regs_content_count 
-	     && cur_y <= TUI_DATA_WIN->generic.viewport_height)
+	     && cur_y <= TUI_DATA_WIN->viewport_height)
 	{
 	  for (j = 0;
 	       j < TUI_DATA_WIN->regs_column_count
@@ -401,7 +401,7 @@  tui_display_reg_element_at_line (int start_element_no,
 
 	  last_line_no = tui_last_regs_line_no ();
 	  first_line_on_last_page
-	    = last_line_no - (TUI_DATA_WIN->generic.height - 2);
+	    = last_line_no - (TUI_DATA_WIN->height - 2);
 	  if (first_line_on_last_page < 0)
 	    first_line_on_last_page = 0;
 
@@ -470,7 +470,7 @@  void
 tui_check_register_values (struct frame_info *frame)
 {
   if (TUI_DATA_WIN != NULL
-      && TUI_DATA_WIN->generic.is_visible)
+      && TUI_DATA_WIN->is_visible)
     {
       if (TUI_DATA_WIN->regs_content_count <= 0 
 	  && TUI_DATA_WIN->display_regs)
@@ -596,7 +596,7 @@  tui_reg_command (const char *args, int from_tty)
       /* Make sure the register window is visible.  If not, select an
 	 appropriate layout.  We need to do this before trying to run the
 	 'next' or 'prev' commands.  */
-      if (TUI_DATA_WIN == NULL || !TUI_DATA_WIN->generic.is_visible)
+      if (TUI_DATA_WIN == NULL || !TUI_DATA_WIN->is_visible)
 	tui_set_layout_by_name (DATA_NAME);
 
       if (strncmp (args, "next", len) == 0)
diff --git a/gdb/tui/tui-source.c b/gdb/tui/tui-source.c
index ac3f225e1b1..c6367765d67 100644
--- a/gdb/tui/tui-source.c
+++ b/gdb/tui/tui-source.c
@@ -135,10 +135,10 @@  tui_set_source_content (struct symtab *s,
 
       if ((ret = tui_alloc_source_buffer (TUI_SRC_WIN)) == TUI_SUCCESS)
 	{
-	  line_width = TUI_SRC_WIN->generic.width - 1;
+	  line_width = TUI_SRC_WIN->width - 1;
 	  /* Take hilite (window border) into account, when
 	     calculating the number of lines.  */
-	  nlines = (line_no + (TUI_SRC_WIN->generic.height - 2)) - line_no;
+	  nlines = (line_no + (TUI_SRC_WIN->height - 2)) - line_no;
 
 	  std::string srclines;
 	  if (!g_source_cache.get_source_lines (s, line_no, line_no + nlines,
@@ -163,9 +163,9 @@  tui_set_source_content (struct symtab *s,
 		= (struct tui_source_window_base *) TUI_SRC_WIN;
 	      const char *s_filename = symtab_to_filename_for_display (s);
 
-	      if (TUI_SRC_WIN->generic.title)
-		xfree (TUI_SRC_WIN->generic.title);
-	      TUI_SRC_WIN->generic.title = xstrdup (s_filename);
+	      if (TUI_SRC_WIN->title)
+		xfree (TUI_SRC_WIN->title);
+	      TUI_SRC_WIN->title = xstrdup (s_filename);
 
 	      xfree (src->fullname);
 	      src->fullname = xstrdup (symtab_to_fullname (s));
@@ -179,7 +179,7 @@  tui_set_source_content (struct symtab *s,
 	      while (cur_line < nlines)
 		{
 		  struct tui_win_element *element
-		    = TUI_SRC_WIN->generic.content[cur_line];
+		    = TUI_SRC_WIN->content[cur_line];
 
 		  std::string text;
 		  if (*iter != '\0')
@@ -201,16 +201,16 @@  tui_set_source_content (struct symtab *s,
 		     == locator->content[0]
 		     ->which_element.locator.line_no);
 
-		  xfree (TUI_SRC_WIN->generic.content[cur_line]
+		  xfree (TUI_SRC_WIN->content[cur_line]
 			 ->which_element.source.line);
-		  TUI_SRC_WIN->generic.content[cur_line]
+		  TUI_SRC_WIN->content[cur_line]
 		    ->which_element.source.line
 		    = xstrdup (text.c_str ());
 
 		  cur_line++;
 		  cur_line_no++;
 		}
-	      TUI_SRC_WIN->generic.content_size = nlines;
+	      TUI_SRC_WIN->content_size = nlines;
 	      ret = TUI_SUCCESS;
 	    }
 	}
@@ -233,18 +233,18 @@  tui_set_source_content_nil (struct tui_win_info *win_info,
   int n_lines;
   int curr_line = 0;
 
-  line_width = win_info->generic.width - 1;
-  n_lines = win_info->generic.height - 2;
+  line_width = win_info->width - 1;
+  n_lines = win_info->height - 2;
 
   /* Set to empty each line in the window, except for the one which
      contains the message.  */
-  while (curr_line < win_info->generic.content_size)
+  while (curr_line < win_info->content_size)
     {
       /* Set the information related to each displayed line to null:
          i.e. the line number is 0, there is no bp, it is not where
          the program is stopped.  */
 
-      struct tui_win_element *element = win_info->generic.content[curr_line];
+      struct tui_win_element *element = win_info->content[curr_line];
 
       element->which_element.source.line_or_addr.loa = LOA_LINE;
       element->which_element.source.line_or_addr.u.line_no = 0;
@@ -300,7 +300,7 @@  int
 tui_source_is_displayed (const char *fullname)
 {
   return (TUI_SRC_WIN != NULL
-	  && TUI_SRC_WIN->generic.content_in_use 
+	  && TUI_SRC_WIN->content_in_use 
 	  && (filename_cmp (tui_locator_win_info_ptr ()->content[0]
 			      ->which_element.locator.full_name,
 			    fullname) == 0));
@@ -312,11 +312,10 @@  void
 tui_source_window::do_scroll_vertical
   (enum tui_scroll_direction scroll_direction, int num_to_scroll)
 {
-  if (generic.content != NULL)
+  if (content != NULL)
     {
       struct tui_line_or_address l;
       struct symtab *s;
-      tui_win_content content = generic.content;
       struct symtab_and_line cursal = get_current_source_symtab_and_line ();
 
       if (cursal.symtab == NULL)
@@ -330,7 +329,7 @@  tui_source_window::do_scroll_vertical
 	  l.u.line_no = content[0]->which_element.source.line_or_addr.u.line_no
 	    + num_to_scroll;
 	  if (l.u.line_no > s->nlines)
-	    /* line = s->nlines - win_info->generic.content_size + 1; */
+	    /* line = s->nlines - win_info->content_size + 1; */
 	    /* elz: fix for dts 23398.  */
 	    l.u.line_no
 	      = content[0]->which_element.source.line_or_addr.u.line_no;
diff --git a/gdb/tui/tui-stack.c b/gdb/tui/tui-stack.c
index 125a5b7a8e3..a38971542eb 100644
--- a/gdb/tui/tui-stack.c
+++ b/gdb/tui/tui-stack.c
@@ -404,7 +404,7 @@  tui_show_frame_info (struct frame_info *fi)
 	  if (win_info == TUI_SRC_WIN)
 	    {
 	      start_line = (item->locator.line_no -
-			   (win_info->generic.viewport_height / 2)) + 1;
+			   (win_info->viewport_height / 2)) + 1;
 	      if (start_line <= 0)
 		start_line = 1;
 	    }
diff --git a/gdb/tui/tui-win.c b/gdb/tui/tui-win.c
index e4c1522a62d..a40e6c5206b 100644
--- a/gdb/tui/tui-win.c
+++ b/gdb/tui/tui-win.c
@@ -373,10 +373,10 @@  window_name_completer (completion_tracker &tracker,
 
       /* We can't focus on an invisible window.  */
       if (tui_win_list[win_type] == NULL
-	  || !tui_win_list[win_type]->generic.is_visible)
+	  || !tui_win_list[win_type]->is_visible)
 	continue;
 
-      completion_name = tui_win_name (&tui_win_list [win_type]->generic);
+      completion_name = tui_win_name (tui_win_list [win_type]);
       gdb_assert (completion_name != NULL);
       completion_name_vec.push_back (completion_name);
     }
@@ -438,8 +438,8 @@  tui_update_gdb_sizes (void)
 
   if (tui_active)
     {
-      width = TUI_CMD_WIN->generic.width;
-      height = TUI_CMD_WIN->generic.height;
+      width = TUI_CMD_WIN->width;
+      height = TUI_CMD_WIN->height;
     }
   else
     {
@@ -460,10 +460,10 @@  tui_set_win_focus_to (struct tui_win_info *win_info)
       struct tui_win_info *win_with_focus = tui_win_with_focus ();
 
       if (win_with_focus != NULL
-	  && win_with_focus->generic.type != CMD_WIN)
+	  && win_with_focus->type != CMD_WIN)
 	tui_unhighlight_win (win_with_focus);
       tui_set_win_with_focus (win_info);
-      if (win_info->generic.type != CMD_WIN)
+      if (win_info->type != CMD_WIN)
 	tui_highlight_win (win_info);
     }
 }
@@ -473,7 +473,7 @@  void
 tui_win_info::forward_scroll (int num_to_scroll)
 {
   if (num_to_scroll == 0)
-    num_to_scroll = generic.height - 3;
+    num_to_scroll = height - 3;
 
   do_scroll_vertical (FORWARD_SCROLL, num_to_scroll);
 }
@@ -482,7 +482,7 @@  void
 tui_win_info::backward_scroll (int num_to_scroll)
 {
   if (num_to_scroll == 0)
-    num_to_scroll = generic.height - 3;
+    num_to_scroll = height - 3;
 
   do_scroll_vertical (BACKWARD_SCROLL, num_to_scroll);
 }
@@ -528,7 +528,7 @@  tui_refresh_all_win (void)
   tui_refresh_all (tui_win_list);
   for (type = SRC_WIN; type < MAX_MAJOR_WINDOWS; type++)
     {
-      if (tui_win_list[type] && tui_win_list[type]->generic.is_visible)
+      if (tui_win_list[type] && tui_win_list[type]->is_visible)
 	tui_win_list[type]->refresh_all ();
     }
   tui_show_locator_content ();
@@ -569,7 +569,7 @@  tui_resize_all (void)
 #endif      
       /* Turn keypad off while we resize.  */
       if (win_with_focus != TUI_CMD_WIN)
-	keypad (TUI_CMD_WIN->generic.handle, FALSE);
+	keypad (TUI_CMD_WIN->handle, FALSE);
       tui_update_gdb_sizes ();
       tui_set_term_height_to (screenheight);
       tui_set_term_width_to (screenwidth);
@@ -597,57 +597,57 @@  tui_resize_all (void)
 	case SRC_COMMAND:
 	case DISASSEM_COMMAND:
 	  first_win = tui_source_windows ()[0];
-	  first_win->generic.width += width_diff;
+	  first_win->width += width_diff;
 	  locator->width += width_diff;
 	  /* Check for invalid heights.  */
 	  if (height_diff == 0)
-	    new_height = first_win->generic.height;
-	  else if ((first_win->generic.height + split_diff) >=
+	    new_height = first_win->height;
+	  else if ((first_win->height + split_diff) >=
 		   (screenheight - MIN_CMD_WIN_HEIGHT - 1))
 	    new_height = screenheight - MIN_CMD_WIN_HEIGHT - 1;
-	  else if ((first_win->generic.height + split_diff) <= 0)
+	  else if ((first_win->height + split_diff) <= 0)
 	    new_height = MIN_WIN_HEIGHT;
 	  else
-	    new_height = first_win->generic.height + split_diff;
+	    new_height = first_win->height + split_diff;
 
 	  locator->origin.y = new_height + 1;
 	  make_invisible_and_set_new_height (first_win, new_height);
-	  TUI_CMD_WIN->generic.origin.y = locator->origin.y + 1;
-	  TUI_CMD_WIN->generic.width += width_diff;
-	  new_height = screenheight - TUI_CMD_WIN->generic.origin.y;
+	  TUI_CMD_WIN->origin.y = locator->origin.y + 1;
+	  TUI_CMD_WIN->width += width_diff;
+	  new_height = screenheight - TUI_CMD_WIN->origin.y;
 	  make_invisible_and_set_new_height (TUI_CMD_WIN, new_height);
 	  make_visible_with_new_height (first_win);
 	  make_visible_with_new_height (TUI_CMD_WIN);
-	  if (first_win->generic.content_size <= 0)
+	  if (first_win->content_size <= 0)
 	    tui_erase_source_content (first_win, EMPTY_SOURCE_PROMPT);
 	  break;
 	default:
 	  if (cur_layout == SRC_DISASSEM_COMMAND)
 	    {
 	      first_win = TUI_SRC_WIN;
-	      first_win->generic.width += width_diff;
+	      first_win->width += width_diff;
 	      second_win = TUI_DISASM_WIN;
-	      second_win->generic.width += width_diff;
+	      second_win->width += width_diff;
 	    }
 	  else
 	    {
 	      first_win = TUI_DATA_WIN;
-	      first_win->generic.width += width_diff;
+	      first_win->width += width_diff;
 	      second_win = tui_source_windows ()[0];
-	      second_win->generic.width += width_diff;
+	      second_win->width += width_diff;
 	    }
 	  /* Change the first window's height/width.  */
 	  /* Check for invalid heights.  */
 	  if (height_diff == 0)
-	    new_height = first_win->generic.height;
-	  else if ((first_win->generic.height +
-		    second_win->generic.height + (split_diff * 2)) >=
+	    new_height = first_win->height;
+	  else if ((first_win->height +
+		    second_win->height + (split_diff * 2)) >=
 		   (screenheight - MIN_CMD_WIN_HEIGHT - 1))
 	    new_height = (screenheight - MIN_CMD_WIN_HEIGHT - 1) / 2;
-	  else if ((first_win->generic.height + split_diff) <= 0)
+	  else if ((first_win->height + split_diff) <= 0)
 	    new_height = MIN_WIN_HEIGHT;
 	  else
-	    new_height = first_win->generic.height + split_diff;
+	    new_height = first_win->height + split_diff;
 	  make_invisible_and_set_new_height (first_win, new_height);
 
 	  locator->width += width_diff;
@@ -655,9 +655,9 @@  tui_resize_all (void)
 	  /* Change the second window's height/width.  */
 	  /* Check for invalid heights.  */
 	  if (height_diff == 0)
-	    new_height = second_win->generic.height;
-	  else if ((first_win->generic.height +
-		    second_win->generic.height + (split_diff * 2)) >=
+	    new_height = second_win->height;
+	  else if ((first_win->height +
+		    second_win->height + (split_diff * 2)) >=
 		   (screenheight - MIN_CMD_WIN_HEIGHT - 1))
 	    {
 	      new_height = screenheight - MIN_CMD_WIN_HEIGHT - 1;
@@ -666,24 +666,24 @@  tui_resize_all (void)
 	      else
 		new_height /= 2;
 	    }
-	  else if ((second_win->generic.height + split_diff) <= 0)
+	  else if ((second_win->height + split_diff) <= 0)
 	    new_height = MIN_WIN_HEIGHT;
 	  else
-	    new_height = second_win->generic.height + split_diff;
-	  second_win->generic.origin.y = first_win->generic.height - 1;
+	    new_height = second_win->height + split_diff;
+	  second_win->origin.y = first_win->height - 1;
 	  make_invisible_and_set_new_height (second_win, new_height);
 
 	  /* Change the command window's height/width.  */
-	  TUI_CMD_WIN->generic.origin.y = locator->origin.y + 1;
+	  TUI_CMD_WIN->origin.y = locator->origin.y + 1;
 	  make_invisible_and_set_new_height (TUI_CMD_WIN,
-					     TUI_CMD_WIN->generic.height
+					     TUI_CMD_WIN->height
 					     + cmd_split_diff);
 	  make_visible_with_new_height (first_win);
 	  make_visible_with_new_height (second_win);
 	  make_visible_with_new_height (TUI_CMD_WIN);
-	  if (first_win->generic.content_size <= 0)
+	  if (first_win->content_size <= 0)
 	    tui_erase_source_content (first_win, EMPTY_SOURCE_PROMPT);
-	  if (second_win->generic.content_size <= 0)
+	  if (second_win->content_size <= 0)
 	    tui_erase_source_content (second_win, EMPTY_SOURCE_PROMPT);
 	  break;
 	}
@@ -693,7 +693,7 @@  tui_resize_all (void)
 	{
 	  if (win_type != CMD_WIN 
 	      && (tui_win_list[win_type] != NULL)
-	      && !tui_win_list[win_type]->generic.is_visible)
+	      && !tui_win_list[win_type]->is_visible)
 	    {
 	      delete tui_win_list[win_type];
 	      tui_win_list[win_type] = NULL;
@@ -702,7 +702,7 @@  tui_resize_all (void)
       /* Turn keypad back on, unless focus is in the command
 	 window.  */
       if (win_with_focus != TUI_CMD_WIN)
-	keypad (TUI_CMD_WIN->generic.handle, TRUE);
+	keypad (TUI_CMD_WIN->handle, TRUE);
     }
 }
 
@@ -856,20 +856,20 @@  tui_set_focus (const char *arg, int from_tty)
       else
 	win_info = tui_partial_win_by_name (buf_ptr);
 
-      if (win_info == NULL || !win_info->generic.is_visible)
+      if (win_info == NULL || !win_info->is_visible)
 	warning (_("Invalid window specified. \n\
 The window name specified must be valid and visible.\n"));
       else
 	{
 	  tui_set_win_focus_to (win_info);
-	  keypad (TUI_CMD_WIN->generic.handle, (win_info != TUI_CMD_WIN));
+	  keypad (TUI_CMD_WIN->handle, (win_info != TUI_CMD_WIN));
 	}
 
-      if (TUI_DATA_WIN && TUI_DATA_WIN->generic.is_visible)
+      if (TUI_DATA_WIN && TUI_DATA_WIN->is_visible)
 	TUI_DATA_WIN->refresh_all ();
       xfree (buf_ptr);
       printf_filtered (_("Focus set to %s window.\n"),
-		       tui_win_name (&tui_win_with_focus ()->generic));
+		       tui_win_name (tui_win_with_focus ()));
     }
   else
     warning (_("Incorrect Number of Arguments.\n%s"), FOCUS_USAGE);
@@ -892,16 +892,16 @@  tui_all_windows_info (const char *arg, int from_tty)
 
   for (type = SRC_WIN; (type < MAX_MAJOR_WINDOWS); type++)
     if (tui_win_list[type] 
-	&& tui_win_list[type]->generic.is_visible)
+	&& tui_win_list[type]->is_visible)
       {
 	if (win_with_focus == tui_win_list[type])
 	  printf_filtered ("        %s\t(%d lines)  <has focus>\n",
-			   tui_win_name (&tui_win_list[type]->generic),
-			   tui_win_list[type]->generic.height);
+			   tui_win_name (tui_win_list[type]),
+			   tui_win_list[type]->height);
 	else
 	  printf_filtered ("        %s\t(%d lines)\n",
-			   tui_win_name (&tui_win_list[type]->generic),
-			   tui_win_list[type]->generic.height);
+			   tui_win_name (tui_win_list[type]),
+			   tui_win_list[type]->height);
       }
 }
 
@@ -934,17 +934,17 @@  update_tab_width ()
      and redisplay of the window's contents, which will take
      the new tab width into account.  */
   if (tui_win_list[SRC_WIN]
-      && tui_win_list[SRC_WIN]->generic.is_visible)
+      && tui_win_list[SRC_WIN]->is_visible)
     {
       make_invisible_and_set_new_height (TUI_SRC_WIN,
-					 TUI_SRC_WIN->generic.height);
+					 TUI_SRC_WIN->height);
       make_visible_with_new_height (TUI_SRC_WIN);
     }
   if (tui_win_list[DISASSEM_WIN]
-      && tui_win_list[DISASSEM_WIN]->generic.is_visible)
+      && tui_win_list[DISASSEM_WIN]->is_visible)
     {
       make_invisible_and_set_new_height (TUI_DISASM_WIN,
-					 TUI_DISASM_WIN->generic.height);
+					 TUI_DISASM_WIN->height);
       make_visible_with_new_height (TUI_DISASM_WIN);
     }
 }
@@ -1025,7 +1025,7 @@  tui_set_win_height (const char *arg, int from_tty)
 	    wname[i] = tolower (wname[i]);
 	  win_info = tui_partial_win_by_name (wname);
 
-	  if (win_info == NULL || !win_info->generic.is_visible)
+	  if (win_info == NULL || !win_info->is_visible)
 	    warning (_("Invalid window specified. \n\
 The window name specified must be valid and visible.\n"));
 	  else
@@ -1055,7 +1055,7 @@  The window name specified must be valid and visible.\n"));
 		      if (fixed_size)
 			new_height = input_no;
 		      else
-			new_height = win_info->generic.height + input_no;
+			new_height = win_info->height + input_no;
 
 		      /* Now change the window's height, and adjust
 		         all other windows around it.  */
@@ -1098,21 +1098,21 @@  tui_adjust_win_heights (struct tui_win_info *primary_win_info,
   if (new_height_ok (primary_win_info, new_height))
     {
       status = TUI_SUCCESS;
-      if (new_height != primary_win_info->generic.height)
+      if (new_height != primary_win_info->height)
 	{
 	  int diff;
 	  struct tui_win_info *win_info;
 	  struct tui_gen_win_info *locator = tui_locator_win_info_ptr ();
 	  enum tui_layout_type cur_layout = tui_current_layout ();
 
-	  diff = (new_height - primary_win_info->generic.height) * (-1);
+	  diff = (new_height - primary_win_info->height) * (-1);
 	  if (cur_layout == SRC_COMMAND 
 	      || cur_layout == DISASSEM_COMMAND)
 	    {
 	      struct tui_win_info *src_win_info;
 
 	      make_invisible_and_set_new_height (primary_win_info, new_height);
-	      if (primary_win_info->generic.type == CMD_WIN)
+	      if (primary_win_info->type == CMD_WIN)
 		{
 		  win_info = tui_source_windows ()[0];
 		  src_win_info = win_info;
@@ -1123,11 +1123,11 @@  tui_adjust_win_heights (struct tui_win_info *primary_win_info,
 		  src_win_info = primary_win_info;
 		}
 	      make_invisible_and_set_new_height (win_info,
-					     win_info->generic.height + diff);
-	      TUI_CMD_WIN->generic.origin.y = locator->origin.y + 1;
+					     win_info->height + diff);
+	      TUI_CMD_WIN->origin.y = locator->origin.y + 1;
 	      make_visible_with_new_height (win_info);
 	      make_visible_with_new_height (primary_win_info);
-	      if (src_win_info->generic.content_size <= 0)
+	      if (src_win_info->content_size <= 0)
 		tui_erase_source_content (src_win_info, EMPTY_SOURCE_PROMPT);
 	    }
 	  else
@@ -1154,8 +1154,8 @@  tui_adjust_win_heights (struct tui_win_info *primary_win_info,
 
 		  if (diff % 2)
 		    {
-		      if (first_win->generic.height >
-			  second_win->generic.height)
+		      if (first_win->height >
+			  second_win->height)
 			if (diff < 0)
 			  first_split_diff--;
 			else
@@ -1170,42 +1170,42 @@  tui_adjust_win_heights (struct tui_win_info *primary_win_info,
 		    }
 		  /* Make sure that the minimum hieghts are
 		     honored.  */
-		  while ((first_win->generic.height + first_split_diff) < 3)
+		  while ((first_win->height + first_split_diff) < 3)
 		    {
 		      first_split_diff++;
 		      second_split_diff--;
 		    }
-		  while ((second_win->generic.height + second_split_diff) < 3)
+		  while ((second_win->height + second_split_diff) < 3)
 		    {
 		      second_split_diff++;
 		      first_split_diff--;
 		    }
 		  make_invisible_and_set_new_height (
 						  first_win,
-				 first_win->generic.height + first_split_diff);
-		  second_win->generic.origin.y = first_win->generic.height - 1;
+				 first_win->height + first_split_diff);
+		  second_win->origin.y = first_win->height - 1;
 		  make_invisible_and_set_new_height (second_win,
-						     second_win->generic.height
+						     second_win->height
 						     + second_split_diff);
-		  TUI_CMD_WIN->generic.origin.y = locator->origin.y + 1;
+		  TUI_CMD_WIN->origin.y = locator->origin.y + 1;
 		  make_invisible_and_set_new_height (TUI_CMD_WIN, new_height);
 		}
 	      else
 		{
-		  if ((TUI_CMD_WIN->generic.height + diff) < 1)
+		  if ((TUI_CMD_WIN->height + diff) < 1)
 		    { /* If there is no way to increase the command
 			 window take real estate from the 1st or 2nd
 			 window.  */
-		      if ((TUI_CMD_WIN->generic.height + diff) < 1)
+		      if ((TUI_CMD_WIN->height + diff) < 1)
 			{
 			  int i;
 
-			  for (i = TUI_CMD_WIN->generic.height + diff;
+			  for (i = TUI_CMD_WIN->height + diff;
 			       (i < 1); i++)
 			    if (primary_win_info == first_win)
-			      second_win->generic.height--;
+			      second_win->height--;
 			    else
-			      first_win->generic.height--;
+			      first_win->height--;
 			}
 		    }
 		  if (primary_win_info == first_win)
@@ -1213,26 +1213,26 @@  tui_adjust_win_heights (struct tui_win_info *primary_win_info,
 		  else
 		    make_invisible_and_set_new_height (
 						    first_win,
-						  first_win->generic.height);
-		  second_win->generic.origin.y = first_win->generic.height - 1;
+						  first_win->height);
+		  second_win->origin.y = first_win->height - 1;
 		  if (primary_win_info == second_win)
 		    make_invisible_and_set_new_height (second_win, new_height);
 		  else
 		    make_invisible_and_set_new_height (
-				      second_win, second_win->generic.height);
-		  TUI_CMD_WIN->generic.origin.y = locator->origin.y + 1;
-		  if ((TUI_CMD_WIN->generic.height + diff) < 1)
+				      second_win, second_win->height);
+		  TUI_CMD_WIN->origin.y = locator->origin.y + 1;
+		  if ((TUI_CMD_WIN->height + diff) < 1)
 		    make_invisible_and_set_new_height (TUI_CMD_WIN, 1);
 		  else
 		    make_invisible_and_set_new_height (TUI_CMD_WIN,
-						       TUI_CMD_WIN->generic.height + diff);
+						       TUI_CMD_WIN->height + diff);
 		}
 	      make_visible_with_new_height (TUI_CMD_WIN);
 	      make_visible_with_new_height (second_win);
 	      make_visible_with_new_height (first_win);
-	      if (first_win->generic.content_size <= 0)
+	      if (first_win->content_size <= 0)
 		tui_erase_source_content (first_win, EMPTY_SOURCE_PROMPT);
-	      if (second_win->generic.content_size <= 0)
+	      if (second_win->content_size <= 0)
 		tui_erase_source_content (second_win, EMPTY_SOURCE_PROMPT);
 	    }
 	}
@@ -1249,7 +1249,7 @@  tui_source_window_base::set_new_height (int height)
 {
   tui_make_invisible (execution_info);
   execution_info->height = height;
-  execution_info->origin.y = generic.origin.y;
+  execution_info->origin.y = origin.y;
   if (height > 1)
     execution_info->viewport_height = height - 1;
   else
@@ -1260,7 +1260,7 @@  tui_source_window_base::set_new_height (int height)
     {
       tui_gen_win_info *gen_win_info = tui_locator_win_info_ptr ();
       tui_make_invisible (gen_win_info);
-      gen_win_info->origin.y = generic.origin.y + height;
+      gen_win_info->origin.y = origin.y + height;
     }
 }
 
@@ -1270,10 +1270,10 @@  void
 tui_data_window::set_new_height (int height)
 {
   /* Delete all data item windows.  */
-  for (int i = 0; i < generic.content_size; i++)
+  for (int i = 0; i < content_size; i++)
     {
       struct tui_gen_win_info *gen_win_info
-	= generic.content[i]->which_element.data_window;
+	= content[i]->which_element.data_window;
       tui_delete_win (gen_win_info->handle);
       gen_win_info->handle = NULL;
     }
@@ -1286,14 +1286,14 @@  static void
 make_invisible_and_set_new_height (struct tui_win_info *win_info, 
 				   int height)
 {
-  tui_make_invisible (&win_info->generic);
-  win_info->generic.height = height;
+  tui_make_invisible (win_info);
+  win_info->height = height;
   if (height > 1)
-    win_info->generic.viewport_height = height - 1;
+    win_info->viewport_height = height - 1;
   else
-    win_info->generic.viewport_height = height;
+    win_info->viewport_height = height;
   if (win_info != TUI_CMD_WIN)
-    win_info->generic.viewport_height--;
+    win_info->viewport_height--;
 
   /* Now deal with the auxillary windows associated with win_info.  */
   win_info->set_new_height (height);
@@ -1308,17 +1308,17 @@  make_visible_with_new_height (struct tui_win_info *win_info)
 {
   struct symtab *s;
 
-  tui_make_visible (&win_info->generic);
+  tui_make_visible (win_info);
   tui_check_and_display_highlight_if_needed (win_info);
   tui_source_window_base *base;
-  switch (win_info->generic.type)
+  switch (win_info->type)
     {
     case SRC_WIN:
     case DISASSEM_WIN:
       base = (tui_source_window_base *) win_info;
       tui_free_win_content (base->execution_info);
       tui_make_visible (base->execution_info);
-      if (win_info->generic.content != NULL)
+      if (win_info->content != NULL)
 	{
 	  struct gdbarch *gdbarch = base->gdbarch;
 	  struct tui_line_or_address line_or_addr;
@@ -1326,7 +1326,7 @@  make_visible_with_new_height (struct tui_win_info *win_info)
 	    = get_current_source_symtab_and_line ();
 
 	  line_or_addr = base->start_line_or_addr;
-	  tui_free_win_content (&win_info->generic);
+	  tui_free_win_content (win_info);
 	  tui_update_source_window (win_info, gdbarch,
 				    cursal.symtab, line_or_addr, TRUE);
 	}
@@ -1339,7 +1339,7 @@  make_visible_with_new_height (struct tui_win_info *win_info)
 	  struct gdbarch *gdbarch = get_frame_arch (frame);
 
 	  s = find_pc_line_symtab (get_frame_pc (frame));
-	  if (win_info->generic.type == SRC_WIN)
+	  if (win_info->type == SRC_WIN)
 	    {
 	      line.loa = LOA_LINE;
 	      line.u.line_no = cursal.line;
@@ -1362,14 +1362,14 @@  make_visible_with_new_height (struct tui_win_info *win_info)
       break;
     case CMD_WIN:
 #ifdef HAVE_WRESIZE
-      wresize (TUI_CMD_WIN->generic.handle,
-	       TUI_CMD_WIN->generic.height,
-	       TUI_CMD_WIN->generic.width);
+      wresize (TUI_CMD_WIN->handle,
+	       TUI_CMD_WIN->height,
+	       TUI_CMD_WIN->width);
 #endif
-      mvwin (TUI_CMD_WIN->generic.handle,
-	     TUI_CMD_WIN->generic.origin.y,
-	     TUI_CMD_WIN->generic.origin.x);
-      wmove (win_info->generic.handle, 0, 0);
+      mvwin (TUI_CMD_WIN->handle,
+	     TUI_CMD_WIN->origin.y,
+	     TUI_CMD_WIN->origin.x);
+      wmove (win_info->handle, 0, 0);
       break;
     default:
       break;
@@ -1404,7 +1404,7 @@  new_height_ok (struct tui_win_info *primary_win_info,
       int diff;
       enum tui_layout_type cur_layout = tui_current_layout ();
 
-      diff = (new_height - primary_win_info->generic.height) * (-1);
+      diff = (new_height - primary_win_info->height) * (-1);
       if (cur_layout == SRC_COMMAND || cur_layout == DISASSEM_COMMAND)
 	{
 	  ok = (new_height <= primary_win_info->max_height ()
@@ -1418,7 +1418,7 @@  new_height_ok (struct tui_win_info *primary_win_info,
 	      else
 		win_info = TUI_CMD_WIN;
 	      ok = ((new_height +
-		     (win_info->generic.height + diff)) <= tui_term_height ());
+		     (win_info->height + diff)) <= tui_term_height ());
 	    }
 	}
       else
@@ -1442,20 +1442,20 @@  new_height_ok (struct tui_win_info *primary_win_info,
 	     the line that the first and second windows share, and add
 	     one for the locator.  */
 	  total_height = cur_total_height =
-	    (first_win->generic.height + second_win->generic.height - 1)
-	    + TUI_CMD_WIN->generic.height + 1;	/* Locator. */
+	    (first_win->height + second_win->height - 1)
+	    + TUI_CMD_WIN->height + 1;	/* Locator. */
 	  if (primary_win_info == TUI_CMD_WIN)
 	    {
 	      /* Locator included since first & second win share a line.  */
-	      ok = ((first_win->generic.height +
-		     second_win->generic.height + diff) >=
+	      ok = ((first_win->height +
+		     second_win->height + diff) >=
 		    (MIN_WIN_HEIGHT * 2) 
 		    && new_height >= MIN_CMD_WIN_HEIGHT);
 	      if (ok)
 		{
 		  total_height = new_height + 
-		    (first_win->generic.height +
-		     second_win->generic.height + diff);
+		    (first_win->height +
+		     second_win->height + diff);
 		  min_height = MIN_CMD_WIN_HEIGHT;
 		}
 	    }
@@ -1466,25 +1466,25 @@  new_height_ok (struct tui_win_info *primary_win_info,
 	      /* First see if we can increase/decrease the command
 	         window.  And make sure that the command window is at
 	         least 1 line.  */
-	      ok = ((TUI_CMD_WIN->generic.height + diff) > 0);
+	      ok = ((TUI_CMD_WIN->height + diff) > 0);
 	      if (!ok)
 		{ /* Looks like we have to increase/decrease one of
 		     the other windows.  */
 		  if (primary_win_info == first_win)
-		    ok = (second_win->generic.height + diff) >= min_height;
+		    ok = (second_win->height + diff) >= min_height;
 		  else
-		    ok = (first_win->generic.height + diff) >= min_height;
+		    ok = (first_win->height + diff) >= min_height;
 		}
 	      if (ok)
 		{
 		  if (primary_win_info == first_win)
 		    total_height = new_height +
-		      second_win->generic.height +
-		      TUI_CMD_WIN->generic.height + diff;
+		      second_win->height +
+		      TUI_CMD_WIN->height + diff;
 		  else
 		    total_height = new_height +
-		      first_win->generic.height +
-		      TUI_CMD_WIN->generic.height + diff;
+		      first_win->height +
+		      TUI_CMD_WIN->height + diff;
 		}
 	    }
 	  /* Now make sure that the proposed total height doesn't
@@ -1557,7 +1557,7 @@  parse_scrolling_args (const char *arg,
 	  *win_to_scroll = tui_partial_win_by_name (wname);
 
 	  if (*win_to_scroll == NULL
-	      || !(*win_to_scroll)->generic.is_visible)
+	      || !(*win_to_scroll)->is_visible)
 	    error (_("Invalid window specified. \n\
 The window name specified must be valid and visible.\n"));
 	  else if (*win_to_scroll == TUI_CMD_WIN)
diff --git a/gdb/tui/tui-windata.c b/gdb/tui/tui-windata.c
index 1647527e240..739272a5d03 100644
--- a/gdb/tui/tui-windata.c
+++ b/gdb/tui/tui-windata.c
@@ -48,13 +48,13 @@  tui_first_data_item_displayed (void)
   int i;
 
   for (i = 0; 
-       i < TUI_DATA_WIN->generic.content_size && element_no < 0;
+       i < TUI_DATA_WIN->content_size && element_no < 0;
        i++)
     {
       struct tui_gen_win_info *data_item_win;
 
       data_item_win
-	= TUI_DATA_WIN->generic.content[i]->which_element.data_window;
+	= TUI_DATA_WIN->content[i]->which_element.data_window;
       if (data_item_win->handle != NULL
 	  && data_item_win->is_visible)
 	element_no = i;
@@ -72,10 +72,10 @@  tui_delete_data_content_windows (void)
   int i;
   struct tui_gen_win_info *data_item_win_ptr;
 
-  for (i = 0; (i < TUI_DATA_WIN->generic.content_size); i++)
+  for (i = 0; (i < TUI_DATA_WIN->content_size); i++)
     {
       data_item_win_ptr
-	= TUI_DATA_WIN->generic.content[i]->which_element.data_window;
+	= TUI_DATA_WIN->content[i]->which_element.data_window;
       tui_delete_win (data_item_win_ptr->handle);
       data_item_win_ptr->handle = NULL;
       data_item_win_ptr->is_visible = false;
@@ -86,23 +86,23 @@  tui_delete_data_content_windows (void)
 void
 tui_erase_data_content (const char *prompt)
 {
-  werase (TUI_DATA_WIN->generic.handle);
+  werase (TUI_DATA_WIN->handle);
   tui_check_and_display_highlight_if_needed (TUI_DATA_WIN);
   if (prompt != NULL)
     {
-      int half_width = (TUI_DATA_WIN->generic.width - 2) / 2;
+      int half_width = (TUI_DATA_WIN->width - 2) / 2;
       int x_pos;
 
       if (strlen (prompt) >= half_width)
 	x_pos = 1;
       else
 	x_pos = half_width - strlen (prompt);
-      mvwaddstr (TUI_DATA_WIN->generic.handle,
-		 (TUI_DATA_WIN->generic.height / 2),
+      mvwaddstr (TUI_DATA_WIN->handle,
+		 (TUI_DATA_WIN->height / 2),
 		 x_pos,
 		 (char *) prompt);
     }
-  wrefresh (TUI_DATA_WIN->generic.handle);
+  wrefresh (TUI_DATA_WIN->handle);
 }
 
 
@@ -111,7 +111,7 @@  tui_erase_data_content (const char *prompt)
 void
 tui_display_all_data (void)
 {
-  if (TUI_DATA_WIN->generic.content_size <= 0)
+  if (TUI_DATA_WIN->content_size <= 0)
     tui_erase_data_content (NO_DATA_STRING);
   else
     {
@@ -196,7 +196,7 @@  void
 tui_data_window::refresh_all ()
 {
   tui_erase_data_content (NULL);
-  if (generic.content_size > 0)
+  if (content_size > 0)
     {
       int first_element = tui_first_data_item_displayed ();
 
@@ -214,7 +214,7 @@  tui_check_data_values (struct frame_info *frame)
   tui_check_register_values (frame);
 
   /* Now check any other data values that there are.  */
-  if (TUI_DATA_WIN != NULL && TUI_DATA_WIN->generic.is_visible)
+  if (TUI_DATA_WIN != NULL && TUI_DATA_WIN->is_visible)
     {
       int i;
 
diff --git a/gdb/tui/tui-wingeneral.c b/gdb/tui/tui-wingeneral.c
index ccee399057a..06d7ad5a030 100644
--- a/gdb/tui/tui-wingeneral.c
+++ b/gdb/tui/tui-wingeneral.c
@@ -110,10 +110,10 @@  void
 tui_unhighlight_win (struct tui_win_info *win_info)
 {
   if (win_info != NULL 
-      && win_info->generic.handle != NULL)
+      && win_info->handle != NULL)
     {
-      box_win (&win_info->generic, NO_HILITE);
-      wrefresh (win_info->generic.handle);
+      box_win (win_info, NO_HILITE);
+      wrefresh (win_info->handle);
       win_info->set_highlight (false);
     }
 }
@@ -124,10 +124,10 @@  tui_highlight_win (struct tui_win_info *win_info)
 {
   if (win_info != NULL
       && win_info->can_highlight
-      && win_info->generic.handle != NULL)
+      && win_info->handle != NULL)
     {
-      box_win (&win_info->generic, HILITE);
-      wrefresh (win_info->generic.handle);
+      box_win (win_info, HILITE);
+      wrefresh (win_info->handle);
       win_info->set_highlight (true);
     }
 }
@@ -135,7 +135,7 @@  tui_highlight_win (struct tui_win_info *win_info)
 void
 tui_check_and_display_highlight_if_needed (struct tui_win_info *win_info)
 {
-  if (win_info != NULL && win_info->generic.type != CMD_WIN)
+  if (win_info != NULL && win_info->type != CMD_WIN)
     {
       if (win_info->is_highlighted)
 	tui_highlight_win (win_info);
@@ -214,7 +214,7 @@  tui_make_invisible (struct tui_gen_win_info *win_info)
 void
 tui_win_info::make_visible (bool visible)
 {
-  ::make_visible (&generic, visible);
+  ::make_visible (this, visible);
 }
 
 /* See tui-data.h.  */
@@ -259,8 +259,8 @@  tui_make_all_invisible (void)
 void
 tui_win_info::refresh ()
 {
-  touchwin (generic.handle);
-  tui_refresh_win (&generic);
+  touchwin (handle);
+  tui_refresh_win (this);
 }
 
 /* See tui-data.h.  */
@@ -283,7 +283,7 @@  tui_refresh_all (struct tui_win_info **list)
 
   for (type = SRC_WIN; (type < MAX_MAJOR_WINDOWS); type++)
     {
-      if (list[type] && list[type]->generic.is_visible)
+      if (list[type] && list[type]->is_visible)
 	list[type]->refresh ();
     }
   if (locator->is_visible)
diff --git a/gdb/tui/tui-winsource.c b/gdb/tui/tui-winsource.c
index 5946db75aaf..f63526bb446 100644
--- a/gdb/tui/tui-winsource.c
+++ b/gdb/tui/tui-winsource.c
@@ -94,7 +94,7 @@  tui_update_source_window_as_is (struct tui_win_info *win_info,
 {
   enum tui_status ret;
 
-  if (win_info->generic.type == SRC_WIN)
+  if (win_info->type == SRC_WIN)
     ret = tui_set_source_content (s, line_or_addr.u.line_no, noerror);
   else
     ret = tui_set_disassem_content (gdbarch, line_or_addr.u.addr);
@@ -109,12 +109,12 @@  tui_update_source_window_as_is (struct tui_win_info *win_info,
       tui_update_breakpoint_info (win_info, 0);
       tui_show_source_content (win_info);
       tui_update_exec_info (win_info);
-      if (win_info->generic.type == SRC_WIN)
+      if (win_info->type == SRC_WIN)
 	{
 	  symtab_and_line sal;
 
 	  sal.line = line_or_addr.u.line_no +
-	    (win_info->generic.content_size - 2);
+	    (win_info->content_size - 2);
 	  sal.symtab = s;
 	  sal.pspace = SYMTAB_PSPACE (s);
 	  set_current_source_symtab_and_line (sal);
@@ -212,11 +212,11 @@  tui_clear_source_content (struct tui_win_info *win_info,
     {
       int i;
 
-      win_info->generic.content_in_use = FALSE;
+      win_info->content_in_use = FALSE;
       tui_erase_source_content (win_info, display_prompt);
-      for (i = 0; i < win_info->generic.content_size; i++)
+      for (i = 0; i < win_info->content_size; i++)
 	{
-	  struct tui_win_element *element = win_info->generic.content[i];
+	  struct tui_win_element *element = win_info->content[i];
 
 	  element->which_element.source.has_break = FALSE;
 	  element->which_element.source.is_exec_point = FALSE;
@@ -230,17 +230,17 @@  tui_erase_source_content (struct tui_win_info *win_info,
 			  int display_prompt)
 {
   int x_pos;
-  int half_width = (win_info->generic.width - 2) / 2;
+  int half_width = (win_info->width - 2) / 2;
 
-  if (win_info->generic.handle != NULL)
+  if (win_info->handle != NULL)
     {
-      werase (win_info->generic.handle);
+      werase (win_info->handle);
       tui_check_and_display_highlight_if_needed (win_info);
       if (display_prompt == EMPTY_SOURCE_PROMPT)
 	{
 	  const char *no_src_str;
 
-	  if (win_info->generic.type == SRC_WIN)
+	  if (win_info->type == SRC_WIN)
 	    no_src_str = NO_SRC_STRING;
 	  else
 	    no_src_str = NO_DISASSEM_STRING;
@@ -248,8 +248,8 @@  tui_erase_source_content (struct tui_win_info *win_info,
 	    x_pos = 1;
 	  else
 	    x_pos = half_width - strlen (no_src_str);
-	  mvwaddstr (win_info->generic.handle,
-		     (win_info->generic.height / 2),
+	  mvwaddstr (win_info->handle,
+		     (win_info->height / 2),
 		     x_pos,
 		     (char *) no_src_str);
 
@@ -260,7 +260,7 @@  tui_erase_source_content (struct tui_win_info *win_info,
 
 	  tui_set_source_content_nil (win_info, no_src_str);
 	}
-      tui_refresh_win (&win_info->generic);
+      tui_refresh_win (win_info);
     }
 }
 
@@ -272,41 +272,41 @@  tui_show_source_line (struct tui_win_info *win_info, int lineno)
   struct tui_win_element *line;
   int x;
 
-  line = win_info->generic.content[lineno - 1];
+  line = win_info->content[lineno - 1];
   if (line->which_element.source.is_exec_point)
-    tui_set_reverse_mode (win_info->generic.handle, true);
+    tui_set_reverse_mode (win_info->handle, true);
 
-  wmove (win_info->generic.handle, lineno, 1);
+  wmove (win_info->handle, lineno, 1);
   tui_puts (line->which_element.source.line,
-	    win_info->generic.handle);
+	    win_info->handle);
   if (line->which_element.source.is_exec_point)
-    tui_set_reverse_mode (win_info->generic.handle, false);
+    tui_set_reverse_mode (win_info->handle, false);
 
   /* Clear to end of line but stop before the border.  */
-  x = getcurx (win_info->generic.handle);
-  while (x + 1 < win_info->generic.width)
+  x = getcurx (win_info->handle);
+  while (x + 1 < win_info->width)
     {
-      waddch (win_info->generic.handle, ' ');
-      x = getcurx (win_info->generic.handle);
+      waddch (win_info->handle, ' ');
+      x = getcurx (win_info->handle);
     }
 }
 
 void
 tui_show_source_content (struct tui_win_info *win_info)
 {
-  if (win_info->generic.content_size > 0)
+  if (win_info->content_size > 0)
     {
       int lineno;
 
-      for (lineno = 1; lineno <= win_info->generic.content_size; lineno++)
+      for (lineno = 1; lineno <= win_info->content_size; lineno++)
         tui_show_source_line (win_info, lineno);
     }
   else
     tui_erase_source_content (win_info, TRUE);
 
   tui_check_and_display_highlight_if_needed (win_info);
-  tui_refresh_win (&win_info->generic);
-  win_info->generic.content_in_use = TRUE;
+  tui_refresh_win (win_info);
+  win_info->content_in_use = TRUE;
 }
 
 /* See tui-data.h.  */
@@ -316,7 +316,7 @@  tui_source_window_base::refill ()
 {
   symtab *s = nullptr;
 
-  if (generic.type == SRC_WIN)
+  if (type == SRC_WIN)
     {
       symtab_and_line cursal = get_current_source_symtab_and_line ();
       s = (cursal.symtab == NULL
@@ -325,7 +325,7 @@  tui_source_window_base::refill ()
     }
 
   tui_update_source_window_as_is (this, gdbarch, s,
-				  generic.content[0]
+				  content[0]
 				    ->which_element.source.line_or_addr,
 				  FALSE);
 }
@@ -336,7 +336,7 @@  void
 tui_source_window_base::do_scroll_horizontal
   (enum tui_scroll_direction direction, int num_to_scroll)
 {
-  if (generic.content != NULL)
+  if (content != NULL)
     {
       int offset;
 
@@ -362,10 +362,9 @@  tui_source_window_base::set_is_exec_point_at (struct tui_line_or_address l)
 {
   int changed = 0;
   int i;
-  tui_win_content content = generic.content;
 
   i = 0;
-  while (i < generic.content_size)
+  while (i < content_size)
     {
       int new_state;
       struct tui_line_or_address content_loa =
@@ -422,14 +421,14 @@  tui_update_breakpoint_info (struct tui_win_info *win,
   int need_refresh = 0;
   tui_source_window_base *src = (tui_source_window_base *) win;
 
-  for (i = 0; i < win->generic.content_size; i++)
+  for (i = 0; i < win->content_size; i++)
     {
       struct breakpoint *bp;
       extern struct breakpoint *breakpoint_chain;
       int mode;
       struct tui_source_element *line;
 
-      line = &win->generic.content[i]->which_element.source;
+      line = &win->content[i]->which_element.source;
       if (current_only && !line->is_exec_point)
          continue;
 
@@ -496,20 +495,20 @@  tui_set_exec_info_content (struct tui_win_info *win_info)
 
       if (exec_info_ptr->content == NULL)
 	exec_info_ptr->content =
-	  tui_alloc_content (win_info->generic.height, exec_info_ptr->type);
+	  tui_alloc_content (win_info->height, exec_info_ptr->type);
       if (exec_info_ptr->content != NULL)
 	{
 	  int i;
 
           tui_update_breakpoint_info (win_info, 1);
-	  for (i = 0; i < win_info->generic.content_size; i++)
+	  for (i = 0; i < win_info->content_size; i++)
 	    {
 	      struct tui_win_element *element;
 	      struct tui_win_element *src_element;
               int mode;
 
 	      element = exec_info_ptr->content[i];
-	      src_element = win_info->generic.content[i];
+	      src_element = win_info->content[i];
 
               memset(element->which_element.simple_string, ' ',
                      sizeof(element->which_element.simple_string));
@@ -533,7 +532,7 @@  tui_set_exec_info_content (struct tui_win_info *win_info)
               if (src_element->which_element.source.is_exec_point)
                 element->which_element.simple_string[TUI_EXEC_POS] = '>';
 	    }
-	  exec_info_ptr->content_size = win_info->generic.content_size;
+	  exec_info_ptr->content_size = win_info->content_size;
 	}
       else
 	ret = TUI_FAILURE;
@@ -598,16 +597,16 @@  tui_alloc_source_buffer (struct tui_win_info *win_info)
 
   /* The window width/height includes the highlight box.  Determine actual
      content dimensions, including string null-terminators.  */
-  max_lines = win_info->generic.height - 2;
-  line_width = win_info->generic.width - 2 + 1;
+  max_lines = win_info->height - 2;
+  line_width = win_info->width - 2 + 1;
 
   /* Allocate the buffer for the source lines.  */
-  if (win_info->generic.content == NULL)
+  if (win_info->content == NULL)
     {
       /* Allocate the content list.  */
-      win_info->generic.content = tui_alloc_content (max_lines, SRC_WIN);
+      win_info->content = tui_alloc_content (max_lines, SRC_WIN);
       for (i = 0; i < max_lines; i++)
-	win_info->generic.content[i]->which_element.source.line
+	win_info->content[i]->which_element.source.line
 	  = (char *) xmalloc (line_width);
     }
 
@@ -630,13 +629,13 @@  tui_line_is_displayed (int line,
   else
     threshold = 0;
   i = 0;
-  while (i < win_info->generic.content_size - threshold
+  while (i < win_info->content_size - threshold
 	 && !is_displayed)
     {
       is_displayed
-	= win_info->generic.content[i]
+	= win_info->content[i]
 	    ->which_element.source.line_or_addr.loa == LOA_LINE
-	  && win_info->generic.content[i]
+	  && win_info->content[i]
 	       ->which_element.source.line_or_addr.u.line_no == line;
       i++;
     }
@@ -660,13 +659,13 @@  tui_addr_is_displayed (CORE_ADDR addr,
   else
     threshold = 0;
   i = 0;
-  while (i < win_info->generic.content_size - threshold
+  while (i < win_info->content_size - threshold
 	 && !is_displayed)
     {
       is_displayed
-	= win_info->generic.content[i]
+	= win_info->content[i]
 	    ->which_element.source.line_or_addr.loa == LOA_ADDRESS
-	  && win_info->generic.content[i]
+	  && win_info->content[i]
 	       ->which_element.source.line_or_addr.u.addr == addr;
       i++;
     }
diff --git a/gdb/tui/tui.c b/gdb/tui/tui.c
index 55a44e8840e..693c2ff4a03 100644
--- a/gdb/tui/tui.c
+++ b/gdb/tui/tui.c
@@ -236,9 +236,9 @@  tui_rl_other_window (int count, int key)
   if (win_info)
     {
       tui_set_win_focus_to (win_info);
-      if (TUI_DATA_WIN && TUI_DATA_WIN->generic.is_visible)
+      if (TUI_DATA_WIN && TUI_DATA_WIN->is_visible)
 	TUI_DATA_WIN->refresh_all ();
-      keypad (TUI_CMD_WIN->generic.handle, (win_info != TUI_CMD_WIN));
+      keypad (TUI_CMD_WIN->handle, (win_info != TUI_CMD_WIN));
     }
   return 0;
 }
@@ -476,8 +476,8 @@  tui_enable (void)
       tui_show_frame_info (0);
       tui_set_layout (SRC_COMMAND);
       tui_set_win_focus_to (TUI_SRC_WIN);
-      keypad (TUI_CMD_WIN->generic.handle, TRUE);
-      wrefresh (TUI_CMD_WIN->generic.handle);
+      keypad (TUI_CMD_WIN->handle, TRUE);
+      wrefresh (TUI_CMD_WIN->handle);
       tui_finish_init = 0;
     }
   else
@@ -664,7 +664,7 @@  tui_is_window_visible (enum tui_win_type type)
   if (tui_win_list[type] == 0)
     return false;
   
-  return tui_win_list[type]->generic.is_visible;
+  return tui_win_list[type]->is_visible;
 }
 
 int
@@ -676,8 +676,8 @@  tui_get_command_dimension (unsigned int *width,
       return 0;
     }
   
-  *width = TUI_CMD_WIN->generic.width;
-  *height = TUI_CMD_WIN->generic.height;
+  *width = TUI_CMD_WIN->width;
+  *height = TUI_CMD_WIN->height;
   return 1;
 }