2011-02-27 25 views
7

以下代碼如何刪除窗口邊框?Xlib這是如何(去除窗飾)的工作?

//note the struct is declared elsewhere, is here just for clarity. 
//code is from [http://tonyobryan.com/index.php?article=9][1] 
typedef struct Hints 
{ 
    unsigned long flags; 
    unsigned long functions; 
    unsigned long decorations; 
    long   inputMode; 
    unsigned long status; 
} Hints; 

//code to remove decoration 
Hints hints; 
Atom property; 
hints.flags = 2; 
hints.decorations = 0; 
property = XInternAtom(display, "_MOTIF_WM_HINTS", true); 
XChangeProperty(display,window,property,property,32,PropModeReplace,(unsigned char *)&hints,5); 
XMapWindow(display, window); 

到目前爲止,我已經收集是一個Atom是一種類似於窗口,並顯示標識的,但我無法揣摩出提示結構或「_MOTIF_WM_HINTS」是從哪裏來的。任何人都可以爲我解釋所有這些代碼嗎?在此先感謝,埃爾。

+0

這是你的信息來源,或者目的? http://tonyobryan.com/index.php?article=9 – xanatos

+0

這是我的源代碼片段。提示結構在其他地方聲明,但爲了清晰起見,此處顯示。我讀過那篇文章,並沒有解釋提示結構(「我認爲這個結構來自Motif,但我不確定」......) – Ell

+0

是的,它其實不是我的源頭,好點。 – Ell

回答

9

這是很難得的任何形式的「官方」 -looking標準或這樣的,但 _MOTIF_WM_HINTS屬性似乎來自於... Motif工具包(OK,你 猜到:-))。 見the MotifZone site

警告:接下來是不完整的,但應該灑一些我希望的光。

文檔爲XmNmwmDecorations,XmNmwmFunctions和XmNmwmInputMode工具包的 功能表示該屬性是用來控制外觀的不同 值的位掩碼,函數(調整大小,移動,...)和輸入 模式,該窗口管理員應該提供/給窗口。 見man vendorshellOreilly Motif reference books, Vol6a chapter 16

屬性是整個X11的一部分。一個窗口可以有任何數量的 屬性定義在它上面。屬性有一個名稱,但通過「原子」(排序的標識符)完成設置/獲取 屬性,以避免在每次get/set調用時在線路上發送整個字符串 。 參見Properties and Atoms

當前窗口管理器(如果有的話)可向窗口屬性通過設置適當的事件過濾器和作用於PropertyNotify 事件,或者簡單地檢查,當它被映射窗口具有屬性反應 改變(或移動, 管他呢)。如果窗口管理器知道_MOTIF_WM_HINT屬性,它會解釋這些和(希望)做你想做的事情。 (注:我不是entierly知道這權限下放給窗口 經理,或者其他窗口可以聽到那些「PropertyNotify」事件不 肯定這是你的問題實際上是相關的)

所以只要你的窗口管理器知道 關於_MOTIF_WM_HINTS屬性,你的代碼工作得很好。

你開始通過獲取原子 (標識符/快捷方式),它與XInternAtom,並設定通過XChangeProperty() 值之前,通過MapWindow()(實際上是繪製窗口不知道是否會 工作,如果你在MapWindow()之後執行,可能取決於您的窗口 manager)。

[編輯:在.decorations部分設爲零清除所有的裝飾位,所以這要求該窗口管理器留下您的邊界地獄獨自一人,基本上]

我不能想出什麼地方「官方「與該結構的定義。它在openmotif-2.3.3發行版的lib/X11/MwmUtils.h中定義。不知道如何使用.flags條目(找不到我的生活的代碼: - /),但我懷疑它是用來表明你是{decoration,function,inputMode}「子屬性」的哪一個作用於。 (不要爲此說我的話。)

作爲一個附註,使用_MOTIF_WM_HINTS可能不是您現在最好的選擇 。你有沒有在freedesktop上看過Extended Window Manager hints specification和其他信息/標準/草案?我會打賭大多數「現代」窗口管理員/桌面環境/廚房水槽將傾向於堅持,而不是保持與Motif的向後兼容性。所有取決於你想要編碼的內容。

感謝您閱讀:-)

+0

感謝所有這些提示,並且我將研究你給我的所有鏈接! – Ell

+1

+1非常好的解釋! – Venemo