添加单独的函数来初始化 xcb

This commit is contained in:
2025-08-24 21:46:02 +08:00
parent 52cadbda34
commit a4f39d49f9
3 changed files with 16 additions and 3 deletions

View File

@@ -11,6 +11,7 @@
#define WINDOW_NONE XCB_WINDOW_NONE #define WINDOW_NONE XCB_WINDOW_NONE
bool has_other_wm_running(void); bool has_other_wm_running(void);
void setup_xcb(void);
int get_xcb_connection_fd(void); int get_xcb_connection_fd(void);
void flush_xcb_connection(void); void flush_xcb_connection(void);

View File

@@ -945,6 +945,7 @@ int main(int argc, char *argv[]) {
die("another window manager is already running"); die("another window manager is already running");
} }
setup_xcb();
init_monitors(); init_monitors();
init_color_set(); init_color_set();
init_monitor_bar(); init_monitor_bar();

View File

@@ -42,6 +42,20 @@ bool has_other_wm_running(void) {
return false; return false;
} }
void setup_xcb(void) {
uint32_t event_mask =
XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT | XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY |
XCB_EVENT_MASK_BUTTON_PRESS | XCB_EVENT_MASK_POINTER_MOTION |
XCB_EVENT_MASK_ENTER_WINDOW | XCB_EVENT_MASK_LEAVE_WINDOW |
XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_PROPERTY_CHANGE;
uint32_t mask = XCB_CW_EVENT_MASK;
xcb_params_cw_t params = {.event_mask = event_mask};
xcb_aux_change_window_attributes(conn, screen->root, mask, &params);
init_icccm_extension();
init_ewmh_extension();
}
/** /**
* @brief 获取 xcb 链接对应的文件描述符 * @brief 获取 xcb 链接对应的文件描述符
*/ */
@@ -169,9 +183,6 @@ void set_wallpaper(uint32_t *wallpaper_data) {
* @note: 返回的窗口列表数据使用完后使用 free_window_list 释放 * @note: 返回的窗口列表数据使用完后使用 free_window_list 释放
*/ */
window_list_t *scan_window_list(void) { window_list_t *scan_window_list(void) {
init_icccm_extension();
init_ewmh_extension();
xcb_query_tree_cookie_t cookie = xcb_query_tree(conn, screen->root); xcb_query_tree_cookie_t cookie = xcb_query_tree(conn, screen->root);
xcb_query_tree_reply_t *tree_reply = xcb_query_tree_reply(conn, cookie, NULL); xcb_query_tree_reply_t *tree_reply = xcb_query_tree_reply(conn, cookie, NULL);
if (!tree_reply) return NULL; if (!tree_reply) return NULL;