+ if (!wa) {
+ DNPRINTF(SWM_D_MISC, "print_win_geom: window not found: 0x%x\n",
+ w);
+ return;
+ }
+
+ DNPRINTF(SWM_D_MISC, "print_win_geom: window: 0x%x, root: 0x%x, "
+ "depth: %u, (x,y) w x h: (%d,%d) %d x %d, border: %d\n",
+ w, wa->root, wa->depth, wa->x, wa->y, wa->width, wa->height,
+ wa->border_width);
+
+ free(wa);
+}
+#endif
+
+#ifdef SWM_DEBUG
+char *
+get_stack_mode_name(uint8_t mode)
+{
+ char *name;
+
+ switch(mode) {
+ case XCB_STACK_MODE_ABOVE:
+ name = "Above";
+ break;
+ case XCB_STACK_MODE_BELOW:
+ name = "Below";
+ break;
+ case XCB_STACK_MODE_TOP_IF:
+ name = "TopIf";
+ break;
+ case XCB_STACK_MODE_BOTTOM_IF:
+ name = "BottomIf";
+ break;
+ case XCB_STACK_MODE_OPPOSITE:
+ name = "Opposite";
+ break;
+ default:
+ name = "Unknown";
+ }
+
+ return name;
+}
+#endif
+
+void
+configurerequest(xcb_configure_request_event_t *e)
+{
+ struct ws_win *win;
+ struct swm_region *r = NULL;
+ int new = 0, i = 0;
+ uint16_t mask = 0;
+ uint32_t wc[7] = {0};
+
+ if ((win = find_window(e->window)) == NULL)
+ if ((win = find_unmanaged_window(e->window)) == NULL)
+ new = 1;
+
+#ifdef SWM_DEBUG
+ if (swm_debug & SWM_D_EVENT) {
+ print_win_geom(e->window);
+
+ DNPRINTF(SWM_D_EVENT, "configurerequest: window: 0x%x, "
+ "parent: 0x%x, new: %s, value_mask: %u { ", e->window,
+ e->parent, YESNO(new), e->value_mask);
+ if (e->value_mask & XCB_CONFIG_WINDOW_X)
+ DPRINTF("X: %d ", e->x);
+ if (e->value_mask & XCB_CONFIG_WINDOW_Y)
+ DPRINTF("Y: %d ", e->y);
+ if (e->value_mask & XCB_CONFIG_WINDOW_WIDTH)
+ DPRINTF("W: %u ", e->width);
+ if (e->value_mask & XCB_CONFIG_WINDOW_HEIGHT)
+ DPRINTF("H: %u ", e->height);
+ if (e->value_mask & XCB_CONFIG_WINDOW_BORDER_WIDTH)
+ DPRINTF("Border: %u ", e->border_width);
+ if (e->value_mask & XCB_CONFIG_WINDOW_SIBLING)
+ DPRINTF("Sibling: 0x%x ", e->sibling);
+ if (e->value_mask & XCB_CONFIG_WINDOW_STACK_MODE)
+ DPRINTF("StackMode: %s(%u) ",
+ get_stack_mode_name(e->stack_mode), e->stack_mode);
+ DPRINTF("}\n");
+ }
+#endif
+
+ if (new) {
+ if (e->value_mask & XCB_CONFIG_WINDOW_X) {
+ mask |= XCB_CONFIG_WINDOW_X;
+ wc[i++] = e->x;
+ }
+ if (e->value_mask & XCB_CONFIG_WINDOW_Y) {
+ mask |= XCB_CONFIG_WINDOW_Y;
+ wc[i++] = e->y;
+ }
+ if (e->value_mask & XCB_CONFIG_WINDOW_WIDTH) {
+ mask |= XCB_CONFIG_WINDOW_WIDTH;
+ wc[i++] = e->width;
+ }
+ if (e->value_mask & XCB_CONFIG_WINDOW_HEIGHT) {
+ mask |= XCB_CONFIG_WINDOW_HEIGHT;
+ wc[i++] = e->height;
+ }