On Tue, Dec 10, 2013 at 12:24 PM, EatsKittens <temporalabstraction@gmail.com> wrote:
where root in the Win record is derived from:

 (root, parent, _) 
      <- Xlib.Extras.queryTree d xid;

That looks like it should be the right one, but normally I'd just get the root window of the default Screen.

For what it's worth, I see one issue: setClientMessageEvent does only the basic information necessary for a client message, which is insufficient for the _NET_ACTIVE_WINDOW message. (It's missing the client active window, which in this case should probably be 0 anyway so it may not be an issue that it's missing.)
 
The code compiles and type checks, it just doesn't... work, it does nothing. Replacing the code with:

  raiseWin w = 
    System.Process.rawSystem "xdotool" ["windowactivate", show x] >> return () where {
      x = xid w;
    } 

Makes it work without errors, inspecting the code of xdotool makes it reveal to use the "_NET_ACTIVE_WINDOW" client message to the root hole? Any idea what I could be doing wrongly, is this the correct root window?

You might use something like xtrace/xscope/xmon to make sure that xdotool and your program are actually sending the same client message.

--
brandon s allbery kf8nh                               sine nomine associates
allbery.b@gmail.com                                  ballbery@sinenomine.net
unix, openafs, kerberos, infrastructure, xmonad        http://sinenomine.net