void fallback_arrange(void) { int clients_len = sglib_client_t_len(client_list); if (clients_len == 0) return; uint16_t screen_width = wm_conf.screen->width_in_pixels; uint16_t screen_height = wm_conf.screen->height_in_pixels; uint16_t client_width = screen_width / clients_len; client_t *client = client_list; int i = 0; fprintf(stderr, "Fallback window arrangement is being used. You should define arrange-hook.\n"); while (i < clients_len) { client->rect.x = i * client_width; client->rect.y = 0; client->rect.width = client_width; client->rect.height = screen_height; client->border_width = 0; update_client_geometry(client); ++i; client = client->next; } client_t *focus_client = get_focus_client(); if (focus_client) { draw_border(focus_client); } else if (client_list) { set_focus_client(client_list); draw_border(client_list); } }
static SCM scm_resize_client(SCM client_smob, SCM width, SCM height) { client_t *client = (client_t *)SCM_SMOB_DATA(client_smob); client->rect.width = scm_to_uint16(width); client->rect.height = scm_to_uint16(height); update_client_geometry(client); return SCM_UNSPECIFIED; }
static SCM scm_move_client(SCM client_smob, SCM x, SCM y) { client_t *client = (client_t *)SCM_SMOB_DATA(client_smob); client->rect.x = scm_to_int16(x); client->rect.y = scm_to_int16(y); update_client_geometry(client); return SCM_UNSPECIFIED; }
client_t *manage_window(xcb_window_t window) { client_t *client = client_init(client_alloc()); client->window = window; sglib_client_t_add(&client_list, client); read_client_geometry(client); client->border_width = 0; update_client_geometry(client); xcb_map_window(wm_conf.connection, client->window); run_arrange_hook(); return client; }