【发布时间】:2011-03-22 17:04:05
【问题描述】:
FvwmButtons(fvwm 窗口管理器的一个模块)具有 Swallow 功能,嵌入 将应用程序的窗口转换为面板。
我必须用 Motif 和 Xlib 做类似的事情。我想在我的应用程序中嵌入一个 Xclock。我想我必须更改嵌入式应用程序的 Window ID。
我该怎么做?
【问题讨论】:
FvwmButtons(fvwm 窗口管理器的一个模块)具有 Swallow 功能,嵌入 将应用程序的窗口转换为面板。
我必须用 Motif 和 Xlib 做类似的事情。我想在我的应用程序中嵌入一个 Xclock。我想我必须更改嵌入式应用程序的 Window ID。
我该怎么做?
【问题讨论】:
唯一受支持且可靠的机制是 XEmbed,但它需要嵌入式应用程序配合。如果没有合作的应用程序,您将进入一个可怕的黑客世界。
您需要做的基本事情是 XReparentWindow() 但问题是您正在与窗口管理器作斗争,它也想重新设置窗口的父级。您还可能会混淆应用程序,它会期望 ICCCM 和 EWMH 行为,并期望父窗口是 WM 框架。
真正古老的 GNOME 1.x 版本的 gnome 面板有一个吞咽功能,您可以尝试从中窃取黑客信息。
如果没有相当广泛的 X 知识,这将是痛苦的,甚至 不一定能做到 100% 可靠。
【讨论】:
XReparentWindow() 是我想要的。现在我需要找到正确的窗口。我正在尝试使用XQueryTree(),但我不知道如何获取特定窗口。