aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--x11.c67
1 files changed, 44 insertions, 23 deletions
diff --git a/x11.c b/x11.c
index 9f4aabd..9d4ff53 100644
--- a/x11.c
+++ b/x11.c
@@ -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);