Looking at the last line in `deactivate-mark` it seems like it is a
known issue and changing such optimization in the display engine may be
probably undesirable (Eli will confirm soon hopefully), so in your case
maybe is better to force the update on demand like in deactivate-mark:
```
(defmacro with-minibuffer-completions-window (&rest body)
"Execute the forms in BODY from the minibuffer in its completions window.
When used in a minibuffer window, select the window with completions,
and execute the forms."
(declare (indent 0) (debug t))
`(let ((window (or (get-buffer-window "*Completions*" 0)
;; Make sure we have a completions window.
(progn (minibuffer-completion-help)
(get-buffer-window "*Completions*" 0)))))
(when window
(with-selected-window window
,@body
(redisplay--update-cursor-face-highlight window)))))
```
This seems to work.
Is it enough?
Thanks, I confirm such forcing the update fixes highlighting.
But still when cursor-face-highlight-nonselected-window is nil by default,
let-binding it to t has no effect:
```
(defun minibuffer-next-completion (&optional n)
"Run `next-completion' from the minibuffer in its completions window."
(interactive "p")
(with-minibuffer-completions-window
(let ((cursor-face-highlight-nonselected-window t))
(next-completion n))))
```