Previously when a window was undecorated, we would shift it back to an appropriate position according to its gravity member. That behaviour was problematic because in the StaticGravity case the window has to just stay in the same place. But then if you had a window with StaticGravity which then did get a decoration and later removed it, it would be placed as though it was decorated and appear to be in the wrong place.
The correct behaviour is to place all windows as though they have decorations, and then when decorations are removed, to move the window back to the corner as indicated in its gravity and then expand its size to cover the obscured regions no longer hidden because the decorations went away.
(LP: #1165343).
1. Completely remove decorOffsetMove and other related code from decor.cpp. Put the logic to handle the window->input () - window->border () placement offset inside of setWindowFrameExtents instead. Now the window will always be offset from its original non-decorated position to the new decorated position, rather than having to guess between decoration sizes. 2. Make saveGeometry and restoreGeometry work relative to window->border () as opposed to including it in the saved geometry. It is possible that the border size might change during maximization, as such, we don't want to save the position with the border before maximizing. Instead save the position as if it were never decorated so that when the window is restored it can be restored to its original position and then adjusted for its new border size. 3. Fix a few typoes in the tests. 4. Moved some commonly used matchers into compiz::testing 5. Make COMPIZ_PLUGIN_DIR accept multiple directories and look in each one of them for the plugin 6. Set COMPIZ_PLUGIN_DIR appropriately for each plugin that we wish to load on startup so that we load locally built plugins as opposed to installed ones. 7. Uncomment compiz_discover_tests for the acceptance tests. Now they are run by default.