ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

c-X11:移动窗口时获得通知

2019-11-11 08:51:04  阅读:435  来源: 互联网

标签:xorg xcb linux c-4 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有