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

Andrew Troschinetz ast at arlut.utexas.edu
Tue Aug 12 09:19:23 PDT 2008

On Aug 11, 2008, at 3:40 PM, Mikhail Gusarov wrote:
> AT> Is there a known workaround for this,
> I'd say if there is a known workaround, this should be considered a  
> bug.

Well no. There are certain things that need to steal focus, like  
dialog windows for example. Basically what I'm doing is writing a baby  
window manager for a suite of applications that lives inside a of  
fully fledged window manager. I've got about 30 or 40 applications,  
many of which run fullscreen all the time. And I need a way to shuffle  
them around, bring some to the top, minimize, etc, all programatically.

Now, when the window is minimized to begin with, my present_window()  
function *will* present the window and the window *does* steal focus,  
in either RHEL4 or RHEL5. You're saying you consider that to be a bug?

I'm not trying to steal focus in the sense of "my application requires  
attention and I'm stealing focus from some other application that the  
user is interacting with." What I'm doing is more along the lines of  
"the user has requested that window X should come to the front and  
have focus, right now." And the window manager is denying the user's  
explicit request because it comes in the form of my function call and  
not the accepted "user clicks on taskbar item" workflow.

On Aug 11, 2008, at 4:46 PM, Daniel Stone wrote:
> No.  By design, the window manager has complete control over these  
> kinds
> of things.  Letting people subvert the 'don't steal my focus'  
> mechanism
> would utterly defeat the point of the 'don't steal my focus'  
> mechanism.

So there really is nothing I can do at the Xlib level to fix this?  
What if I set the window to keepabove, then change it back to not- 
keepabove after it's been raised. That might have the effect of  
bringing the window to the top of the stack, at least. I know at least  
that even though the window doesn't raise in RHEL5, it *does* get  
keyboard focus because the window manager can't mess with my  
XSetInputFocus() call.

I believe that this is due to the fact that XSetInputFocus requests  
are unconditionally granted by the XServer, regardless of the wishes  
of the WM. ( Read more here: http://lwn.net/Articles/148092/ )

Are there really no better suggestions?

Andrew Troschinetz
Applied Research Laboratories

More information about the xorg mailing list