Compare commits
3 Commits
8f892633cc
...
a4f39d49f9
| Author | SHA1 | Date | |
|---|---|---|---|
|
a4f39d49f9
|
|||
|
52cadbda34
|
|||
|
54fcb27457
|
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -903,6 +903,9 @@ gboolean handle_xcb_event(GIOChannel *channel, GIOCondition condition,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void cleanup(void) {
|
void cleanup(void) {
|
||||||
|
g_main_loop_unref(loop);
|
||||||
|
loop = NULL;
|
||||||
|
|
||||||
monitor_t *m = monitors;
|
monitor_t *m = monitors;
|
||||||
client_t *c = m->clients;
|
client_t *c = m->clients;
|
||||||
while (m) {
|
while (m) {
|
||||||
@@ -942,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();
|
||||||
|
|||||||
@@ -31,16 +31,10 @@ bool has_other_wm_running(void) {
|
|||||||
xcb_screen_iterator_t iter = xcb_setup_roots_iterator(setup);
|
xcb_screen_iterator_t iter = xcb_setup_roots_iterator(setup);
|
||||||
screen = iter.data;
|
screen = iter.data;
|
||||||
uint32_t mask = XCB_CW_EVENT_MASK;
|
uint32_t mask = XCB_CW_EVENT_MASK;
|
||||||
xcb_params_cw_t params = {
|
xcb_params_cw_t params = {.event_mask = XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT};
|
||||||
.event_mask = XCB_EVENT_MASK_LEAVE_WINDOW | XCB_EVENT_MASK_ENTER_WINDOW |
|
|
||||||
XCB_EVENT_MASK_POINTER_MOTION |
|
|
||||||
XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT |
|
|
||||||
XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY,
|
|
||||||
};
|
|
||||||
xcb_void_cookie_t cookie =
|
xcb_void_cookie_t cookie =
|
||||||
xcb_aux_change_window_attributes_checked(conn, screen->root, mask, ¶ms);
|
xcb_aux_change_window_attributes_checked(conn, screen->root, mask, ¶ms);
|
||||||
xcb_generic_error_t *error = xcb_request_check(conn, cookie);
|
if (xcb_request_check(conn, cookie)) {
|
||||||
if (error) {
|
|
||||||
xcb_disconnect(conn);
|
xcb_disconnect(conn);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -48,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, ¶ms);
|
||||||
|
|
||||||
|
init_icccm_extension();
|
||||||
|
init_ewmh_extension();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 获取 xcb 链接对应的文件描述符
|
* @brief 获取 xcb 链接对应的文件描述符
|
||||||
*/
|
*/
|
||||||
@@ -175,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;
|
||||||
|
|||||||
Reference in New Issue
Block a user