public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: gdb-patches@sourceware.org
Subject: [PATCHSET] [2/4] Fix various issue in TUI
Date: Wed, 31 Dec 2014 17:45:00 -0000	[thread overview]
Message-ID: <83y4pnbtnc.fsf@gnu.org> (raw)

This patch fixes the problem whereby setting the border attributes had
no effect whatsoever.  Turns out no one was calling the functions that
detected changes in these settings and applied them to windows.

While at that, this also fixes a copy/paste error in a comment to a
function.

OK?

2014-12-31  Eli Zaretskii  <eliz@gnu.org>

	* tui/tui-win.c (tui_rehighlight_all): New function.

	* tui/tui-win.h: Add prototype for tui_rehighlight_all.

	* tui/tui-command.c (tui_dispatch_ctrl_char): When Ctrl-L was
          pressed, call tui_rehighlight_all if tui_update_variables
          indicates it should be.

	* tui/tui-win.c (tui_refresh_all_command): Call
          tui_rehighlight_all if tui_update_variables indicates it
          should be.

	* tui/tui-hooks.c (tui_note_setting_change): New function.
	(tui_install_hooks): Install an observer for "command
	parameter changed".
	(tui_remove_hooks): Uninstall the observer.


--- gdb/tui/tui-win.h~0	2014-06-11 18:34:41 +0300
+++ gdb/tui/tui-win.h	2014-12-31 13:38:18 +0200
@@ -35,6 +35,7 @@
 extern void tui_set_win_focus_to (struct tui_win_info *);
 extern void tui_resize_all (void);
 extern void tui_refresh_all_win (void);
+extern void tui_rehighlight_all (void);
 
 extern chtype tui_border_ulcorner;
 extern chtype tui_border_urcorner;


--- gdb/tui/tui-command.c~0	2014-10-29 21:45:50 +0200
+++ gdb/tui/tui-command.c	2014-12-31 13:49:43 +0200
@@ -50,7 +50,12 @@
 
   /* Handle the CTRL-L refresh for each window.  */
   if (ch == '\f')
-    tui_refresh_all_win ();
+    {
+      if (tui_update_variables ())
+	tui_rehighlight_all ();
+
+      tui_refresh_all_win ();
+    }
 
   /* If the command window has the logical focus, or no-one does
      assume it is the command window; in this case, pass the character


--- gdb/tui/tui-hooks.c~0	2014-06-11 18:34:41 +0300
+++ gdb/tui/tui-hooks.c	2014-12-31 14:41:11 +0200
@@ -247,12 +247,23 @@
   tui_display_main ();
 }
 
+/* Refresh the display when settings important to us change.  */
+static void
+tui_note_setting_change (const char *param, const char *value)
+{
+  if (tui_active
+      && strncmp (param, "tui ", sizeof ("tui ") - 1) == 0
+      && tui_update_variables ())
+    tui_rehighlight_all ();
+}
+
 /* Observers created when installing TUI hooks.  */
 static struct observer *tui_bp_created_observer;
 static struct observer *tui_bp_deleted_observer;
 static struct observer *tui_bp_modified_observer;
 static struct observer *tui_inferior_exit_observer;
 static struct observer *tui_about_to_proceed_observer;
+static struct observer *tui_setting_changed_observer;
 
 /* Install the TUI specific hooks.  */
 void
@@ -278,6 +289,9 @@
     = observer_attach_about_to_proceed (tui_about_to_proceed);
 
   deprecated_register_changed_hook = tui_register_changed_hook;
+
+  tui_setting_changed_observer
+    = observer_attach_command_param_changed (tui_note_setting_change);
 }
 
 /* Remove the TUI specific hooks.  */
@@ -300,6 +314,8 @@
   tui_inferior_exit_observer = NULL;
   observer_detach_about_to_proceed (tui_about_to_proceed_observer);
   tui_about_to_proceed_observer = NULL;
+  observer_detach_command_param_changed (tui_setting_changed_observer);
+  tui_setting_changed_observer = NULL;
 }
 
 void _initialize_tui_hooks (void);


--- gdb/tui/tui-win.c~0	2014-10-29 21:45:50 +0200
+++ gdb/tui/tui-win.c	2014-12-31 13:55:32 +0200
@@ -649,6 +649,16 @@
 }
 
 
+void
+tui_rehighlight_all (void)
+{
+  enum tui_win_type type;
+
+  for (type = SRC_WIN; type < MAX_MAJOR_WINDOWS; type++)
+    tui_check_and_display_highlight_if_needed (tui_win_list[type]);
+}
+
+
 /* Resize all the windows based on the terminal size.  This function
    gets called from within the readline sinwinch handler.  */
 void
@@ -985,11 +995,14 @@
   /* Make sure the curses mode is enabled.  */
   tui_enable ();
 
+  if (tui_update_variables ())
+    tui_rehighlight_all ();
+
   tui_refresh_all_win ();
 }
 
 
-/* Set the height of the specified window.  */
+/* Set the tab width of the specified window.  */
 static void
 tui_set_tab_width_command (char *arg, int from_tty)
 {


             reply	other threads:[~2014-12-31 17:45 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-31 17:45 Eli Zaretskii [this message]
2015-01-05 19:11 ` Pedro Alves
2015-01-05 19:40   ` Eli Zaretskii
2015-01-06 16:03     ` Pedro Alves
2015-01-06 15:58   ` Eli Zaretskii
2015-01-07 13:48     ` Pedro Alves
2015-01-16 16:29       ` Eli Zaretskii
2015-01-16 16:59         ` Sergio Durigan Junior
2015-01-16 17:59           ` Eli Zaretskii
2015-01-16 16:34   ` Eli Zaretskii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=83y4pnbtnc.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).