Ell*_*Ell 9 c++ linux window-managers 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);
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经收集到Atom是一种类似于Window和Display的标识符,但我无法弄清楚Hints结构或"_MOTIF_WM_HINTS"的来源.谁能为我解释所有这些代码?在此先感谢,ell.
很难得到任何类型的"官方"标准或类似标准,但_MOTIF_WM_HINTS属性似乎确实来自...... Motif工具包(好吧,你猜对了:-)).查看MotifZone网站.
警告:接下来的内容是不完整的,但我希望能有所启发.
工具包的XmNmwmDecorations,XmNmwmFunctions和XmNmwmInputMode函数的文档指示该属性是用于控制窗口管理器应提供/给予的外观,函数(调整大小,移动,...)和输入模式的各种值的位掩码.窗户.参见man vendorshell,或者Oreilly Motif参考书,Vol6a第16章.
属性是整个X11的一部分.窗口可以在其上定义任意数量的属性.属性有一个名称,但设置/获取属性是通过"atom"(排序标识符)完成的,以避免为每个get/set调用在线路上发送整个字符串.请参见属性和原子
当前窗口管理器(如果有)可以通过设置适当的事件过滤器并对PropertyNotify事件进行操作来响应窗口属性更改,或者只是检查窗口在映射(或移动或其他)时所具有的属性.如果窗口管理器知道_MOTIF_WM_HINT属性,它将解释那些并且(希望)做你想要的.(注意:我不确定是否将该权限转移到窗口管理器,或者其他窗口是否可以监听那些"PropertyNotify"事件.不确定这与您的问题实际相关.)
因此,只要您的窗口管理器知道_MOTIF_WM_HINTS属性,您所使用的代码就可以正常工作.
首先使用XInternAtom获取原子(标识符/快捷方式),并在通过MapWindow()实际绘制窗口之前通过XChangeProperty()设置其值(如果在MapWindow()之后执行此操作,则不确定是否可行,这可能取决于你的窗口管理器).
[编辑:将.decorations部分设置为零会清除所有装饰位,因此这要求窗口管理器基本上单独留下你的边界.]
我无法想出具有该结构定义的"官方".它在openmotif-2.3.3发行版的lib/X11/MwmUtils.h中定义.不确定如何使用.flags条目(找不到我生活中的代码: - /)但我怀疑它用于表示你是哪个{decoration,function,inputMode}"sub-properties"作用于.(不要相信我的话.)
另外,使用_MOTIF_WM_HINTS可能不是您现在最好的选择.您是否在freedesktop上查看了Extended Window Manager提示规范和其他信息/标准/草稿?我打赌大多数"现代"窗口管理器/桌面环境/厨房水槽都倾向于坚持这一点,而不是保持与Motif的向后兼容性.一切都取决于我猜你编码的内容.
谢谢阅读 :-)
| 归档时间: |
|
| 查看次数: |
6541 次 |
| 最近记录: |