[PATCH 00/15] More TUI Refactorings

classic Classic list List threaded Threaded
20 messages Options
Reply | Threaded
Open this post in threaded view
|

[PATCH 00/15] More TUI Refactorings

Tom Tromey-2
Here is another series of TUI refactorings.  There should be no
user-visible changes in this series (patch #1 changes a message, but I
don't believe it can actually be seen).

I tested each one using the gdb.tui tests.  This worked here, though
as we learned recently, at least empty.exp is not very reliable.

There's about one more series of this size waiting to be submitted,
plus one (or maybe two) patches that change the TUI in small
user-visible ways.

Tom


Reply | Threaded
Open this post in threaded view
|

[PATCH 01/15] Remove NO_DATA_STRING

Tom Tromey-2
NO_DATA_STRING shouldn't be used.  It's referenced in a single spot,
in tui_data_window::display_all_data.  This patch removes the use and
replaces it with the more correct text.  A later patch (though not in
this series) will remove this call entirely, when it's more obviously
correct to do so.

gdb/ChangeLog
2019-08-20  Tom Tromey  <[hidden email]>

        * tui/tui-regs.c (tui_data_window::display_all_data): Change
        text.
        * tui/tui-data.h (NO_DATA_STRING): Remove define.
---
 gdb/ChangeLog      | 6 ++++++
 gdb/tui/tui-data.h | 1 -
 gdb/tui/tui-regs.c | 2 +-
 3 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/gdb/tui/tui-data.h b/gdb/tui/tui-data.h
index 6dfea41d49e..698acac338f 100644
--- a/gdb/tui/tui-data.h
+++ b/gdb/tui/tui-data.h
@@ -97,7 +97,6 @@ public:
 
 /* Constant definitions.  */
 #define DEFAULT_TAB_LEN         8
-#define NO_DATA_STRING          "[ No Data Values Displayed ]"
 #define SRC_NAME                "src"
 #define CMD_NAME                "cmd"
 #define DATA_NAME               "regs"
diff --git a/gdb/tui/tui-regs.c b/gdb/tui/tui-regs.c
index 71037d41047..24b182f2aec 100644
--- a/gdb/tui/tui-regs.c
+++ b/gdb/tui/tui-regs.c
@@ -437,7 +437,7 @@ void
 tui_data_window::display_all_data ()
 {
   if (regs_content.empty ())
-    erase_data_content (NO_DATA_STRING);
+    erase_data_content (_("[ Register Values Unavailable ]"));
   else
     {
       erase_data_content (NULL);
--
2.17.2

Reply | Threaded
Open this post in threaded view
|

[PATCH 02/15] Remove tui_data_window::display_all_data

Tom Tromey-2
In reply to this post by Tom Tromey-2
tui_data_window::rerender clears the data item windows, and then calls
display_all_data.  However, that method only does anything if the
contents are not empty.  So, display_all_data can be renamed and the
wrapper removed.

gdb/ChangeLog
2019-08-20  Tom Tromey  <[hidden email]>

        * tui/tui-regs.h (struct tui_data_window) <display_all_data>:
        Don't declare.
        * tui/tui-regs.c (tui_data_window::show_registers): Call
        rerender.
        (tui_data_window::rerender): Rename from display_all_data.
        (tui_data_window::rerender): Remove old implementation.
---
 gdb/ChangeLog      |  9 +++++++++
 gdb/tui/tui-regs.c | 18 ++----------------
 gdb/tui/tui-regs.h |  4 ----
 3 files changed, 11 insertions(+), 20 deletions(-)

diff --git a/gdb/tui/tui-regs.c b/gdb/tui/tui-regs.c
index 24b182f2aec..7bac19da281 100644
--- a/gdb/tui/tui-regs.c
+++ b/gdb/tui/tui-regs.c
@@ -161,7 +161,7 @@ tui_data_window::show_registers (struct reggroup *group)
       for (auto &&data_item_win : regs_content)
  data_item_win.highlight = false;
       current_group = group;
-      display_all_data ();
+      rerender ();
     }
   else
     {
@@ -434,7 +434,7 @@ tui_data_window::erase_data_content (const char *prompt)
 /* See tui-regs.h.  */
 
 void
-tui_data_window::display_all_data ()
+tui_data_window::rerender ()
 {
   if (regs_content.empty ())
     erase_data_content (_("[ Register Values Unavailable ]"));
@@ -500,20 +500,6 @@ tui_data_window::do_scroll_vertical (int num_to_scroll)
 
 /* See tui-regs.h.  */
 
-void
-tui_data_window::rerender ()
-{
-  /* Delete all data item windows.  */
-  for (auto &&win : regs_content)
-    {
-      tui_delete_win (win.handle);
-      win.handle = NULL;
-    }
-  display_all_data ();
-}
-
-/* See tui-regs.h.  */
-
 void
 tui_data_window::refresh_window ()
 {
diff --git a/gdb/tui/tui-regs.h b/gdb/tui/tui-regs.h
index 95e944038c7..fa76cae0b18 100644
--- a/gdb/tui/tui-regs.h
+++ b/gdb/tui/tui-regs.h
@@ -121,10 +121,6 @@ private:
      past the register area (-1) is returned.  */
   int first_reg_element_no_inline (int line_no) const;
 
-  /* Displays the data that is in the data window's content.  It does
-     not set the content.  */
-  void display_all_data ();
-
   /* Delete all the item windows in the data window.  This is usually
      done when the data window is scrolled.  */
   void delete_data_content_windows ();
--
2.17.2

Reply | Threaded
Open this post in threaded view
|

[PATCH 03/15] Remove some checks of .empty()

Tom Tromey-2
In reply to this post by Tom Tromey-2
A few methods in tui_data_window check whether the contents are empty;
but all the callers already check this, so these calls can be removed.

gdb/ChangeLog
2019-08-20  Tom Tromey  <[hidden email]>

        * tui/tui-regs.c (tui_data_window::last_regs_line_no)
        (tui_data_window::display_registers_from)
        (tui_data_window::display_reg_element_at_line)
        (tui_data_window::display_registers_from_line): Remove checks of
        "empty".
---
 gdb/ChangeLog      |   8 ++
 gdb/tui/tui-regs.c | 207 +++++++++++++++++++++------------------------
 2 files changed, 104 insertions(+), 111 deletions(-)

diff --git a/gdb/tui/tui-regs.c b/gdb/tui/tui-regs.c
index 7bac19da281..636ae101483 100644
--- a/gdb/tui/tui-regs.c
+++ b/gdb/tui/tui-regs.c
@@ -98,14 +98,9 @@ tui_get_register (struct frame_info *frame,
 int
 tui_data_window::last_regs_line_no () const
 {
-  int num_lines = (-1);
-
-  if (!regs_content.empty ())
-    {
-      num_lines = regs_content.size () / regs_column_count;
-      if (regs_content.size () % regs_column_count)
- num_lines++;
-    }
+  int num_lines = regs_content.size () / regs_column_count;
+  if (regs_content.size () % regs_column_count)
+    num_lines++;
   return num_lines;
 }
 
@@ -245,74 +240,71 @@ tui_data_window::show_register_group (struct reggroup *group,
 void
 tui_data_window::display_registers_from (int start_element_no)
 {
-  if (!regs_content.empty ())
+  int j, item_win_width, cur_y;
+
+  int max_len = 0;
+  for (auto &&data_item_win : regs_content)
     {
-      int j, item_win_width, cur_y;
+      const char *p;
+      int len;
 
-      int max_len = 0;
-      for (auto &&data_item_win : regs_content)
-        {
-          const char *p;
-          int len;
-
-          len = 0;
-          p = data_item_win.content.get ();
-          if (p != 0)
-    len = strlen (p);
-
-          if (len > max_len)
-            max_len = len;
-        }
-      item_win_width = max_len + 1;
-      int i = start_element_no;
-
-      regs_column_count = (width - 2) / item_win_width;
-      if (regs_column_count == 0)
-        regs_column_count = 1;
-      item_win_width = (width - 2) / regs_column_count;
-
-      /* Now create each data "sub" window, and write the display into
- it.  */
-      cur_y = 1;
-      while (i < regs_content.size ()
-     && cur_y <= viewport_height)
+      len = 0;
+      p = data_item_win.content.get ();
+      if (p != 0)
+ len = strlen (p);
+
+      if (len > max_len)
+ max_len = len;
+    }
+  item_win_width = max_len + 1;
+  int i = start_element_no;
+
+  regs_column_count = (width - 2) / item_win_width;
+  if (regs_column_count == 0)
+    regs_column_count = 1;
+  item_win_width = (width - 2) / regs_column_count;
+
+  /* Now create each data "sub" window, and write the display into
+     it.  */
+  cur_y = 1;
+  while (i < regs_content.size ()
+ && cur_y <= viewport_height)
+    {
+      for (j = 0;
+   j < regs_column_count && i < regs_content.size ();
+   j++)
  {
-  for (j = 0;
-       j < regs_column_count && i < regs_content.size ();
-       j++)
+  struct tui_data_item_window *data_item_win;
+
+  /* Create the window if necessary.  */
+  data_item_win = &regs_content[i];
+  if (data_item_win->handle != NULL
+      && (data_item_win->height != 1
+  || data_item_win->width != item_win_width
+  || data_item_win->origin.x != (item_win_width * j) + 1
+  || data_item_win->origin.y != cur_y))
     {
-      struct tui_data_item_window *data_item_win;
-
-      /* Create the window if necessary.  */
-      data_item_win = &regs_content[i];
-              if (data_item_win->handle != NULL
-                  && (data_item_win->height != 1
-                      || data_item_win->width != item_win_width
-                      || data_item_win->origin.x != (item_win_width * j) + 1
-                      || data_item_win->origin.y != cur_y))
-                {
-                  tui_delete_win (data_item_win->handle);
-                  data_item_win->handle = 0;
-                }
+      tui_delete_win (data_item_win->handle);
+      data_item_win->handle = 0;
+    }
                   
-      if (data_item_win->handle == NULL)
- {
-  data_item_win->height = 1;
-  data_item_win->width = item_win_width;
-  data_item_win->origin.x = (item_win_width * j) + 1;
-  data_item_win->origin.y = cur_y;
-  data_item_win->make_visible (true);
-                  scrollok (data_item_win->handle, FALSE);
- }
-              touchwin (data_item_win->handle);
-
-      /* Get the printable representation of the register
-                 and display it.  */
-              tui_display_register (data_item_win);
-      i++; /* Next register.  */
+  if (data_item_win->handle == NULL)
+    {
+      data_item_win->height = 1;
+      data_item_win->width = item_win_width;
+      data_item_win->origin.x = (item_win_width * j) + 1;
+      data_item_win->origin.y = cur_y;
+      data_item_win->make_visible (true);
+      scrollok (data_item_win->handle, FALSE);
     }
-  cur_y++; /* Next row.  */
+  touchwin (data_item_win->handle);
+
+  /* Get the printable representation of the register
+     and display it.  */
+  tui_display_register (data_item_win);
+  i++; /* Next register.  */
  }
+      cur_y++; /* Next row.  */
     }
 }
 
@@ -322,27 +314,24 @@ void
 tui_data_window::display_reg_element_at_line (int start_element_no,
       int start_line_no)
 {
-  if (!regs_content.empty ())
-    {
-      int element_no = start_element_no;
+  int element_no = start_element_no;
 
-      if (start_element_no != 0 && start_line_no != 0)
- {
-  int last_line_no, first_line_on_last_page;
-
-  last_line_no = last_regs_line_no ();
-  first_line_on_last_page = last_line_no - (height - 2);
-  if (first_line_on_last_page < 0)
-    first_line_on_last_page = 0;
-
-  /* If the element_no causes us to scroll past the end of the
-     registers, adjust what element to really start the
-     display at.  */
-  if (start_line_no > first_line_on_last_page)
-    element_no = first_reg_element_no_inline (first_line_on_last_page);
- }
-      display_registers_from (element_no);
+  if (start_element_no != 0 && start_line_no != 0)
+    {
+      int last_line_no, first_line_on_last_page;
+
+      last_line_no = last_regs_line_no ();
+      first_line_on_last_page = last_line_no - (height - 2);
+      if (first_line_on_last_page < 0)
+ first_line_on_last_page = 0;
+
+      /* If the element_no causes us to scroll past the end of the
+ registers, adjust what element to really start the
+ display at.  */
+      if (start_line_no > first_line_on_last_page)
+ element_no = first_reg_element_no_inline (first_line_on_last_page);
     }
+  display_registers_from (element_no);
 }
 
 /* See tui-regs.h.  */
@@ -351,34 +340,30 @@ int
 tui_data_window::display_registers_from_line (int line_no)
 {
   check_and_display_highlight_if_needed ();
-  if (!regs_content.empty ())
-    {
-      int element_no;
 
-      if (line_no < 0)
- line_no = 0;
-      else
+  int element_no;
+
+  if (line_no < 0)
+    line_no = 0;
+  else
+    {
+      /* Make sure that we don't display off the end of the
+ registers.  */
+      if (line_no >= last_regs_line_no ())
  {
-  /* Make sure that we don't display off the end of the
-     registers.  */
-  if (line_no >= last_regs_line_no ())
-    {
-      line_no = line_from_reg_element_no (regs_content.size () - 1);
-      if (line_no < 0)
- line_no = 0;
-    }
+  line_no = line_from_reg_element_no (regs_content.size () - 1);
+  if (line_no < 0)
+    line_no = 0;
  }
-
-      element_no = first_reg_element_no_inline (line_no);
-      if (element_no < regs_content.size ())
- display_reg_element_at_line (element_no, line_no);
-      else
- line_no = (-1);
-
-      return line_no;
     }
 
-  return (-1); /* Nothing was displayed.  */
+  element_no = first_reg_element_no_inline (line_no);
+  if (element_no < regs_content.size ())
+    display_reg_element_at_line (element_no, line_no);
+  else
+    line_no = (-1);
+
+  return line_no;
 }
 
 
--
2.17.2

Reply | Threaded
Open this post in threaded view
|

[PATCH 04/15] Remove some calls in tui_data_window

Tom Tromey-2
In reply to this post by Tom Tromey-2
This patch removes a call to erase_data_content in refresh_all and
then removes some other calls that are more clearly unnecessary once
one follows calls from that point.

gdb/ChangeLog
2019-08-20  Tom Tromey  <[hidden email]>

        * tui/tui-regs.c (tui_data_window::display_registers_from_line)
        (tui_data_window::rerender): Don't call
        check_and_display_highlight_if_needed.
        (tui_data_window::refresh_all): Remove call to
        erase_data_content.
---
 gdb/ChangeLog      | 8 ++++++++
 gdb/tui/tui-regs.c | 8 +-------
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/gdb/tui/tui-regs.c b/gdb/tui/tui-regs.c
index 636ae101483..4a09a590446 100644
--- a/gdb/tui/tui-regs.c
+++ b/gdb/tui/tui-regs.c
@@ -339,8 +339,6 @@ tui_data_window::display_reg_element_at_line (int start_element_no,
 int
 tui_data_window::display_registers_from_line (int line_no)
 {
-  check_and_display_highlight_if_needed ();
-
   int element_no;
 
   if (line_no < 0)
@@ -427,7 +425,6 @@ tui_data_window::rerender ()
     {
       erase_data_content (NULL);
       delete_data_content_windows ();
-      check_and_display_highlight_if_needed ();
       display_registers_from (0);
     }
 }
@@ -450,10 +447,7 @@ tui_data_window::refresh_all ()
     first_line = line_from_reg_element_no (first_element);
 
   if (first_line >= 0)
-    {
-      erase_data_content (NULL);
-      display_registers_from_line (first_line);
-    }
+    display_registers_from_line (first_line);
  }
     }
 }
--
2.17.2

Reply | Threaded
Open this post in threaded view
|

[PATCH 05/15] Private data members in tui_data_window

Tom Tromey-2
In reply to this post by Tom Tromey-2
This changes tui_data_window so that the data members are private.
This required the addition of a simple accessor method in one case.

gdb/ChangeLog
2019-08-20  Tom Tromey  <[hidden email]>

        * tui/tui-regs.h (struct tui_data_window) <regs_content,
        regs_column_count, current_group>: Move later.  Now private.
        <get_current_group>: New method.
        * tui/tui-regs.c (tui_reg_command): Update.
        * tui/tui-layout.c (tui_set_layout): Update.
---
 gdb/ChangeLog        |  8 ++++++++
 gdb/tui/tui-layout.c |  2 +-
 gdb/tui/tui-regs.c   |  2 +-
 gdb/tui/tui-regs.h   | 15 ++++++++++-----
 4 files changed, 20 insertions(+), 7 deletions(-)

diff --git a/gdb/tui/tui-layout.c b/gdb/tui/tui-layout.c
index 01d50e437e5..387a4f51aff 100644
--- a/gdb/tui/tui-layout.c
+++ b/gdb/tui/tui-layout.c
@@ -189,7 +189,7 @@ tui_set_layout (enum tui_layout_type layout_type)
       tui_update_source_windows_with_addr (gdbarch, addr);
       if (new_layout == SRC_DATA_COMMAND
   || new_layout == DISASSEM_DATA_COMMAND)
- TUI_DATA_WIN->show_registers (TUI_DATA_WIN->current_group);
+ TUI_DATA_WIN->show_registers (TUI_DATA_WIN->get_current_group ());
     }
 }
 
diff --git a/gdb/tui/tui-regs.c b/gdb/tui/tui-regs.c
index 4a09a590446..98096e2cdc4 100644
--- a/gdb/tui/tui-regs.c
+++ b/gdb/tui/tui-regs.c
@@ -622,7 +622,7 @@ tui_reg_command (const char *args, int from_tty)
       if (TUI_DATA_WIN == NULL || !TUI_DATA_WIN->is_visible ())
  tui_reg_layout ();
 
-      struct reggroup *current_group = TUI_DATA_WIN->current_group;
+      struct reggroup *current_group = TUI_DATA_WIN->get_current_group ();
       if (strncmp (args, "next", len) == 0)
  match = tui_reg_next (current_group, gdbarch);
       else if (strncmp (args, "prev", len) == 0)
diff --git a/gdb/tui/tui-regs.h b/gdb/tui/tui-regs.h
index fa76cae0b18..2606c39f5a1 100644
--- a/gdb/tui/tui-regs.h
+++ b/gdb/tui/tui-regs.h
@@ -63,15 +63,15 @@ struct tui_data_window : public tui_win_info
     return DATA_NAME;
   }
 
-  /* Windows that are used to display registers.  */
-  std::vector<tui_data_item_window> regs_content;
-  int regs_column_count = 0;
-  struct reggroup *current_group = nullptr;
-
   void check_register_values (struct frame_info *frame);
 
   void show_registers (struct reggroup *group);
 
+  struct reggroup *get_current_group () const
+  {
+    return current_group;
+  }
+
 protected:
 
   void do_scroll_vertical (int num_to_scroll) override;
@@ -126,6 +126,11 @@ private:
   void delete_data_content_windows ();
 
   void erase_data_content (const char *prompt);
+
+  /* Windows that are used to display registers.  */
+  std::vector<tui_data_item_window> regs_content;
+  int regs_column_count = 0;
+  struct reggroup *current_group = nullptr;
 };
 
 #endif /* TUI_TUI_REGS_H */
--
2.17.2

Reply | Threaded
Open this post in threaded view
|

[PATCH 06/15] Simplify register display

Tom Tromey-2
In reply to this post by Tom Tromey-2
This patch starts with the observation that the code in
tui_data_window::display_registers_from can all be replaced with a
call to resize.  To make this work propertly, it also changes
tui_display_register to be the "rerender" method on
tui_data_item_window.

The refresh_window method is needed due to the use of nested windows
here.  The ncurses man page makes it sound like this is not very well
supported; and experience bears this out: negelecting the touchwin
call in this path will cause the register window to blank when
switching focus.

gdb/ChangeLog
2019-08-20  Tom Tromey  <[hidden email]>

        * tui/tui-regs.h (struct tui_data_item_window) <rerender,
        refresh_window>: Declare.
        * tui/tui-regs.c (tui_data_window::display_registers_from): Call
        resize.
        (tui_data_item_window::rerender): Rename from
        tui_display_register.
        (tui_data_item_window::refresh_window): New method.
        * tui/tui-layout.c (tui_gen_win_info::resize): Do nothing on
        no-op.
---
 gdb/ChangeLog        |  12 ++++++
 gdb/tui/tui-layout.c |   5 +++
 gdb/tui/tui-regs.c   | 100 ++++++++++++++++++-------------------------
 gdb/tui/tui-regs.h   |   4 ++
 4 files changed, 63 insertions(+), 58 deletions(-)

diff --git a/gdb/tui/tui-layout.c b/gdb/tui/tui-layout.c
index 387a4f51aff..7ec704e52f0 100644
--- a/gdb/tui/tui-layout.c
+++ b/gdb/tui/tui-layout.c
@@ -580,6 +580,11 @@ void
 tui_gen_win_info::resize (int height_, int width_,
   int origin_x_, int origin_y_)
 {
+  if (width == width_ && height == height_
+      && origin.x == origin_x_ && origin.y == origin_y_
+      && handle != nullptr)
+    return;
+
   width = width_;
   height = height_;
   if (height > 1)
diff --git a/gdb/tui/tui-regs.c b/gdb/tui/tui-regs.c
index 98096e2cdc4..f62ba065ebe 100644
--- a/gdb/tui/tui-regs.c
+++ b/gdb/tui/tui-regs.c
@@ -42,8 +42,6 @@
 
 #include "gdb_curses.h"
 
-static void tui_display_register (struct tui_data_item_window *data);
-
 /* Get the register from the frame and return a printable
    representation of it.  */
 
@@ -274,34 +272,9 @@ tui_data_window::display_registers_from (int start_element_no)
    j < regs_column_count && i < regs_content.size ();
    j++)
  {
-  struct tui_data_item_window *data_item_win;
-
   /* Create the window if necessary.  */
-  data_item_win = &regs_content[i];
-  if (data_item_win->handle != NULL
-      && (data_item_win->height != 1
-  || data_item_win->width != item_win_width
-  || data_item_win->origin.x != (item_win_width * j) + 1
-  || data_item_win->origin.y != cur_y))
-    {
-      tui_delete_win (data_item_win->handle);
-      data_item_win->handle = 0;
-    }
-                  
-  if (data_item_win->handle == NULL)
-    {
-      data_item_win->height = 1;
-      data_item_win->width = item_win_width;
-      data_item_win->origin.x = (item_win_width * j) + 1;
-      data_item_win->origin.y = cur_y;
-      data_item_win->make_visible (true);
-      scrollok (data_item_win->handle, FALSE);
-    }
-  touchwin (data_item_win->handle);
-
-  /* Get the printable representation of the register
-     and display it.  */
-  tui_display_register (data_item_win);
+  regs_content[i].resize (1, item_win_width,
+  (item_win_width * j) + 1, cur_y);
   i++; /* Next register.  */
  }
       cur_y++; /* Next row.  */
@@ -508,43 +481,54 @@ tui_data_window::check_register_values (struct frame_info *frame)
     &data_item_win.highlight);
 
   if (data_item_win.highlight || was_hilighted)
-    tui_display_register (&data_item_win);
+    data_item_win.rerender ();
  }
     }
 }
 
 /* Display a register in a window.  If hilite is TRUE, then the value
    will be displayed in reverse video.  */
