【问题标题】:Embed an app into a window将应用程序嵌入到窗口中
【发布时间】:2011-03-22 17:04:05
【问题描述】:

FvwmButtons(fvwm 窗口管理器的一个模块)具有 Swallow 功能,嵌入 将应用程序的窗口转换为面板。

我必须用 Motif 和 Xlib 做类似的事情。我想在我的应用程序中嵌入一个 Xclock。我想我必须更改嵌入式应用程序的 Window ID。

我该怎么做?

【问题讨论】:

    标签: linux unix x11 xlib motif


    【解决方案1】:

    唯一受支持且可靠的机制是 XEmbed,但它需要嵌入式应用程序配合。如果没有合作的应用程序,您将进入一个可怕的黑客世界。

    您需要做的基本事情是 XReparentWindow() 但问题是您正在与窗口管理器作斗争,它也想重新设置窗口的父级。您还可能会混淆应用程序,它会期望 ICCCM 和 EWMH 行为,并期望父窗口是 WM 框架。

    真正古老的 GNOME 1.x 版本的 gnome 面板有一个吞咽功能,您可以尝试从中窃取黑客信息。

    如果没有相当广泛的 X 知识,这将是痛苦的,甚至 不一定能做到 100% 可靠。

    【讨论】:

    • 有趣!谢谢! XReparentWindow() 是我想要的。现在我需要找到正确的窗口。我正在尝试使用XQueryTree(),但我不知道如何获取特定窗口。
    • 要获得一个特定的窗口,您可能想查看类提示 (XGetClassHint)。您可以定位顶级窗口(与窗口管理器框架相反),因为它们具有 WM_STATE 属性。
    【解决方案2】:

    看起来您正在寻找XEmbed 协议,记录在here

    【讨论】:

    • 谢谢,它看起来是我需要的。我想我可以理解您链接的规范,但是如果您可以发布一些示例代码,我想...
    猜你喜欢
    • 2017-03-17
    • 2012-06-06
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 2018-07-20
    • 2011-06-04
    相关资源
    最近更新 更多