在 X11 窗口系统中,_NET_FRAME_EXTENTS
是一个窗口属性,用于描述窗口管理器为窗口装饰(如边框、标题栏等)添加的外部边框的大小。这个属性通常由窗口管理器设置,并且可以通过 X11 协议查询。
_NET_FRAME_EXTENTS
属性_NET_FRAME_EXTENTS
属性包含四个整数值,分别表示窗口的左、右、上、下边框的宽度。这些值可以帮助应用程序了解窗口管理器为窗口添加的装饰的大小,从而进行适当的布局调整。
_NET_FRAME_EXTENTS
XCB(X C Binding)是一个用于与 X 服务器通信的库。使用 XCB 查询 _NET_FRAME_EXTENTS
属性的代码示例如下:
#include <xcb/xcb.h>
#include <xcb/xcb_atom.h>
#include <stdio.h>
#include <stdlib.h>
void get_net_frame_extents(xcb_connection_t *conn, xcb_window_t window) {
xcb_intern_atom_cookie_t cookie = xcb_intern_atom(conn, 0, strlen("_NET_FRAME_EXTENTS"), "_NET_FRAME_EXTENTS");
xcb_intern_atom_reply_t *reply = xcb_intern_atom_reply(conn, cookie, NULL);
if (!reply) {
fprintf(stderr, "Failed to get _NET_FRAME_EXTENTS atom.\n");
return;
}
xcb_atom_t net_frame_extents = reply->atom;
free(reply);
xcb_get_property_cookie_t prop_cookie = xcb_get_property(conn, 0, window, net_frame_extents, XCB_ATOM_CARDINAL, 0, 4);
xcb_get_property_reply_t *prop_reply = xcb_get_property_reply(conn, prop_cookie, NULL);
if (!prop_reply) {
fprintf(stderr, "Failed to get _NET_FRAME_EXTENTS property.\n");
return;
}
if (xcb_get_property_value_length(prop_reply) == 4 * sizeof(uint32_t)) {
uint32_t *extents = (uint32_t *)xcb_get_property_value(prop_reply);
printf("Left: %u, Right: %u, Top: %u, Bottom: %u\n", extents[0], extents[1], extents[2], extents[3]);
} else {
fprintf(stderr, "Unexpected property value length.\n");
}
free(prop_reply);
}
int main() {
xcb_connection_t *conn = xcb_connect(NULL, NULL);
if (xcb_connection_has_error(conn)) {
fprintf(stderr, "Failed to connect to X server.\n");
return -1;
}
// Replace with the actual window ID you want to query
xcb_window_t window = 0x02000007;
get_net_frame_extents(conn, window);
xcb_disconnect(conn);
return 0;
}
如果你在使用 XCB 查询 _NET_FRAME_EXTENTS
属性时遇到不一致的回报,可能有以下几个原因:
_NET_FRAME_EXTENTS
属性。并不是所有的窗口管理器都支持这个属性。_NET_FRAME_EXTENTS
属性。如果你在窗口创建后立即查询,可能会得到不完整或错误的结果。xprop
工具手动检查窗口的 _NET_FRAME_EXTENTS
属性,确保窗口管理器正确设置了这个属性。xprop -id <window_id> _NET_FRAME_EXTENTS
_NET_FRAME_EXTENTS
属性,确保窗口管理器有足够的时间设置属性。
没有搜到相关的沙龙
领取专属 10元无门槛券
手把手带您无忧上云