-static void
-tui_display_register (struct tui_data_item_window *data)
+void
+tui_data_item_window::rerender ()
 {
-  if (data->handle != NULL)
-    {
-      int i;
-
-      if (data->highlight)
- /* We ignore the return value, casting it to void in order to avoid
-   a compiler warning.  The warning itself was introduced by a patch
-   to ncurses 5.7 dated 2009-08-29, changing this macro to expand
-   to code that causes the compiler to generate an unused-value
-   warning.  */
- (void) wstandout (data->handle);
+  int i;
+
+  scrollok (handle, FALSE);
+  if (highlight)
+    /* We ignore the return value, casting it to void in order to avoid
+       a compiler warning.  The warning itself was introduced by a patch
+       to ncurses 5.7 dated 2009-08-29, changing this macro to expand
+       to code that causes the compiler to generate an unused-value
+       warning.  */
+    (void) wstandout (handle);
       
-      wmove (data->handle, 0, 0);
-      for (i = 1; i < data->width; i++)
-        waddch (data->handle, ' ');
-      wmove (data->handle, 0, 0);
-      if (data->content)
-        waddstr (data->handle, data->content.get ());
-
-      if (data->highlight)
- /* We ignore the return value, casting it to void in order to avoid
-   a compiler warning.  The warning itself was introduced by a patch
-   to ncurses 5.7 dated 2009-08-29, changing this macro to expand
-   to code that causes the compiler to generate an unused-value
-   warning.  */
- (void) wstandend (data->handle);
-      data->refresh_window ();
+  wmove (handle, 0, 0);
+  for (i = 1; i < width; i++)
+    waddch (handle, ' ');
+  wmove (handle, 0, 0);
+  if (content)
+    waddstr (handle, content.get ());
+
+  if (highlight)
+    /* We ignore the return value, casting it to void in order to avoid
+       a compiler warning.  The warning itself was introduced by a patch
+       to ncurses 5.7 dated 2009-08-29, changing this macro to expand
+       to code that causes the compiler to generate an unused-value
+       warning.  */
+    (void) wstandend (handle);
+  refresh_window ();
+}
+
+void
+tui_data_item_window::refresh_window ()
+{
+  if (handle != nullptr)
+    {
+      /* This seems to be needed because the data items are nested
+ windows, which according to the ncurses man pages aren't well
+ supported.  */
+      touchwin (handle);
+      wrefresh (handle);
     }
 }
 
diff --git a/gdb/tui/tui-regs.h b/gdb/tui/tui-regs.h
index 2606c39f5a1..1f9fa73f1cc 100644
--- a/gdb/tui/tui-regs.h
+++ b/gdb/tui/tui-regs.h
@@ -37,6 +37,10 @@ struct tui_data_item_window : public tui_gen_win_info
 
   tui_data_item_window (tui_data_item_window &&) = default;
 
+  void rerender () override;
+
+  void refresh_window () override;
+
   const char *name = nullptr;
   /* The register number, or data display number.  */
   int item_no = -1;
--
2.17.2

Reply | Threaded
Open this post in threaded view
|

[PATCH 07/15] Remove NULL checks from box_win

Tom Tromey-2
In reply to this post by Tom Tromey-2
box_win can't be called with a NULL window, or with an invisible
window.  So, the NULL checks in that function can be removed.

gdb/ChangeLog
2019-08-20  Tom Tromey  <[hidden email]>

        * tui/tui-wingeneral.c (box_win): Assume win_info and
        win_info->handle cannot be NULL.
---
 gdb/ChangeLog            |  5 +++++
 gdb/tui/tui-wingeneral.c | 35 ++++++++++++++++-------------------
 2 files changed, 21 insertions(+), 19 deletions(-)

diff --git a/gdb/tui/tui-wingeneral.c b/gdb/tui/tui-wingeneral.c
index ab0363f856c..01f288be862 100644
--- a/gdb/tui/tui-wingeneral.c
+++ b/gdb/tui/tui-wingeneral.c
@@ -58,30 +58,27 @@ static void
 box_win (struct tui_win_info *win_info,
  bool highlight_flag)
 {
-  if (win_info && win_info->handle)
-    {
-      WINDOW *win;
-      int attrs;
+  WINDOW *win;
+  int attrs;
 
-      win = win_info->handle;
-      if (highlight_flag)
-        attrs = tui_active_border_attrs;
-      else
-        attrs = tui_border_attrs;
+  win = win_info->handle;
+  if (highlight_flag)
+    attrs = tui_active_border_attrs;
+  else
+    attrs = tui_border_attrs;
 
-      wattron (win, attrs);
+  wattron (win, attrs);
 #ifdef HAVE_WBORDER
-      wborder (win, tui_border_vline, tui_border_vline,
-               tui_border_hline, tui_border_hline,
-               tui_border_ulcorner, tui_border_urcorner,
-               tui_border_llcorner, tui_border_lrcorner);
+  wborder (win, tui_border_vline, tui_border_vline,
+   tui_border_hline, tui_border_hline,
+   tui_border_ulcorner, tui_border_urcorner,
+   tui_border_llcorner, tui_border_lrcorner);
 #else
-      box (win, tui_border_vline, tui_border_hline);
+  box (win, tui_border_vline, tui_border_hline);
 #endif
-      if (!win_info->title.empty ())
-        mvwaddstr (win, 0, 3, win_info->title.c_str ());
-      wattroff (win, attrs);
-    }
+  if (!win_info->title.empty ())
+    mvwaddstr (win, 0, 3, win_info->title.c_str ());
+  wattroff (win, attrs);
 }
 
 
--
2.17.2

Reply | Threaded
Open this post in threaded view
|

[PATCH 08/15] Don't call touchwin in tui_gen_win_info::refresh_window

Tom Tromey-2
In reply to this post by Tom Tromey-2
The call to touchwin in tui_gen_win_info::refresh_window was an
artifact of some earlier refactorings.  Testing shows it isn't needed
any more -- I believe it was only ever needed for the data item window
display problem; but that's been solved more locally.

gdb/ChangeLog
2019-08-20  Tom Tromey  <[hidden email]>

        * tui/tui-wingeneral.c (tui_gen_win_info::refresh_window): Don't
        call touchwin.
---
 gdb/ChangeLog            | 5 +++++
 gdb/tui/tui-wingeneral.c | 5 +----
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/gdb/tui/tui-wingeneral.c b/gdb/tui/tui-wingeneral.c
index 01f288be862..f900eab0133 100644
--- a/gdb/tui/tui-wingeneral.c
+++ b/gdb/tui/tui-wingeneral.c
@@ -38,10 +38,7 @@ void
 tui_gen_win_info::refresh_window ()
 {
   if (handle != NULL)
-    {
-      touchwin (handle);
-      wrefresh (handle);
-    }
+    wrefresh (handle);
 }
 
 /* Function to delete the curses window, checking for NULL.  */
--
2.17.2

Reply | Threaded
Open this post in threaded view
|

[PATCH 09/15] Don't call tui_refresh_all from show_layout

Tom Tromey-2
In reply to this post by Tom Tromey-2
show_layout calls tui_refresh_all in one case.  However, it doesn't
need to any more, because the resize method on each window will also
update the contents.

gdb/ChangeLog
2019-08-20  Tom Tromey  <[hidden email]>

        * tui/tui-layout.c (show_layout): Don't call tui_refresh_all.
---
 gdb/ChangeLog        | 4 ++++
 gdb/tui/tui-layout.c | 1 -
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/gdb/tui/tui-layout.c b/gdb/tui/tui-layout.c
index 7ec704e52f0..df7056ae97b 100644
--- a/gdb/tui/tui-layout.c
+++ b/gdb/tui/tui-layout.c
@@ -82,7 +82,6 @@ show_layout (enum tui_layout_type layout)
  case SRC_DATA_COMMAND:
  case DISASSEM_DATA_COMMAND:
   show_data (layout);
-  tui_refresh_all ();
   break;
   /* Now show the new layout.  */
  case SRC_COMMAND:
--
2.17.2

Reply | Threaded
Open this post in threaded view
|

[PATCH 10/15] Turn two locator functions into methods

Tom Tromey-2
In reply to this post by Tom Tromey-2
This changes tui_set_locator_fullname and tui_set_locator_info to be
methods on tui_locator_window.  This enables some subsequent
cleannups.

gdb/ChangeLog
2019-08-20  Tom Tromey  <[hidden email]>

        * tui/tui-stack.h (struct tui_locator_window) <set_locator_info,
        set_locator_fullname>: New methods.
        * tui/tui-stack.c (tui_locator_window::set_locator_fullname):
        Rename from tui_set_locator_fullname.
        (tui_locator_window::set_locator_info): Rename from
        tui_set_locator_info.  Return bool.
        (tui_update_locator_fullname, tui_show_frame_info): Update.
---
 gdb/ChangeLog       | 10 ++++++
 gdb/tui/tui-stack.c | 84 ++++++++++++++++++++-------------------------
 gdb/tui/tui-stack.h | 12 +++++++
 3 files changed, 59 insertions(+), 47 deletions(-)

diff --git a/gdb/tui/tui-stack.c b/gdb/tui/tui-stack.c
index 0d411331bba..a4adf36365e 100644
--- a/gdb/tui/tui-stack.c
+++ b/gdb/tui/tui-stack.c
@@ -58,15 +58,6 @@ static struct tui_locator_window _locator;
    Returns a pointer to a static area holding the result.  */
 static char *tui_get_function_from_frame (struct frame_info *fi);
 
-/* Set the full_name portion of the locator.  */
-static void tui_set_locator_fullname (const char *fullname);
-
-/* Update the locator, with the provided arguments.  */
-static int tui_set_locator_info (struct gdbarch *gdbarch,
- const char *fullname,
- const char *procname,
-                                 int lineno, CORE_ADDR addr);
-
 static void tui_update_command (const char *, int);
 
 
@@ -295,9 +286,10 @@ tui_locator_window::rerender ()
   tui_show_locator_content ();
 }
 
