X11下XGetWindowAttributes获取窗口位置偏移问题求解
问题描述
我在Ubuntu 20.04系统搭配Gnome桌面环境下,调用XGetWindowAttributes()接口获取窗口位置时,返回结果存在偏移,仿佛窗口外层带有较厚的不可见边距,且不同窗口的偏移量并不统一。
我已经检查过窗口属性的border_width字段,其值始终为0;也尝试调用XTranslateWindowCoordinates()接口做坐标转换修正,但返回的位置结果没有任何改善。
补充相关前提:我通过XGetInputFocus()获取目标窗口,参考公开实现逻辑获取焦点窗口的父窗口。已知Gnome会为窗口绘制投影效果,但该效果对所有窗口的边距影响应当是一致的,无法解释不同窗口偏移量不同的现象。我需要找到获取这类不可见边距尺寸、或是窗口真实屏幕位置的可行方案。
补充调试信息
针对datenwolf的评论建议,我补充窗口树遍历的调试输出:通过XGetInputFocus拿到焦点窗口后,使用XQueryTree遍历窗口树,直到找到父窗口为根窗口的顶层窗口(即下方各列表的最后一项),遍历过程中逐层打印各窗口的坐标、尺寸及窗口名称(若存在),n为窗口树向下遍历的循环索引。
emacs窗口(视觉边框窄,位置偏移量小)
遍历输出如下:
n=1 x=-1 y=-1 w=1 h=1 n=2 x=10 y=45 w=752 h=714 name = emacs@laptopC3 n=3 x=3064 y=104 w=772 h=769
其中n=3对应的窗口位置符合我的双显示器布局坐标,但n=2对应的窗口尺寸更小、坐标完全错误,我无法确认n=1对应的1x1尺寸窗口是什么。
系统终端窗口(视觉边框宽,位置偏移量大)
遍历输出如下:
n=1 x=-1 y=-1 w=1 h=1 n=2 x=2889 y=390 w=786 h=533 name = Terminal
除了n=1对应的异常1x1窗口外,没有其他特殊表现。
Tcl/Tk编写的应用窗口(视觉边框极窄,偏移量极小)
遍历输出如下:
n=1 x=1 y=38 w=1026 h=770 name = PNGShow-6-6 n=2 x=3192 y=234 w=1028 h=809
该场景下不存在前两个案例里n=1对应的1x1异常窗口,目前我没有总结出一致的偏移规律,求可行的排查解决思路。
内容的提问来源于stack exchange,提问作者Ralf
相关产品推荐
相关产品推荐

