gpt4 book ai didi

xlib - 如何使用 Xlib/XCB 获取内部和外部窗口尺寸?

转载 作者:行者123 更新时间:2023-12-05 00:47:19 35 4
gpt4 key购买 nike

有没有可靠的方法来获得顶部的内部和外部矩形
带有 XCB/Xlib 的级别窗口? (IOW 框架和客户端矩形)。

这是我尝试过的:

  • xcb_get_geometry 始终返回初始尺寸,即使在
    窗口被调整大小(什么给出?)
  • 我想我会反复调用 xcb_query_tree 直到找到
    窗口的框架窗口 - 这是这样做的方式吗?我想 ICCCM/EWMH
    应该提供这个,但找不到任何东西。有没有其他
    标准/非标准?无论如何这不起作用
    compiz/ubuntu10 因为 xcb_query_tree 将客户端窗口报告为
    拥有 root = parent(在正常的 ubuntu wm 下,窗口会正确
    重新养育)。
  • xcb_translate_coordinates() 似乎是唯一可靠的方法
    在 2007 年获得基于根的坐标[1]——现在仍然如此吗? IE。是
    XCB_CONFIGURE_NOTIFY 与 WM 的非标准?

  • [1] http://fixunix.com/xwindows/91652-finding-position-top-level-windows.html

    最佳答案

    这是部分答案,因为它仅解释了如何找到窗口的内部尺寸。另外我不确定这是否是规范的方式,但它对我有用。

    您可以订阅 XCB_EVENT_MASK_RESIZE_REDIRECT创建窗口时的事件:

    xcb_window_t           window    = xcb_generate_id          (connection);
    const xcb_setup_t *setup = xcb_get_setup (connection);
    xcb_screen_t *screen = xcb_setup_roots_iterator (setup).data;
    uint32_t mask = XCB_CW_EVENT_MASK;
    uint32_t valwin[1] = { XCB_EVENT_MASK_EXPOSURE
    | XCB_EVENT_MASK_RESIZE_REDIRECT };

    xcb_create_window(
    connection,
    XCB_COPY_FROM_PARENT,
    window,
    screen->root,
    0, 0,
    800, 600,
    0,
    XCB_WINDOW_CLASS_INPUT_OUTPUT,
    screen->root_visual,
    mask, valwin);
    xcb_map_window(connection, window);
    xcb_flush(connection);

    在事件循环中,您可以跟踪调整大小:

    xcb_generic_event_t *event;
    uint16_t width = 0, height = 0;
    while ((event = xcb_wait_for_event(connection)) != NULL) {
    switch (event->response_type & ~0x80) {
    case XCB_EXPOSE: {
    /* ... */
    break;
    }
    case XCB_RESIZE_REQUEST: {
    auto resize = (xcb_resize_request_event_t*) event;
    if (resize->width > 0) width = resize->width;
    if (resize->height > 0) height = resize->height;
    break;
    }
    default:
    break;
    }
    free(event);
    xcb_flush(connection);
    }

    请注意,当您使用 xcb_configure_window 从应用程序代码启动调整大小时,我不确定是否会发出此事件。例如。我从未测试过它,只是更新了 widthheightxcb_configure_window 的包装函数中.

    关于xlib - 如何使用 Xlib/XCB 获取内部和外部窗口尺寸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31203412/

    35 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com