-/* Set the filename portion of the locator.  */
-static void
-tui_set_locator_fullname (const char *fullname)
+/* See tui-stack.h.  */
+
+void
+tui_locator_window::set_locator_fullname (const char *fullname)
 {
   struct tui_locator_window *locator = tui_locator_win_info_ptr ();
 
@@ -305,20 +297,16 @@ tui_set_locator_fullname (const char *fullname)
   strcat_to_buf (locator->full_name, MAX_LOCATOR_ELEMENT_LEN, fullname);
 }
 
-/* Update the locator, with the provided arguments.
+/* See tui-stack.h.  */
 
-   Returns 1 if any of the locator's fields were actually changed,
-   and 0 otherwise.  */
-
-static int
-tui_set_locator_info (struct gdbarch *gdbarch,
-      const char *fullname,
-      const char *procname,
-      int lineno,
-                      CORE_ADDR addr)
+bool
+tui_locator_window::set_locator_info (struct gdbarch *gdbarch_in,
+      const char *fullname,
+      const char *procname,
+      int lineno,
+      CORE_ADDR addr_in)
 {
-  struct tui_locator_window *locator = tui_locator_win_info_ptr ();
-  int locator_changed_p = 0;
+  bool locator_changed_p = false;
 
   if (procname == NULL)
     procname = "";
@@ -326,20 +314,20 @@ tui_set_locator_info (struct gdbarch *gdbarch,
   if (fullname == NULL)
     fullname = "";
 
-  locator_changed_p |= strncmp (locator->proc_name, procname,
+  locator_changed_p |= strncmp (proc_name, procname,
  MAX_LOCATOR_ELEMENT_LEN) != 0;
-  locator_changed_p |= lineno != locator->line_no;
-  locator_changed_p |= addr != locator->addr;
-  locator_changed_p |= gdbarch != locator->gdbarch;
-  locator_changed_p |= strncmp (locator->full_name, fullname,
+  locator_changed_p |= lineno != line_no;
+  locator_changed_p |= addr_in != addr;
+  locator_changed_p |= gdbarch_in != gdbarch;
+  locator_changed_p |= strncmp (full_name, fullname,
  MAX_LOCATOR_ELEMENT_LEN) != 0;
 
-  locator->proc_name[0] = (char) 0;
-  strcat_to_buf (locator->proc_name, MAX_LOCATOR_ELEMENT_LEN, procname);
-  locator->line_no = lineno;
-  locator->addr = addr;
-  locator->gdbarch = gdbarch;
-  tui_set_locator_fullname (fullname);
+  proc_name[0] = (char) 0;
+  strcat_to_buf (proc_name, MAX_LOCATOR_ELEMENT_LEN, procname);
+  line_no = lineno;
+  addr = addr_in;
+  gdbarch = gdbarch_in;
+  set_locator_fullname (fullname);
 
   return locator_changed_p;
 }
@@ -348,7 +336,9 @@ tui_set_locator_info (struct gdbarch *gdbarch,
 void
 tui_update_locator_fullname (const char *fullname)
 {
-  tui_set_locator_fullname (fullname);
+  struct tui_locator_window *locator = tui_locator_win_info_ptr ();
+
+  locator->set_locator_fullname (fullname);
   tui_show_locator_content ();
 }
 
@@ -361,11 +351,11 @@ tui_update_locator_fullname (const char *fullname)
 int
 tui_show_frame_info (struct frame_info *fi)
 {
-  int locator_changed_p;
+  bool locator_changed_p;
+  struct tui_locator_window *locator = tui_locator_win_info_ptr ();
 
   if (fi)
     {
-      struct tui_locator_window *locator = tui_locator_win_info_ptr ();
       CORE_ADDR pc;
 
       symtab_and_line sal = find_frame_sal (fi);
@@ -376,16 +366,16 @@ tui_show_frame_info (struct frame_info *fi)
 
       if (get_frame_pc_if_available (fi, &pc))
  locator_changed_p
-  = tui_set_locator_info (get_frame_arch (fi),
-  (sal.symtab == 0
-   ? "??" : fullname),
-  tui_get_function_from_frame (fi),
-  sal.line,
-  pc);
+  = locator->set_locator_info (get_frame_arch (fi),
+       (sal.symtab == 0
+ ? "??" : fullname),
+       tui_get_function_from_frame (fi),
+       sal.line,
+       pc);
       else
  locator_changed_p
-  = tui_set_locator_info (get_frame_arch (fi),
-  "??", _("<unavailable>"), sal.line, 0);
+  = locator->set_locator_info (get_frame_arch (fi),
+       "??", _("<unavailable>"), sal.line, 0);
 
       /* If the locator information has not changed, then frame information has
  not changed.  If frame information has not changed, then the windows'
@@ -405,7 +395,7 @@ tui_show_frame_info (struct frame_info *fi)
   else
     {
       locator_changed_p
- = tui_set_locator_info (NULL, NULL, NULL, 0, (CORE_ADDR) 0);
+ = locator->set_locator_info (NULL, NULL, NULL, 0, (CORE_ADDR) 0);
 
       if (!locator_changed_p)
  return 0;
diff --git a/gdb/tui/tui-stack.h b/gdb/tui/tui-stack.h
index 951cf2c407b..86239b0d284 100644
--- a/gdb/tui/tui-stack.h
+++ b/gdb/tui/tui-stack.h
@@ -45,6 +45,18 @@ struct tui_locator_window : public tui_gen_win_info
 
   void rerender () override;
 
+  /* Update the locator, with the provided arguments.
+
+     Returns true if any of the locator's fields were actually
+     changed, and false otherwise.  */
+  bool set_locator_info (struct gdbarch *gdbarch,
+ const char *fullname,
+ const char *procname,
+ int lineno, CORE_ADDR addr);
+
+  /* Set the full_name portion of the locator.  */
+  void set_locator_fullname (const char *fullname);
+
   char full_name[MAX_LOCATOR_ELEMENT_LEN];
   char proc_name[MAX_LOCATOR_ELEMENT_LEN];
   int line_no = 0;
--
2.17.2

Reply | Threaded
Open this post in threaded view
|

[PATCH 11/15] Swap tui_show_locator_content and tui_locator_window::rerender

Tom Tromey-2
In reply to this post by Tom Tromey-2
This swaps the bodies ot tui_show_locator_content and
tui_locator_window::rerender, so that the latter does the work, and
the former is now just an exported convenience wrapper.

gdb/ChangeLog
2019-08-20  Tom Tromey  <[hidden email]>

        * tui/tui-stack.c (tui_show_locator_content): Move lower.  Rewrite.
        (tui_locator_window::rerender): Rewrite using body of previous
        tui_show_locator_content.
---
 gdb/ChangeLog       |  6 ++++++
 gdb/tui/tui-stack.c | 38 +++++++++++++++++---------------------
 2 files changed, 23 insertions(+), 21 deletions(-)

diff --git a/gdb/tui/tui-stack.c b/gdb/tui/tui-stack.c
index a4adf36365e..48062fed712 100644
--- a/gdb/tui/tui-stack.c
+++ b/gdb/tui/tui-stack.c
@@ -254,38 +254,27 @@ tui_get_function_from_frame (struct frame_info *fi)
 }
 
 void
-tui_show_locator_content (void)
+tui_locator_window::rerender ()
 {
-  char *string;
-  struct tui_locator_window *locator;
-
-  locator = tui_locator_win_info_ptr ();
-
-  if (locator != NULL && locator->handle != NULL)
+  if (handle != NULL)
     {
-      string = tui_make_status_line (locator);
-      wmove (locator->handle, 0, 0);
+      char *string = tui_make_status_line (this);
+      wmove (handle, 0, 0);
       /* We ignore the return value from wstandout and wstandend, casting
  them to void in order to avoid a compiler warning.  The warning
  itself was introduced by a patch to ncurses 5.7 dated 2009-08-29,
  changing these macro to expand to code that causes the compiler
  to generate an unused-value warning.  */
-      (void) wstandout (locator->handle);
-      waddstr (locator->handle, string);
-      wclrtoeol (locator->handle);
-      (void) wstandend (locator->handle);
-      locator->refresh_window ();
-      wmove (locator->handle, 0, 0);
+      (void) wstandout (handle);
+      waddstr (handle, string);
+      wclrtoeol (handle);
+      (void) wstandend (handle);
+      refresh_window ();
+      wmove (handle, 0, 0);
       xfree (string);
     }
 }
 
-void
-tui_locator_window::rerender ()
-{
-  tui_show_locator_content ();
-}
-
 /* See tui-stack.h.  */
 
 void
@@ -411,6 +400,13 @@ tui_show_frame_info (struct frame_info *fi)
     }
 }
 
+void
+tui_show_locator_content ()
+{
+  struct tui_locator_window *locator = tui_locator_win_info_ptr ();
+  locator->rerender ();
+}
+
 /* Function to initialize gdb commands, for tui window stack
    manipulation.  */
 
--
2.17.2

Reply | Threaded
Open this post in threaded view
|

[PATCH 12/15] Make tui_locator_window::set_locator_fullname re-render

Tom Tromey-2
In reply to this post by Tom Tromey-2
This changes tui_locator_window::set_locator_fullname to re-render the
locator window, so that the callers don't need to do this.

gdb/ChangeLog
2019-08-20  Tom Tromey  <[hidden email]>

        * tui/tui-stack.c (tui_locator_window::set_locator_fullname): Call
        rerender.
        (tui_update_locator_fullname, tui_show_frame_info): Don't call
        tui_show_locator_content.
---
 gdb/ChangeLog       | 7 +++++++
 gdb/tui/tui-stack.c | 4 +---
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/gdb/tui/tui-stack.c b/gdb/tui/tui-stack.c
index 48062fed712..f6b6bb72b2a 100644
--- a/gdb/tui/tui-stack.c
+++ b/gdb/tui/tui-stack.c
@@ -284,6 +284,7 @@ tui_locator_window::set_locator_fullname (const char *fullname)
 
   locator->full_name[0] = 0;
   strcat_to_buf (locator->full_name, MAX_LOCATOR_ELEMENT_LEN, fullname);
+  rerender ();
 }
 
 /* See tui-stack.h.  */
@@ -328,7 +329,6 @@ tui_update_locator_fullname (const char *fullname)
   struct tui_locator_window *locator = tui_locator_win_info_ptr ();
 
   locator->set_locator_fullname (fullname);
-  tui_show_locator_content ();
 }
 
 /* Function to print the frame information for the TUI.  The windows are
@@ -372,7 +372,6 @@ tui_show_frame_info (struct frame_info *fi)
       if (!locator_changed_p)
  return 0;
 
-      tui_show_locator_content ();
       for (struct tui_source_window_base *win_info : tui_source_windows ())
  {
   win_info->maybe_update (fi, sal, locator->line_no, locator->addr);
@@ -389,7 +388,6 @@ tui_show_frame_info (struct frame_info *fi)
       if (!locator_changed_p)
  return 0;
 
-      tui_show_locator_content ();
       for (struct tui_source_window_base *win_info : tui_source_windows ())
  {
   win_info->erase_source_content ();
--
2.17.2

Reply | Threaded
Open this post in threaded view
|

[PATCH 13/15] Minor rearrangement of tui-stack.c

Tom Tromey-2
In reply to this post by Tom Tromey-2
This move _initialize_tui_stack to the end of tui-stack.c, per the gdb
style; and then removes two unnecessary forward declarations.

gdb/ChangeLog
2019-08-20  Tom Tromey  <[hidden email]>

        * tui/tui-stack.c (_initialize_tui_stack): Move later.
        Remove unnecessary forward declarations.
---
 gdb/ChangeLog       |  5 +++++
 gdb/tui/tui-stack.c | 20 +++++++-------------
 2 files changed, 12 insertions(+), 13 deletions(-)

diff --git a/gdb/tui/tui-stack.c b/gdb/tui/tui-stack.c
index f6b6bb72b2a..36208d0cac0 100644
--- a/gdb/tui/tui-stack.c
+++ b/gdb/tui/tui-stack.c
@@ -53,12 +53,6 @@
 
 static struct tui_locator_window _locator;
 
-/* Get a printable name for the function at the address.
-   The symbol name is demangled if demangling is turned on.
-   Returns a pointer to a static area holding the result.  */
-static char *tui_get_function_from_frame (struct frame_info *fi);
-
-static void tui_update_command (const char *, int);
 
 
 /* Accessor for the locator win info.  Answers a pointer to the static
@@ -405,6 +399,13 @@ tui_show_locator_content ()
   locator->rerender ();
 }
 
+/* Command to update the display with the current execution point.  */
+static void
+tui_update_command (const char *arg, int from_tty)
+{
+  execute_command ("frame 0", from_tty);
+}
+
 /* Function to initialize gdb commands, for tui window stack
    manipulation.  */
 
@@ -415,10 +416,3 @@ _initialize_tui_stack (void)
    _("Update the source window and locator to "
      "display the current execution point."));
 }
