Repaint the entire window during starved paints if anything changed.

This is to fix FFXIV Launcher's Server Status page which does not get repainted correctly. The launcher basically calls RedrawWindow(main_hwnd, NULL, NULL, RDW_ERASE | RDW_INVALIDATE) to erase and redraw the whole thing, and since the window itself does not have WS_CLIPCHILDREN (and is the parent to all other windows), it draws over the entirety of it.

Then, a small change happens on the page, some element gets changed or redrawn or mouse is moved or whatever (gecko has a bunch of these checks for almost all input, probably similar on IE if not more), and it redraws the whole thing on Windows, so it "works". On Wine with wine-gecko, it only redraws some parts of the page, leaving the rest "erased" with the main window's paint.

Note that if you do this by hacking a redraw with e.g. AutoHotkey forcing a redraw without anything else happening (like on a timer) while on the launcher's server status page, it also gets overwritten with the main window's "grey" background and does not get repainted properly, until a tiny change happens or mouse is moved, even on Windows. I think it's enough to confirm it's the problem and why the repaint happens.

Merge request reports

Loading