【发布时间】:2019-09-19 05:37:29
【问题描述】:
我想通过 XCB 创建一个无框窗口。 我将 XCB_CW_OVERRIDE_REDIRECT 掩码设置为 true。 它可以工作,但是键盘事件不能工作。
uint32_t value_mask, value_list[32];
window = xcb_generate_id(connection);
value_mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK;
value_list[0] = screen->black_pixel;
value_list[1] =
XCB_EVENT_MASK_KEY_RELEASE |
XCB_EVENT_MASK_KEY_PRESS |
XCB_EVENT_MASK_EXPOSURE |
XCB_EVENT_MASK_STRUCTURE_NOTIFY |
XCB_EVENT_MASK_POINTER_MOTION |
XCB_EVENT_MASK_BUTTON_PRESS |
XCB_EVENT_MASK_BUTTON_RELEASE;
if (settings.fullscreen)
{
width = destWidth = screen->width_in_pixels;
height = destHeight = screen->height_in_pixels;
}
xcb_create_window(connection,
XCB_COPY_FROM_PARENT,
window, screen->root,
0, 0, width, height, 0,
XCB_WINDOW_CLASS_INPUT_OUTPUT,
screen->root_visual,
value_mask, value_list);
const uint32_t values[] ={true,};
xcb_change_window_attributes (connection, window, XCB_CW_OVERRIDE_REDIRECT, values);
有人知道如何通过 xcb 创建无框窗口而不会出现按键事件错误吗?
【问题讨论】:
-
如果你真的只是想摆脱WM的窗户装饰,你应该使用主题提示来请求。 OverrideRedirect 做了一些不同的事情(而且做得更多)。