]> git.sur5r.net Git - i3/i3/commitdiff
More error checking, bugfix for mplayer (use visual CopyFromParent)
authorMichael Stapelberg <michael+git@stapelberg.de>
Sat, 14 Feb 2009 02:46:20 +0000 (03:46 +0100)
committerMichael Stapelberg <michael+git@stapelberg.de>
Sat, 14 Feb 2009 02:46:20 +0000 (03:46 +0100)
src/layout.c
src/mainx.c
src/xcb.c

index 131515f5987724842272079bbf652d1720cc56cb..174e1d83b1198b662a5c4af069f751e499cf17eb 100644 (file)
@@ -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 {
index a73ea6f93009a9c9749e17487f444d0bbd2d2e0e..22452efae3350a695c7fdf945109681fd1536059 100644 (file)
@@ -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) */
index f4b9bc3989f91224011a2a5d3f0f3d15e10ce507..c5a3aa061add1c9bf5d6f6694b9ad245f7e48084 100644 (file)
--- a/src/xcb.c
+++ b/src/xcb.c
@@ -14,6 +14,7 @@
 
 #include <xcb/xcb.h>
 /* 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;
 }