Make tui_update_variables more readable by factoring out two new helper
functions, set_border_attrs and set_border_kind_item.
This makes the code also more regular, and consequently we no longer need the
comment:
...
/* If one corner changes, all characters are changed.
Only check the first one. */
...
Tested on x86_64-linux.
---
gdb/tui/tui-win.c | 93 +++++++++++++++++++++++++++++++----------------
1 file changed, 61 insertions(+), 32 deletions(-)
@@ -274,6 +274,40 @@ translate (const char *name, struct tui_translate *table)
return table;
}
+/* Helper function for tui_update_variables. SET *LVAL to
+ translate (KEY, DICT)->value, and set *LVAL_CHANGED to true if *LVAL
+ changed. */
+
+static void
+set_border_attrs (int *lval, const char *key, struct tui_translate *dict,
+ bool *lval_changed)
+{
+ struct tui_translate *entry = translate (key, dict);
+
+ if (*lval != (chtype) entry->value)
+ {
+ *lval = entry->value;
+ *lval_changed = true;
+ }
+}
+
+/* Helper function for tui_update_variables. SET *LVAL to
+ translate (KEY, DICT)->value, and set *LVAL_CHANGED to true if *LVAL
+ changed. If translate (KEY, DICT)->value is negative, use ACS instead. */
+
+static void
+set_border_kind_item (chtype *lval, const char *key,
+ struct tui_translate *dict, int acs, bool *lval_changed)
+{
+ struct tui_translate *entry = translate (key, dict);
+
+ if (*lval != (chtype) entry->value)
+ {
+ *lval = (entry->value < 0) ? acs : entry->value;
+ *lval_changed = true;
+ }
+}
+
/* Update the tui internal configuration according to gdb settings.
Returns 1 if the configuration has changed and the screen should
be redrawn. */
@@ -281,44 +315,39 @@ bool
tui_update_variables ()
{
bool need_redraw = false;
- struct tui_translate *entry;
- entry = translate (tui_border_mode, tui_border_mode_translate);
- if (tui_border_attrs != entry->value)
- {
- tui_border_attrs = entry->value;
- need_redraw = true;
- }
- entry = translate (tui_active_border_mode, tui_border_mode_translate);
- if (tui_active_border_attrs != entry->value)
- {
- tui_active_border_attrs = entry->value;
- need_redraw = true;
- }
+ set_border_attrs (&tui_border_attrs, tui_border_mode,
+ tui_border_mode_translate, &need_redraw);
- /* If one corner changes, all characters are changed.
- Only check the first one. The ACS characters are determined at
- run time by curses terminal management. */
- entry = translate (tui_border_kind, tui_border_kind_translate_lrcorner);
- if (tui_border_lrcorner != (chtype) entry->value)
- {
- tui_border_lrcorner = (entry->value < 0) ? ACS_LRCORNER : entry->value;
- need_redraw = true;
- }
- entry = translate (tui_border_kind, tui_border_kind_translate_llcorner);
- tui_border_llcorner = (entry->value < 0) ? ACS_LLCORNER : entry->value;
+ set_border_attrs (&tui_active_border_attrs, tui_active_border_mode,
+ tui_border_mode_translate, &need_redraw);
+
+ /* The ACS characters are determined at run time by curses terminal
+ management. */
+
+ set_border_kind_item (&tui_border_lrcorner, tui_border_kind,
+ tui_border_kind_translate_lrcorner, ACS_LRCORNER,
+ &need_redraw);
+
+ set_border_kind_item (&tui_border_llcorner, tui_border_kind,
+ tui_border_kind_translate_llcorner, ACS_LLCORNER,
+ &need_redraw);
- entry = translate (tui_border_kind, tui_border_kind_translate_ulcorner);
- tui_border_ulcorner = (entry->value < 0) ? ACS_ULCORNER : entry->value;
+ set_border_kind_item (&tui_border_ulcorner, tui_border_kind,
+ tui_border_kind_translate_ulcorner, ACS_ULCORNER,
+ &need_redraw);
- entry = translate (tui_border_kind, tui_border_kind_translate_urcorner);
- tui_border_urcorner = (entry->value < 0) ? ACS_URCORNER : entry->value;
+ set_border_kind_item (&tui_border_urcorner, tui_border_kind,
+ tui_border_kind_translate_urcorner, ACS_URCORNER,
+ &need_redraw);
- entry = translate (tui_border_kind, tui_border_kind_translate_hline);
- tui_border_hline = (entry->value < 0) ? ACS_HLINE : entry->value;
+ set_border_kind_item (&tui_border_hline, tui_border_kind,
+ tui_border_kind_translate_hline, ACS_HLINE,
+ &need_redraw);
- entry = translate (tui_border_kind, tui_border_kind_translate_vline);
- tui_border_vline = (entry->value < 0) ? ACS_VLINE : entry->value;
+ set_border_kind_item (&tui_border_vline, tui_border_kind,
+ tui_border_kind_translate_vline, ACS_VLINE,
+ &need_redraw);
return need_redraw;
}