如何改变X-Windows的焦点?

我正在开发基于Motif的旧版Linux应用程序。 我想能够以编程方式更改我们的应用程序的活动窗口。 我可以通过使用XSetInputFocus()函数redirectinput,键盘input开始去那里,但XReconfigureWMWindow()和XRaiseWindow()函数不起作用。

我读过Windowspipe理器试图阻止这种行为,所以试图禁用configurationredirect,但这也不起作用。 任何想法如何使自己的窗口在窗口堆栈之上?

有一个名为wmctrl的小程序(至少在Debian / Ubuntu中是标准发行版),它能够在Windows和桌面上执行许多操作,并处理大量的窗口管理器。 我建议测试它是否在你的环境中工作,如果是的话,偷看它的来源。

你可能会发现这个答案依赖于用户正在使用的窗口管理器,甚至是他们给了窗口管理器的设置。 我喜欢设置我的窗口管理器做“聚焦跟随鼠标”,这意味着你不能把焦点发送到我没有把鼠标放在窗口上,除非你也在那里翘曲鼠标(那个函数叫做XWarpMouse ?)。