-
-/* Command to update the display with the current execution point.  */
-static void
-tui_update_command (const char *arg, int from_tty)
-{
-  execute_command ("frame 0", from_tty);
-}
--
2.17.2

Reply | Threaded
Open this post in threaded view
|

[PATCH 14/15] Don't call wrefresh from tui_cont_sig

Tom Tromey-2
In reply to this post by Tom Tromey-2
tui_cont_sig does not need to call wrefresh, because this is already
done by tui_refresh_all_win.

gdb/ChangeLog
2019-08-20  Tom Tromey  <[hidden email]>

        * tui/tui-io.c (tui_cont_sig): Don't call wrefresh.
---
 gdb/ChangeLog    | 4 ++++
 gdb/tui/tui-io.c | 2 --
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/gdb/tui/tui-io.c b/gdb/tui/tui-io.c
index ac7f0982755..ee581a2ff66 100644
--- a/gdb/tui/tui-io.c
+++ b/gdb/tui/tui-io.c
@@ -851,8 +851,6 @@ tui_cont_sig (int sig)
 
       /* Force a refresh of the screen.  */
       tui_refresh_all_win ();
-
-      wrefresh (TUI_CMD_WIN->handle);
     }
   signal (sig, tui_cont_sig);
 }
--
2.17.2

