Update TUI window title when changed
authorTom Tromey <tom@tromey.com>
Thu, 29 Jun 2023 17:26:55 +0000 (11:26 -0600)
committerTom Tromey <tom@tromey.com>
Mon, 10 Jul 2023 19:48:22 +0000 (13:48 -0600)
I wrote a TUI window in Python, and I noticed that setting its title
did not result in a refresh, so the new title did not appear.  This
patch corrects this problem.

gdb/python/py-tui.c
gdb/testsuite/gdb.python/tui-window.exp
gdb/testsuite/gdb.python/tui-window.py
gdb/tui/tui-data.c
gdb/tui/tui-data.h

index 84a435ead6877fefdb3b33ad3c32ac46cfaaace6..c52b04f9a51c0374ffbf4598cfdaf2064645d68a 100644 (file)
@@ -531,7 +531,7 @@ gdbpy_tui_set_title (PyObject *self, PyObject *newvalue, void *closure)
   if (value == nullptr)
     return -1;
 
-  win->window->title = value.get ();
+  win->window->set_title (value.get ());
   return 0;
 }
 
index 9b5d17c35d4baaded3deb59577c957e4bf1dce39..defc8c68b254ad95fd957585ea8f4c7a1adab952 100644 (file)
@@ -54,6 +54,10 @@ Term::check_contents "error message after trying to delete title" \
 Term::check_contents "title is unchanged" \
     "This Is The Title"
 
+Term::command "python change_window_title ()"
+Term::check_contents "test new title" \
+    "New Title"
+
 Term::resize 51 51
 # Remember that a resize request actually does two resizes...
 Term::check_contents "Window was updated" "Test: 2"
index 401cb5197ff11ae68d2f5706471452583d07bdf8..dc72cc4c0f72c2cfe0671c90b82234f149a5aeab 100644 (file)
@@ -53,4 +53,9 @@ def failwin(win):
     raise RuntimeError("Whoops")
 
 
+# Change the title of the window.
+def change_window_title():
+    the_window.win.title = "New Title"
+
+
 gdb.register_window_type("fail", failwin)
index 0daed32b6e6d8c62e01cc90a31bdc3d698e9d1c7..abd2ec2b5fd0765afd44c2ac836ee8fb9d3e1e26 100644 (file)
@@ -152,6 +152,17 @@ tui_prev_win (struct tui_win_info *cur_win)
   return *iter;
 }
 
+/* See tui-data.h.  */
+
+void
+tui_win_info::set_title (const char *new_title)
+{
+  if (title != new_title)
+    {
+      title = new_title;
+      check_and_display_highlight_if_needed ();
+    }
+}
 
 void
 tui_win_info::rerender ()
index c92e85c9da1122e26a391bea765d6d58cb418efb..030ce2a543841caeece4a1e9df43a253471b1eae 100644 (file)
@@ -146,6 +146,10 @@ public:
 
   void check_and_display_highlight_if_needed ();
 
+  /* A helper function to change the title and then redraw the
+     surrounding box, if needed.  */
+  void set_title (const char *new_title);
+
   /* Window handle.  */
   std::unique_ptr<WINDOW, curses_deleter> handle;
   /* Window width.  */