【问题标题】:X11 non-clipped child windowsX11 非裁剪子窗口
【发布时间】:2015-09-22 09:54:57
【问题描述】:

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

  1. 父母总是跟在孩子后面
  2. 当父级关闭时,子级会自动关闭
  3. 孩子们在移动时跟随父母

如果答案是否定的,那么我可以模拟 2 和 3,但是 1 呢?

谢谢,
科斯敏。

【问题讨论】:

标签: x11 xlib xcb


【解决方案1】:
  1. 是的(如果您实现自己的复合管理器,则可以覆盖它)
  2. 是的,除非窗口被添加到"save set"
  3. 是的(但再次使用您自己的复合管理器,您可以更改 [所有窗口层次结构的内容] -> [屏幕] 的任何您想要的可视映射)

【讨论】:

  • 1 和 3。好吧,这在预期的荒谬和荒谬程度之内。人们在实践中会覆盖应用程序中的 WM 吗?你能给我一些指针/提示/标准/wm-attributes-to-google 吗?我正在查看 Qt 和 wxWidgets,但我看不到他们这样做(会看起来更多)。
  • 1 & 3 - 从这个角度来看 - 不,不是在应用程序级别。没有标准提示可以表明这一点,因此请考虑“不可能”
  • 谢谢。如果您将您的“是”更改为“否”,那么我会接受答案:O 或者我应该澄清我想先制作应用程序而不是 WM?似乎 X 中的 WM 比应用程序多,所以这个问题可能令人困惑 :) (对不起,在与 X 战斗 2 周后,我忍不住恶作剧,请不要个人认为,我需要一个出口愤怒,这个小盒子看起来很完美)
  • 您的问题一般是关于“X”的,所以我回答了可能的问题 :) 即使仅从应用程序中,您也可以通过获取_NET_WM_CM_Sn 选择来强制当前复合管理器退出,并在应用程序,但我同意,从常规 GUI 应用程序开发人员的角度来看,它有点太奇特了
  • 这听起来很有趣。这是一个很长的转换。对于stackoverflow,但我很感激你的时间,我想试试这个。我接受了答案,但如果您对此有更多详细信息,请将其添加到答案中。谢谢。
【解决方案2】:

最接近 X 中重叠的非裁剪子窗口的是窗口属性 WM_TRANSIENT_FOR。这将创建一个窗口:

  • 不会出现在任务栏上
  • 没有最小化和最大化按钮
  • 将与它的瞬态窗口一起最小化
  • 将始终停留在其瞬态窗口的顶部(最重要)

【讨论】:

  • 请注意,Qt 内部使用此属性来强制执行非剪切关系。在 Qt 5.6.2 中,您必须将 setTransientParent 与瞬态窗口类型一起使用才能具有此行为(“瞬态窗口类型”是以下之一:Dialog、Sheet、Tool、SplashScreen、ToolTip、Drawer、Popup)。
猜你喜欢
  • 1970-01-01
  • 2021-08-03
  • 1970-01-01
  • 2017-02-17
  • 2015-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-20
相关资源
最近更新 更多