Reply | Threaded
Open this post in threaded view
|

[PATCH 15/15] Remove tui_win_info::refresh_all

Tom Tromey-2
In reply to this post by Tom Tromey-2
The TUI has two duplicate "re-render this window" methods, "rerender"
and "refresh_all".  They differ only slightly in semantics, so I
wanted to see if they could be unified.

After looking into this, I decided that refresh_all was not needed.
There are 4 calls to tui_refresh_all_win (the only caller of this
method):

1. tui_enable.  This sets the layout, which renders the windows.

2. tui_cont_sig.  Here, I think it's sufficient to simply redraw the
   current window contents from the curses backing store, because gdb
   state didn't change while it was suspended

3. tui_dispatch_ctrl_char.  This is the C-l handler, and here it's
   explicitly enough to just refresh the screen (as above).

4. tui_refresh_all_command.  This is the command equivalent of C-l.

So, this patch removes this method entirely and simplifies
tui_refresh_all_win.

gdb/ChangeLog
2019-08-20  Tom Tromey  <[hidden email]>

        * tui/tui-winsource.h (struct tui_source_window_base)
        <refresh_all>: Don't declare.
        * tui/tui-winsource.c (tui_source_window_base::refresh_all):
        Remove.
        * tui/tui-win.c (tui_refresh_all_win): Don't call refresh_all or
        tui_show_locator_content.
        * tui/tui-regs.h (struct tui_data_window) <refresh_all>: Don't
        declare.
        * tui/tui-regs.c (tui_data_window::refresh_all): Remove.
        * tui/tui-data.h (struct tui_win_info) <refresh_all>: Don't
        declare.
