static void client_swap_layout_properties(Client *c1, Client *c2) { // Grid 属性交换 double grid_col_per = c1->grid_col_per; double grid_row_per = c1->grid_row_per; int32_t grid_col_idx = c1->grid_col_idx; int32_t grid_row_idx = c1->grid_row_idx; c1->grid_col_per = c2->grid_col_per; c1->grid_row_per = c2->grid_row_per; c1->grid_col_idx = c2->grid_col_idx; c1->grid_row_idx = c2->grid_row_idx; c2->grid_col_per = grid_col_per; c2->grid_row_per = grid_row_per; c2->grid_col_idx = grid_col_idx; c2->grid_row_idx = grid_row_idx; // Master / Stack 属性交换 double master_inner_per = c1->master_inner_per; double master_mfact_per = c1->master_mfact_per; double stack_inner_per = c1->stack_inner_per; c1->master_inner_per = c2->master_inner_per; c1->master_mfact_per = c2->master_mfact_per; c1->stack_inner_per = c2->stack_inner_per; c2->master_inner_per = master_inner_per; c2->master_mfact_per = master_mfact_per; c2->stack_inner_per = stack_inner_per; } static void client_swap_monitors_and_tags(Client *c1, Client *c2) { Monitor *tmp_mon = c2->mon; uint32_t tmp_tags = c2->tags; c2->mon = c1->mon; c1->mon = tmp_mon; c2->tags = c1->tags; c1->tags = tmp_tags; } static void finish_exchange_arrange_and_focus(Client *c1, Client *c2, Monitor *m1, Monitor *m2) { if (m1 != m2) { arrange(c1->mon, false, false); arrange(c2->mon, false, false); } else { arrange(c1->mon, false, false); } wl_list_remove(&c2->flink); wl_list_insert(&c1->flink, &c2->flink); }