2011-03-22 66 views
6

FvwmButtons(fvwm窗口管理器的一個模塊)具有Swallow函數,它將應用程序的窗口嵌入到面板中。將應用程序嵌入窗口

我必須用Motif和Xlib做這樣的事情。我想將Xclock嵌入到我的應用程序中。我想我必須改變嵌入式應用的窗口ID。

我該怎麼做?

回答

5

唯一受支持和可靠的機制是XEmbed,但它需要嵌入式應用程序進行合作。沒有合作的應用程序,你處於一個可怕的黑客世界。

你需要做的最基本的事情是XReparentWindow(),但問題是你正在與窗口管理器打交道,這也將要重置窗口。您也可能會使應用程序混淆,該應用程序將期待ICCCM和EWMH行爲,並期望父窗口成爲WM框架。

真的很古老的GNOME 1.x版本的gnome面板有一個吞嚥功能,你可以嘗試從可能竊取黑客。

沒有相當廣泛的X知識,這將是痛苦的,甚至不可能使100%可靠。

+0

有趣!謝謝! 'XReparentWindow()'是我想要的。現在我需要找到正確的窗口。我正在嘗試'XQueryTree()',但我不知道如何獲得特定的窗口。 – mghis 2011-03-23 17:43:54

+1

得到一個特定的窗口,你可能想看看類提示(XGetClassHint)。您可以找到頂層窗口(與窗口管理器框架相反),因爲它們具有WM_STATE屬性。 – 2011-03-23 19:23:19

2

它看起來像你正在尋找XEmbed協議,記錄here

+0

謝謝,它看起來我需要什麼。我想我可以理解你所鏈接的規範,但我想如果你可以發佈一些示例代碼... – mghis 2011-03-22 18:15:58

相關問題