---
 gdb/ChangeLog           | 14 ++++++++++++++
 gdb/tui/tui-data.h      |  6 ------
 gdb/tui/tui-regs.c      | 23 -----------------------
 gdb/tui/tui-regs.h      |  2 --
 gdb/tui/tui-win.c       |  6 ------
 gdb/tui/tui-winsource.c | 10 ----------
 gdb/tui/tui-winsource.h |  2 --
 7 files changed, 14 insertions(+), 49 deletions(-)

diff --git a/gdb/tui/tui-data.h b/gdb/tui/tui-data.h
index 698acac338f..262cb595d4d 100644
--- a/gdb/tui/tui-data.h
+++ b/gdb/tui/tui-data.h
@@ -161,12 +161,6 @@ public:
   {
   }
 
-  /* Called after all the TUI windows are refreshed, to let this
-     window have a chance to update itself further.  */
-  virtual void refresh_all ()
-  {
-  }
-
   /* Compute the maximum height of this window.  */
   virtual int max_height () const;
 
diff --git a/gdb/tui/tui-regs.c b/gdb/tui/tui-regs.c
index f62ba065ebe..48e78fc9dbc 100644
--- a/gdb/tui/tui-regs.c
+++ b/gdb/tui/tui-regs.c
@@ -403,29 +403,6 @@ tui_data_window::rerender ()
 }
 
 
