Yes, the direct evidence is that you get that snap-snap coarse behavior when you drag a window edge.
Additionally, there can be text feedback from the WM, so that if you want to confine yourself to a certain width
and/or height to write in, you can just look at the numbers during resize. I even have key mappings to adjust a
window width to say "80" or "100", which will be by-character if this all works. These things work on xterm still,
so that seems like a good reference.
If this wasn't a result of XSetWMNormalHints all along, then I wonder what other mechanism might have been
in play when it previously worked. I didn't find anything in the WM docs other than ICCCM.
I would expect there to be some code for this in VIM if it works in Win32.
Anyhow, I don't think I've used XSetWMNormalHints, but I would expect to call it after XSetWMProperties
on the newly created window. To speculate, I'd imagine that a WM might just cache the values when the
window is mapped to screen.
For xterm, doing maximize leaves a gap on the right and bottom. I'm fine with that, but then, I generally never
use maximize for anything, probably since I've come to expect odd behavior. Checking the Windows 10 VM, where
I can easily change screen size using the VM window, VIM seems to switch to pixel-incremental mode when full screen,
and then back to char-incremental when unmaximized.
As far as code, I hesitate to suggest adding something new if there was something else already in there
potentially trying to do the same thing.
From a user point of view, a simple opt-in 'set' variable would make me happy.