Prime target is to preserve the in-screen condition of client AND window.
Atm. when the client is fully in sight (but the window is not) - regardless of snapping or screen change - a workspace update (screen change, resolution change, adding/removing a strutting panel) would allow the client to partiall escape screen bounds.
This is changed so that if the client is fully in sight, it's kept fully in sight (but not the decoration)
If the entire window was fully in sight, it's also kept (as is right now)
The code handles inner screen edges (if the client was in sight, the entire window will be if we'd bleed to the other screen)
 I'd say that handling the client is more relevant, but foresee more complaints if the window wasn't handled anymore ;-)
During that, i stumbled across some other issues.
- when a window centered on one screen is moved to a screen smaller than the window, the window is shrinked to the dimensions of that screen and now randomly touches eg. left AND right edge. When moved back, the right and bottom edge were preferred (to the window was "moved" into the lower right corner). It's now kept centered.
- geom_restore was saved before keeping the window in the new screen area (causing accidental drops on screen changes)
overall looks to me as too heavy for 4.11 branch which means it could also make use of C++11 magic.
Given that the method is really doing a lot it would be so nice to have unit tests for it... Maybe I should invest the time to get Client in a state that we can write unit tests for some methods.