[Xlib] Force Raise/Map/Focus a given Window

Xavier Bestel xavier.bestel at free.fr
Tue Aug 12 15:47:12 PDT 2008

Le mardi 12 août 2008 à 12:42 -0400, Owen Taylor a écrit :
> On Mon, 2008-08-11 at 14:25 -0500, Andrew Troschinetz wrote:
> > Hi,
> > 
> > I'm trying to force raise/present/focus a window in Gnome/Metacity  
> > 2.18 (RHEL5) but it seems like a "don't steal focus" feature is  
> > preventing me from doing so. The following code works in Gnome/ 
> > Metacity 2.8 (RHEL4), but note quite in RHEL5.
> > 
> > What I mean is: If the window is minimized (unmapped) then the  
> > following code will map, raise, and focus the window correctly in  
> > either RHEL4 or RHEL5. But in RHEL5 only, if the window currently  
> > doesn't have focus, but is mapped and raised (say another window has  
> > focus and is ontop of the window I want to present), then the  
> > following code only results in the taskbar item for the window blinking.
> > 
> > So my question is, is there a problem in my code? Is there a known  
> > workaround for this, some Xlib function I should be calling here? Or  
> > does anyone happen to know off the top of their head if this is a new  
> > feature in RHEL5 that can be easily disabled?
> You can:
>  A) Get a current server timestamp by changing a property and looking
>     at the timestamp on the subsequent PropertyNotify event.
>  B) If mapping a new window, use that timestamp for _NET_WM_USER_TIME 
>  C) To activate an existing window, send a _NET_ACTIVE_WINDOW message to
>     the root window with that timestamp
> (See the extended window manager hints specification for details about
> the _NET_* properties and messages.)
> I think _NET_ACTIVE_WINDOW should be supported in RHEL4 as well, so you
> don't need to check for a supporting window manager.
> A little complicated to do maybe, but that's the nature of using Xlib
> directly. 

Maybe look also at libwnck, it's made exactely for this sort of things
(interacting with the window manager, writing tools such as taskbar or
windows list)


More information about the xorg mailing list