首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用XCB获取活动窗口的WId

用XCB获取活动窗口的WId
EN

Stack Overflow用户
提问于 2017-04-25 10:47:46
回答 2查看 2.1K关注 0票数 1

使用XCB获得活动窗口(具有输入焦点的窗口)的正确方法是什么?

代码语言:javascript
复制
reply = xcb_get_input_focus_reply(connection, xcb_get_input_focus(connection), nullptr);
std::cout << "WId: " << reply->focus;

这似乎有时是工作,有时不是。

我还看到有人提到查询_NET_ACTIVE_WINDOW根窗口属性,但我不知道是如何做到的,XCB是否总是支持它?

编辑:上面使用xcb_get_input_focus的方法只是其中的一部分,在得到回复->焦点之后,您需要通过xcb_query_tree跟踪父窗口。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-27 20:00:12

这个解决方案对我来说是可行的,它或多或少是从一些X11代码迁移到XCB的。基本上获取焦点窗口并跟踪父窗口的路径,直到窗口id等于父窗口或根id为止,这就是顶层窗口。

代码语言:javascript
复制
WId ImageGrabber::getActiveWindow()
{
    xcb_connection_t* connection = QX11Info::connection();
    xcb_get_input_focus_reply_t* focusReply;
    xcb_query_tree_cookie_t treeCookie;
    xcb_query_tree_reply_t* treeReply;

    focusReply = xcb_get_input_focus_reply(connection, xcb_get_input_focus(connection), nullptr);
    xcb_window_t window = focusReply->focus;
    while (1) {
        treeCookie = xcb_query_tree(connection, window);
        treeReply = xcb_query_tree_reply(connection, treeCookie, nullptr);
        if (!treeReply) {
            window = 0;
            break;
        }
        if (window == treeReply->root || treeReply->parent == treeReply->root) {
            break;
        } else {
            window = treeReply->parent;
        }
        free(treeReply);
    }
    free(treeReply);
    return window;
}
票数 2
EN

Stack Overflow用户

发布于 2017-04-26 13:19:13

据我所知,符合EWMH标准的窗口管理器应该将根窗口的_NET_ACTIVE_WINDOW属性设置为当前活动窗口的窗口ID。

为了得到它,

  1. 使用xcb_intern_atom获取_NET_ACTIVE_WINDOW的原子值
  2. 获取根窗口ID,例如使用xcb_setup_roots_iterator(xcb_get_setup(connection)).data->root
  3. 使用xcb_get_propertyxcb_get_property_replyxcb_get_property_value获取根窗口的属性值。

_NET_ACTIVE_WINDOW有类型的CARDINAL,就XCB而言,其大小为32位。

或者您可以使用libxcb-ewmh将此任务封装到xcb_ewmh_get_active_window函数中。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43608567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档