Somewhat big task, so probably needs some tracking.
The easiest way to map this to keep compatibility and do this safely is to keep AbstractClient::geometry() the same untouched true canonical source of the buffer location in compositor space.
Instead we should consider consider windowGeometry to be a set of margins to apply to/from this. Similar to the existing AbstractClient::borders.
AbstractClient can gain a realGeometry / setRealGeometry which add/subtract margins as appropriate.
(ideally we need a better name but both "Window Geometry" and "Client Geometry" are terms that are taken that also mean removing AbstractClient::borders )
Then most porting is just a case of switching methods.
- Send correct configure event so resizing works (done)
- Set correct popup location
- Handle window margins changing (i.e if margins change top left of the real window should stay the same
- Adjust placement.cpp to use other method
- Adjust rules
- Adjust snapping