X11非裁剪子窗口

4

X是否有非裁剪子窗口的概念?在Windows和OSX中,这些行为是:

  1. 父级始终位于其子级后面
  2. 当父级关闭时,子级会自动关闭
  3. 移动时,子级跟随父级

如果答案是否定的,那么我可以模拟2和3,但第1个问题怎么办?

谢谢,
Cosmin。


1号上有一个未回答的问题,所以我猜这也不会被回答 https://dev59.com/a4Pba4cB1Zd3GeqPuJSL - user519179
2个回答

4

在X中,最接近重叠非剪切子窗口的方法是使用窗口属性WM_TRANSIENT_FOR。这将创建一个窗口,它具有以下特点:

  • 不会出现在任务栏上
  • 没有最小化和最大化按钮
  • 与其暂时打开的窗口一起被最小化
  • 始终处于其暂时打开的窗口之上(最重要的)

请注意,Qt 内部使用此属性来强制执行非剪切关系。在 Qt 5.6.2 中,您必须使用 setTransientParent 和瞬态窗口类型一起使用才能实现此行为(“瞬态窗口类型”之一为:Dialog、Sheet、Tool、SplashScreen、ToolTip、Drawer、Popup)。 - fkorsa

-1
  1. 是的(如果您实现自己的组合管理器,可以覆盖此功能)
  2. 是的,除非窗口被添加到"保存集"中。
  3. 是的(但是,如果使用自己的组合管理器,您可以根据需要更改所有窗口层次结构的内容 -> 屏幕的视觉映射方式)

2
1&3。好的,这在荒谬和可笑的预期水平内。人们在实践中覆盖应用程序中的WM吗?您能给我一些指针/提示/标准/ wm-attributes-to-google 吗?我正在查看Qt和wxWidgets,但我看不到它们在做这个(会再看看)。 - user519179
1&3-从这个角度来看-不,应用程序层面上不行。没有标准提示来指示这一点,因此请考虑“不可能”。 - Andrey Sidorov
谢谢。如果您把“是”改成“否”,那我就接受这个答案 :O 或者我应该澄清一下,我想先制作一个应用程序而不是 WM 吗?在 X 中似乎有更多的 WM 而不是应用程序,所以也许问题有点混淆 :) (抱歉,在与 X 斗争了两周后,我无法控制自己的嘲讽,请不要把它当个人攻击,我需要一个发泄口来释放我的愤怒,这个小框看起来很完美)。 - user519179
比如说,我想知道:如果我在屏幕上选择了某个东西,那么我是必须管理该屏幕上的所有窗口,还是只要在保持选择的时间内管理自己的窗口呢?我应该保持选择多长时间?是否会有注意事项(例如,如果我的应用程序崩溃,WM无法正确恢复)? - user519179
现在大多数多显示器设置都使用一个逻辑屏幕(通过Xinerama扩展),因此您可能永远不会以前面评论中提到的意义看到多个屏幕。有关整个合成和合成管理器的概述,请阅读http://www.talisman.org/~erlkonig/misc/x11-composite-tutorial/。很乐意回答更具体的问题 :) - Andrey Sidorov
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接