-/* Function to redisplay the contents of the data window.  */
-void
-tui_data_window::refresh_all ()
-{
-  erase_data_content (NULL);
-  if (!regs_content.empty ())
-    {
-      int first_element = first_data_item_displayed ();
-
-      if (first_element >= 0) /* Re-use existing windows.  */
- {
-  int first_line = (-1);
-
-  if (first_element < regs_content.size ())
-    first_line = line_from_reg_element_no (first_element);
-
-  if (first_line >= 0)
-    display_registers_from_line (first_line);
- }
-    }
-}
-
-
 /* Scroll the data window vertically forward or backward.  */
 void
 tui_data_window::do_scroll_vertical (int num_to_scroll)
diff --git a/gdb/tui/tui-regs.h b/gdb/tui/tui-regs.h
index 1f9fa73f1cc..abf44c88b68 100644
--- a/gdb/tui/tui-regs.h
+++ b/gdb/tui/tui-regs.h
@@ -58,8 +58,6 @@ struct tui_data_window : public tui_win_info
 
   DISABLE_COPY_AND_ASSIGN (tui_data_window);
 
-  void refresh_all () override;
-
   void refresh_window () override;
 
   const char *name () const override
diff --git a/gdb/tui/tui-win.c b/gdb/tui/tui-win.c
index 64e38880a2c..8d41372cf90 100644
--- a/gdb/tui/tui-win.c
+++ b/gdb/tui/tui-win.c
@@ -504,12 +504,6 @@ tui_refresh_all_win (void)
 {
   clearok (curscr, TRUE);
   tui_refresh_all ();
-  for (tui_win_info *win_info : all_tui_windows ())
-    {
-      if (win_info->is_visible ())
- win_info->refresh_all ();
-    }
-  tui_show_locator_content ();
 }
 
 void
diff --git a/gdb/tui/tui-winsource.c b/gdb/tui/tui-winsource.c
index 0a3eb78bb5a..7a4821dc52c 100644
--- a/gdb/tui/tui-winsource.c
+++ b/gdb/tui/tui-winsource.c
@@ -280,16 +280,6 @@ tui_source_window_base::~tui_source_window_base ()
 
 /* See tui-data.h.  */
 
-void
-tui_source_window_base::refresh_all ()
-{
-  show_source_content ();
-  check_and_display_highlight_if_needed ();
-  update_exec_info ();
-}
-
-/* See tui-data.h.  */
-
 void
 tui_source_window_base::update_tab_width ()
 {
diff --git a/gdb/tui/tui-winsource.h b/gdb/tui/tui-winsource.h
index 1804ca7224a..4c98ca3ceb2 100644
--- a/gdb/tui/tui-winsource.h
+++ b/gdb/tui/tui-winsource.h
@@ -103,8 +103,6 @@ public:
 
   void clear_detail ();
 
-  void refresh_all () override;
-
   /* Refill the source window's source cache and update it.  If this
      is a disassembly window, then just update it.  */
   void refill ();
--
2.17.2

Reply | Threaded
Open this post in threaded view
|

Re: [PATCH 05/15] Private data members in tui_data_window

Pedro Alves-7
In reply to this post by Tom Tromey-2
On 8/21/19 3:25 AM, Tom Tromey wrote:
> This changes tui_data_window so that the data members are private.
> This required the addition of a simple accessor method in one case.

OOC, do you have plans at some point later in the series to rename
local variables to m_xxx ?

(I understand not doing this now, and am not suggesting it.)

Thanks,
Pedro Alves
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH 00/15] More TUI Refactorings

Pedro Alves-7
In reply to this post by Tom Tromey-2
On 8/21/19 3:25 AM, Tom Tromey wrote:

> Here is another series of TUI refactorings.  There should be no
> user-visible changes in this series (patch #1 changes a message, but I
> don't believe it can actually be seen).
>
> I tested each one using the gdb.tui tests.  This worked here, though
> as we learned recently, at least empty.exp is not very reliable.
>
> There's about one more series of this size waiting to be submitted,
> plus one (or maybe two) patches that change the TUI in small
> user-visible ways.

LGTM.  

Nice to see the number of rerender/refresh methods down.

Thanks,
Pedro Alves
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH 00/15] More TUI Refactorings

Tom Tromey-2
>>>>> "Pedro" == Pedro Alves <[hidden email]> writes:

Pedro> On 8/21/19 3:25 AM, Tom Tromey wrote:

>> Here is another series of TUI refactorings.  There should be no
>> user-visible changes in this series (patch #1 changes a message, but I
>> don't believe it can actually be seen).
>>
>> I tested each one using the gdb.tui tests.  This worked here, though
>> as we learned recently, at least empty.exp is not very reliable.
>>
>> There's about one more series of this size waiting to be submitted,
>> plus one (or maybe two) patches that change the TUI in small
>> user-visible ways.

Pedro> LGTM.  

Thanks.  I'm checking this in now.

Tom
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH 05/15] Private data members in tui_data_window

Tom Tromey-2
In reply to this post by Pedro Alves-7
>>>>> "Pedro" == Pedro Alves <[hidden email]> writes:

Pedro> On 8/21/19 3:25 AM, Tom Tromey wrote:
>> This changes tui_data_window so that the data members are private.
>> This required the addition of a simple accessor method in one case.

Pedro> OOC, do you have plans at some point later in the series to rename
Pedro> local variables to m_xxx ?

Pedro> (I understand not doing this now, and am not suggesting it.)

I didn't but it's no trouble.

Tom