}
static void
+weston_wm_configure_window(struct weston_wm *wm, xcb_window_t window_id,
+ uint16_t mask, const uint32_t *values)
+{
+ static const struct {
+ xcb_config_window_t bitmask;
+ const char *name;
+ } names[] = {
+ { XCB_CONFIG_WINDOW_X, "x" },
+ { XCB_CONFIG_WINDOW_Y, "y" },
+ { XCB_CONFIG_WINDOW_WIDTH, "width" },
+ { XCB_CONFIG_WINDOW_HEIGHT, "height" },
+ { XCB_CONFIG_WINDOW_BORDER_WIDTH, "border_width" },
+ { XCB_CONFIG_WINDOW_SIBLING, "sibling" },
+ { XCB_CONFIG_WINDOW_STACK_MODE, "stack_mode" },
+ };
+ char *buf = NULL;
+ size_t sz = 0;
+ FILE *fp;
+ unsigned i, v;
+
+ xcb_configure_window(wm->conn, window_id, mask, values);
+
+ if (!wm_debug_is_enabled(wm))
+ return;
+
+ fp = open_memstream(&buf, &sz);
+ if (!fp)
+ return;
+
+ fprintf(fp, "XWM: configure window %d:", window_id);
+ for (i = 0, v = 0; i < ARRAY_LENGTH(names); i++) {
+ if (mask & names[i].bitmask)
+ fprintf(fp, " %s=%d", names[i].name, values[v++]);
+ }
+ fclose(fp);
+
+ wm_printf(wm, "%s\n", buf);
+ free(buf);
+}
+
+static void
weston_wm_handle_configure_request(struct weston_wm *wm, xcb_generic_event_t *event)
{
xcb_configure_request_event_t *configure_request =
mask |= XCB_CONFIG_WINDOW_STACK_MODE;
}
- xcb_configure_window(wm->conn, window->id, mask, values);
+ weston_wm_configure_window(wm, window->id, mask, values);
weston_wm_window_get_frame_size(window, &width, &height);
values[0] = width;
values[1] = height;
mask = XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT;
- xcb_configure_window(wm->conn, window->frame_id, mask, values);
+ weston_wm_configure_window(wm, window->frame_id, mask, values);
weston_wm_window_schedule_repaint(window);
}
window->id, XCB_TIME_CURRENT_TIME);
values[0] = XCB_STACK_MODE_ABOVE;
- xcb_configure_window (wm->conn, window->frame_id,
- XCB_CONFIG_WINDOW_STACK_MODE, values);
+ weston_wm_configure_window(wm, window->frame_id,
+ XCB_CONFIG_WINDOW_STACK_MODE,
+ values);
} else {
xcb_set_input_focus (wm->conn,
XCB_INPUT_FOCUS_POINTER_ROOT,
xcb_reparent_window(wm->conn, window->id, window->frame_id, x, y);
values[0] = 0;
- xcb_configure_window(wm->conn, window->id,
- XCB_CONFIG_WINDOW_BORDER_WIDTH, values);
+ weston_wm_configure_window(wm, window->id,
+ XCB_CONFIG_WINDOW_BORDER_WIDTH, values);
window->cairo_surface =
cairo_xcb_surface_create_with_xrender_format(wm->conn,
values[1] = y;
values[2] = window->width;
values[3] = window->height;
- xcb_configure_window(wm->conn,
- window->id,
- XCB_CONFIG_WINDOW_X |
- XCB_CONFIG_WINDOW_Y |
- XCB_CONFIG_WINDOW_WIDTH |
- XCB_CONFIG_WINDOW_HEIGHT,
- values);
+ weston_wm_configure_window(wm, window->id,
+ XCB_CONFIG_WINDOW_X |
+ XCB_CONFIG_WINDOW_Y |
+ XCB_CONFIG_WINDOW_WIDTH |
+ XCB_CONFIG_WINDOW_HEIGHT,
+ values);
weston_wm_window_get_frame_size(window, &width, &height);
values[0] = width;
values[1] = height;
- xcb_configure_window(wm->conn,
- window->frame_id,
- XCB_CONFIG_WINDOW_WIDTH |
- XCB_CONFIG_WINDOW_HEIGHT,
- values);
+ weston_wm_configure_window(wm, window->frame_id,
+ XCB_CONFIG_WINDOW_WIDTH |
+ XCB_CONFIG_WINDOW_HEIGHT,
+ values);
window->configure_source = NULL;
values[1] = y;
mask = XCB_CONFIG_WINDOW_X | XCB_CONFIG_WINDOW_Y;
- xcb_configure_window(wm->conn, window->frame_id, mask, values);
+ weston_wm_configure_window(wm, window->frame_id, mask, values);
xcb_flush(wm->conn);
}
}