From 031cf4ccdace1ac8ef24f23baff61cd763624dc5 Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Sat, 14 Feb 2009 03:46:20 +0100 Subject: [PATCH] More error checking, bugfix for mplayer (use visual CopyFromParent) --- src/layout.c | 1 - src/mainx.c | 5 +++-- src/xcb.c | 14 +++++++++----- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/layout.c b/src/layout.c index 131515f5..174e1d83 100644 --- a/src/layout.c +++ b/src/layout.c @@ -145,7 +145,6 @@ static void render_container(xcb_connection_t *connection, Container *container) xcb_configure_window(connection, client->child, mask, values); } - decorate_window(connection, client); current_client++; } } else { diff --git a/src/mainx.c b/src/mainx.c index a73ea6f9..22452efa 100644 --- a/src/mainx.c +++ b/src/mainx.c @@ -162,7 +162,7 @@ void reparent_window(xcb_connection_t *conn, xcb_window_t child, i3Font *font = load_font(conn, pattern); /* Yo dawg, I heard you like windows, so I create a window around your window… */ - xcb_create_window(conn, + xcb_void_cookie_t cookie = xcb_create_window_checked(conn, depth, new->frame, root, @@ -172,9 +172,10 @@ void reparent_window(xcb_connection_t *conn, xcb_window_t child, height + 2 + 2 + font->height, /* 2 px border plus font’s height */ 0, /* border_width = 0, we draw our own borders */ XCB_WINDOW_CLASS_INPUT_OUTPUT, - visual, + XCB_WINDOW_CLASS_COPY_FROM_PARENT, mask, values); + check_error(conn, cookie, "Could not create frame"); xcb_change_save_set(conn, XCB_SET_MODE_INSERT, child); /* Map the window on the screen (= make it visible) */ diff --git a/src/xcb.c b/src/xcb.c index f4b9bc39..c5a3aa06 100644 --- a/src/xcb.c +++ b/src/xcb.c @@ -14,6 +14,7 @@ #include /* All the helper functions needed for efficiently using XCB */ +#include "util.h" /* * Returns the colorpixel to use for the given hex color (think of HTML). @@ -25,6 +26,7 @@ * */ uint32_t get_colorpixel(xcb_connection_t *conn, xcb_window_t window, char *hex) { + /* TODO: We need to store the colorpixels per child to remove these unnecessary requests every time */ #define RGB_8_TO_16(i) (65535 * ((i) & 0xFF) / 255) char strgroups[3][3] = {{hex[1], hex[2], '\0'}, {hex[3], hex[4], '\0'}, @@ -35,18 +37,20 @@ uint32_t get_colorpixel(xcb_connection_t *conn, xcb_window_t window, char *hex) xcb_screen_t *root_screen = xcb_setup_roots_iterator(xcb_get_setup(conn)).data; - xcb_colormap_t colormapId = xcb_generate_id(conn); - xcb_create_colormap(conn, XCB_COLORMAP_ALLOC_NONE, colormapId, window, root_screen->root_visual); + xcb_colormap_t colormap_id = xcb_generate_id(conn); + xcb_void_cookie_t cookie = xcb_create_colormap_checked(conn, XCB_COLORMAP_ALLOC_NONE, + colormap_id, window, root_screen->root_visual); + check_error(conn, cookie, "Could not create colormap"); xcb_alloc_color_reply_t *reply = xcb_alloc_color_reply(conn, - xcb_alloc_color(conn, colormapId, rgb16[0], rgb16[1], rgb16[2]), NULL); + xcb_alloc_color(conn, colormap_id, rgb16[0], rgb16[1], rgb16[2]), NULL); if (!reply) { - printf("color fail\n"); + printf("Could not allocate color\n"); exit(1); } uint32_t pixel = reply->pixel; free(reply); - xcb_free_colormap(conn, colormapId); + xcb_free_colormap(conn, colormap_id); return pixel; } -- 2.39.5