简体   繁体   English

如何防止重现窗口阻止X会话?

[英]How to prevent reparented window blocking X session?

I reparent an external window into Qt application ( XReparentWindow, XMapRaised, XMoveResizeWindow ). 我将外部窗口重新放置到Qt应用程序中( XReparentWindow, XMapRaised, XMoveResizeWindow )。 It works, but when I click to that reparented window the system locks (no mouse or keyboard events), expect of may be some input inside the reparented window or may be my application. 它可以正常工作,但是当我单击该父窗口时,系统锁定(没有鼠标或键盘事件),期望的可能是该父窗口内部的某些输入,或者是我的应用程序。

Trying to embed, for example, gedit and clicking into it leads to keyboard events only in gedit (and even global Awesome's hotkeys disabled) and no mouse clicks anywhere (unless I close embedded gedit using Ctrl+Q). 例如,尝试嵌入gedit并单击它会导致仅在gedit中发生键盘事件(甚至禁用了全局Awesome的热键),并且没有鼠标单击的任何地方(除非我使用Ctrl + Q关闭嵌入式gedit)。

The same if using QX11EmbedContainer. 如果使用QX11EmbedContainer,则相同。 Even if do setEnabled(false) to it. 即使对它setEnabled(false)

Why it locks up? 为什么锁起来? How to prevent this lockup or how to disable input processing for some X window? 如何防止这种锁定或如何禁用某些X窗口的输入处理?

Reparenting a window into one own's application is covered by the XEmbed specification. XEmbed规范涵盖了使窗口进入自己的应用程序。 If you read that spec, you'll see, that some additional work is to be done to make this work: 如果您阅读该规范,将会看到要完成这项工作,还需要做一些额外的工作:

http://standards.freedesktop.org/xembed-spec/xembed-spec-latest.html http://standards.freedesktop.org/xembed-spec/xembed-spec-latest.html

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM