【发布时间】:2021-10-28 05:09:36
【问题描述】:
首先,列出我希望我的窗口接收的事件,然后创建我的 窗口,然后我在一个while循环中运行这个事件处理程序。我的目标是在调整窗口大小时打印 hello,但我不明白为什么不打印。这是代码:
uint32_t value_list[] = {
XCB_NONE,
XCB_EVENT_MASK_EXPOSURE | XCB_EVENT_MASK_KEY_PRESS |
XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_RESIZE_REDIRECT,
};
xcb_create_window(
result->connection,
XCB_COPY_FROM_PARENT,
result->window,
screen->root,
0, 0, width, height,
0, XCB_WINDOW_CLASS_INPUT_OUTPUT,
screen->root_visual,
XCB_CW_EVENT_MASK,
value_list);
和
if(intern_window->event) {
switch(intern_window->event->response_type & ~0x80) {
case XCB_EXPOSE: {
xcb_flush(intern_window->connection);
break;
}
case XCB_CLIENT_MESSAGE: {
if( ((xcb_client_message_event_t*)intern_window->event)->data.data32[0] == intern_window->delete_reply->atom ) {
intern_window->closing = true;
free(intern_window->delete_reply);
}
break;
}
case XCB_RESIZE_REQUEST: {
puts("Hello");
break;
}
}
}
【问题讨论】:
-
你想要
XCB_EVENT_MASK_STRUCTURE_NOTIFY(你已经拥有)和事件XCB_CONFIGURE_NOTIFY(你没有)。调整大小请求是另一回事。不过,在您的设置中,您应该会收到调整大小的请求。其他情况(公开和客户端消息)是否有效?见tronche.com/gui/x/icccm/sec-4.html#s-4.2.4