
Excerpts from codesite-noreply's message of Sun Jul 17 21:45:00 -0600 2011:
Updates: .... Comment #1 on issue 462 by vogt.a...@gmail.com: Ewmh desktop handle event doesn't correctly handle _NET_WM_DESKTOP message type http://code.google.com/p/xmonad/issues/detail?id=462
Sounds like a good idea. The following handleEventHook (based on the one in EwmhDesktops) should do that:
.... ewmhCopyWindow :: Event -> X All ewmhCopyWindow ClientMessageEvent { ev_window = w, ev_message_type = mt, ev_data = 0xffffffff : _ } = withWindowSet $ \s -> do a_cd <- getAtom "_NET_CURRENT_DESKTOP" when (mt == a_cd) $ do sort' <- getSortByIndex let ws = map W.tag $ sort' $ W.workspaces s windows $ foldr (.) id (map (copyWindow w) ws) return (All True) ewmhCopyWindow _ = return (All True) .... This ewmhCopyWindow behaviour should probably be added to EwmhDesktops.
One thing to note is copyWindow doesn't act as expected with more than one screen. It is only able to map the copied window on one workspace. This causes flickering focus problems with at least some driver/X combinations. At its best it shows the copied window on the inactive rather than the active workspace, resulting in a frustrating inability to focus the copied window if that's needed. I did a little searching for "pinned window" code in other window managers, hoping for some clues as to how to better implement copyWindow, but haven't found anything yet. -- wmw