Created attachment 2667 Patch I gave a try at caching the workarea, this is far from being perfect but it ~ works. There is one regression though, notifications are not replaced correctly after a monitor plug / unplug. I also noticed that the rootwin signal is often received several times in a row, I don't really know how to only deal with the last one as we need to update things as fast as possible to be able to replace notifications (so a delay is not really a valid option, unless we replace notifications after a delay too).
Oh, I already have this half-finished locally. But maybe your patch is better...
Didn't build here; needed a gdk/gdkx.h include. The regression is a little annoying, but not a showstopper. It's only a transient problem that resolves itself after the notifications in question expire. There's only one place where I could see that it'd be a problem: if there's a non-expiring notification up (like about battery being low or something). But... let's hand-wave it away for now. Pushed.