perhaps there's something deeper I just don't get, but as far as I
understand your problem comes from the fact that you do not know in
which workspace you're handling a message.


This is a quite trivial patch that just gives you a method for that:
Thu Jan 31 13:42:23 CET 2008  Andrea Rossato <andrea.rossato@unibz.it>
 * Add handleMessageInWorkspace, a method that knows where to be
   M ./XMonad/Core.hs +3
   M ./XMonad/Operations.hs -2 +2

which adds:
handleMessageInWorkspace :: Workspace i (layout a) a -> SomeMessage -> X (Maybe (layout a))

But it's not just about messages; we'd also need doLayoutInWorkspace and emptyLayoutInWorkspace.  In particular xinerama support would not work without those.  Since PerWorkspace is the only layout that could possibly use this information, adding three new methods to the LayoutClass just for this is almost certainly not the way to go.

-Brent