diff options
| author | Federico Angelilli <code@fedang.net> | 2023-11-02 22:57:12 +0100 |
|---|---|---|
| committer | Federico Angelilli <code@fedang.net> | 2023-11-02 22:57:12 +0100 |
| commit | 04f73ccab99a28d073dd0629e1b43aebdfab0861 (patch) | |
| tree | 1713a9ba20e4542a14e9649adddd6282c3d59a4a | |
| parent | 700e21be923b470f6d6965119c6baeffa75aeecc (diff) | |
Update window_create
| -rw-r--r-- | x11.c | 67 |
1 files changed, 44 insertions, 23 deletions
@@ -77,26 +77,6 @@ Window *window_create(void) } win->screen = iter.data; - win->window = xcb_generate_id(win->connection); - - int y = 0, x = 0, h = 300, w = 400; - xcb_create_window(win->connection, - XCB_COPY_FROM_PARENT, - win->window, win->screen->root, - y, x, h, w, 0, - XCB_WINDOW_CLASS_INPUT_OUTPUT, - win->screen->root_visual, - XCB_CW_BACK_PIXEL, - //XCB_CW_BACK_PIXEL | XCB_CW_BACK_PIXMAP | XCB_CW_OVERRIDE_REDIRECT | - // XCB_CW_BORDER_PIXEL | XCB_CW_EVENT_MASK | XCB_CW_COLORMAP, - &win->screen->white_pixel); - - log_debug("X11 window created (id %u)", win->window); - - xcb_icccm_set_wm_name(win->connection, win->window, XCB_ATOM_STRING, 8, strlen("comet"), "comet"); - xcb_map_window(win->connection, win->window); - xcb_flush(win->connection); - xcb_depth_iterator_t depth_iter = xcb_screen_allowed_depths_iterator(win->screen); while (depth_iter.rem) { @@ -105,18 +85,59 @@ Window *window_create(void) while (visual_iter.rem) { if (win->screen->root_visual == visual_iter.data->visual_id) { win->visual_type = visual_iter.data; - goto done; + goto found_visual; } xcb_visualtype_next(&visual_iter); } xcb_depth_next(&depth_iter); } -done: +found_visual: + + log_debug("Xcb visual type found (id %u)", win->visual_type->visual_id); + + const uint32_t value_mask = XCB_CW_BACK_PIXMAP | XCB_CW_BACK_PIXEL | XCB_CW_BORDER_PIXEL + | XCB_CW_OVERRIDE_REDIRECT | XCB_CW_EVENT_MASK | XCB_CW_COLORMAP; + + const uint32_t event_mask = XCB_EVENT_MASK_EXPOSURE | XCB_EVENT_MASK_STRUCTURE_NOTIFY + | XCB_EVENT_MASK_KEY_PRESS | XCB_EVENT_MASK_FOCUS_CHANGE + | XCB_EVENT_MASK_BUTTON_RELEASE | XCB_EVENT_MASK_BUTTON_PRESS; + + xcb_colormap_t colormap = xcb_generate_id(win->connection); + xcb_create_colormap(win->connection, XCB_COLORMAP_ALLOC_NONE, colormap, win->screen->root, win->visual_type->visual_id); + + log_debug("X11 colormap created (id %u)", colormap); + + const uint32_t value_list[] = { + XCB_NONE, // back pixmap + 0x000000, // back pixel + 0x000000, // border pixel + true, // override redirect + event_mask, // event mask + colormap // colormap + }; + + int y = 10, x = 10, width = 1000, height = 100; + + win->window = xcb_generate_id(win->connection); + xcb_create_window(win->connection, + XCB_COPY_FROM_PARENT, + win->window, win->screen->root, + y, x, width, height, 0, + XCB_WINDOW_CLASS_INPUT_OUTPUT, + win->screen->root_visual, + value_mask, + value_list); + + log_debug("X11 window created (id %u)", win->window); + + xcb_icccm_set_wm_name(win->connection, win->window, XCB_ATOM_STRING, 8, strlen("comet"), "comet"); + xcb_map_window(win->connection, win->window); + xcb_flush(win->connection); log_debug("Xcb initialized"); - win->surface = cairo_xcb_surface_create(win->connection, win->window, win->visual_type, w, h); + win->surface = cairo_xcb_surface_create(win->connection, win->window, win->visual_type, width, height); assert(cairo_surface_status(win->surface) == CAIRO_STATUS_SUCCESS); win->cr = cairo_create(win->surface); |
