ensure BL_FLUSH always sent when context.botlx is set

ensure BL_FLUSH always gets sent down to the window port whenever bot() is
called with context.botlx set so that status updates work as
expected after full screen clear after a level change

Fixes #107
This commit is contained in:
nhmall
2018-09-02 18:26:42 -04:00
parent 6594805811
commit 0b32735ff8
2 changed files with 23 additions and 13 deletions
+3
View File
@@ -107,6 +107,9 @@ wizard mode #wizidentify didn't disclose extra information for unID'd items if
make transformation message of a deliberate apply of a figurine seem a bit make transformation message of a deliberate apply of a figurine seem a bit
less definite when blind and place unseen monster marker at the spot less definite when blind and place unseen monster marker at the spot
you think it should be you think it should be
ensure BL_FLUSH always gets sent down to the window port whenever bot() is
called with context.botlx set so that status updates work as
expected after full screen clear after a level change
Fixes to Post-3.6.1 Problems that Were Exposed Via git Repository Fixes to Post-3.6.1 Problems that Were Exposed Via git Repository
+20 -13
View File
@@ -770,8 +770,7 @@ evaluate_and_notify_windowport(valsetlist, idx, idx_p)
int idx, idx_p; int idx, idx_p;
boolean *valsetlist; boolean *valsetlist;
{ {
int i; int i, updated = 0, notpresent = 0;
boolean updated = FALSE;
/* /*
* Now pass the changed values to window port. * Now pass the changed values to window port.
@@ -781,24 +780,32 @@ boolean *valsetlist;
|| ((i == BL_EXP) && !flags.showexp) || ((i == BL_EXP) && !flags.showexp)
|| ((i == BL_TIME) && !flags.time) || ((i == BL_TIME) && !flags.time)
|| ((i == BL_HD) && !Upolyd) || ((i == BL_HD) && !Upolyd)
|| ((i == BL_XP || i == BL_EXP) && Upolyd)) || ((i == BL_XP || i == BL_EXP) && Upolyd)) {
notpresent++;
continue; continue;
}
if (evaluate_and_notify_windowport_field(i, valsetlist, idx, idx_p)) if (evaluate_and_notify_windowport_field(i, valsetlist, idx, idx_p))
updated = TRUE; updated++;
} }
/* /*
* It is possible to get here, with nothing having been pushed * Notes:
* to the window port, when none of the info has changed. In that * 1. It is possible to get here, with nothing having been pushed
* case, we need to force a call to status_update() when * to the window port, when none of the info has changed.
* context.botlx is set. The tty port in particular has a problem
* if that isn't done, since it sets context.botlx when a menu or
* text display obliterates the status line.
* *
* To work around it, we call status_update() with fictitious * 2. Some window ports are also known to optimize by only drawing
* fields that have changed since the previous update.
*
* In both of those situations, we need to force updates to
* all of the fields when context.botlx is set.
*
* The tty port in particular has a problem
* if that isn't done, since it sets context.botlx when a menu or
* text display obliterates the status line.
*
* To trigger the full update we call status_update() with fictitious
* index of BL_FLUSH (-1). * index of BL_FLUSH (-1).
*/ */
if ((context.botlx && !updated) if (context.botlx || (windowprocs.wincap2 & WC2_FLUSH_STATUS) != 0L)
|| (windowprocs.wincap2 & WC2_FLUSH_STATUS) != 0L)
status_update(BL_FLUSH, (genericptr_t) 0, 0, 0, status_update(BL_FLUSH, (genericptr_t) 0, 0, 0,
NO_COLOR, &cond_hilites[0]); NO_COLOR, &cond_hilites[0]);