linux x11 获取当前窗口,c-X11:移动窗口时获得通知

我的应用程序需要知道窗口何时移动(我需要知道我的应用程序窗口相对于屏幕的确切位置(根窗口/绝对位置)-例如,xcb_translate_coordinates返回的dst_window设置为屏幕的根窗口).

问题是,如果我的窗口被用户移动,我需要接收一个事件.我已按照此处的建议在事件掩码中添加了XCB_EVENT_MASK_STRUCTURE_NOTIFY,我的应用仅在更改了其相对于窗口管理器框架的相对位置时才获取事件(反过来,X服务器不会向我的应用触发任何事件(如果窗口是由用户移动的,因为它不会更改窗口管理器框架的相对位置).有关其他信息,这是窗口创建代码:

uint32_t events = XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_KEY_PRESS;

xcb_create_window(conn, XCB_COPY_FROM_PARENT, main_window, scr->root, 0, 0, width, height, 0, XCB_WINDOW_CLASS_INPUT_OUTPUT,

scr->root_visual, XCB_CW_EVENT_MASK , &events);

xcb_map_window(conn, main_window);

我已经在桌面会话和Xephyr中使用Xfwm4,Openbox和metacity进行了尝试,无论是在合成模式下还是在非合成模式下,都产生相同的结果.

有什么解决方案可以使我收到有关窗口移动事件的通知?我不想启用override_redirect,因为我还需要由窗口管理器来管理我的应用程序.

解决方法:

最后,经过一番研究,事实证明,大多数窗口管理器,至少是那些进行父项,堆栈和/或合成的窗口管理器,都会将其合成位标志设置为true(例如,将XBB的response_type设置为MSB)发送ConfigureNotify事件给其客户端,其x和y设置为客户端窗口的绝对位置.已通过Xfwm4,Openbox,Metacity和KWin确认.

标签:xorg,xcb,linux,c-4,x11

来源: https://codeday.me/bug/20191111/2018424.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值