X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fxcb.c;h=a2f813b06898ff2932d93baf7a04c6257273988f;hb=e893902585aa813746eb939649d8d28cf89abbf4;hp=661fdb7c3192ffcad47d3ec36a028c38d2053267;hpb=ed60b31fd0bb21c03c6b7addca376afa08c13aee;p=i3%2Fi3 diff --git a/src/xcb.c b/src/xcb.c index 661fdb7c..a2f813b0 100644 --- a/src/xcb.c +++ b/src/xcb.c @@ -90,7 +90,7 @@ uint32_t get_colorpixel(xcb_connection_t *conn, char *hex) { * */ xcb_window_t create_window(xcb_connection_t *conn, Rect dims, uint16_t window_class, int cursor, - uint32_t mask, uint32_t *values) { + bool map, uint32_t mask, uint32_t *values) { xcb_window_t root = xcb_setup_roots_iterator(xcb_get_setup(conn)).data->root; xcb_window_t result = xcb_generate_id(conn); xcb_cursor_t cursor_id = xcb_generate_id(conn); @@ -121,7 +121,8 @@ xcb_window_t create_window(xcb_connection_t *conn, Rect dims, uint16_t window_cl xcb_change_window_attributes(conn, result, XCB_CW_CURSOR, &cursor_id); /* Map the window (= make it visible) */ - xcb_map_window(conn, result); + if (map) + xcb_map_window(conn, result); return result; } @@ -180,8 +181,6 @@ void fake_configure_notify(xcb_connection_t *conn, Rect r, xcb_window_t window) xcb_send_event(conn, false, window, XCB_EVENT_MASK_STRUCTURE_NOTIFY, (char*)&generated_event); xcb_flush(conn); - - LOG("Told the client it is at %dx%d with %dx%d\n", r.x, r.y, r.width, r.height); } /* @@ -194,8 +193,8 @@ void fake_absolute_configure_notify(xcb_connection_t *conn, Client *client) { absolute.x = client->rect.x + client->child_rect.x; absolute.y = client->rect.y + client->child_rect.y; - absolute.width = client->rect.width - (2 * client->child_rect.x); - absolute.height = client->rect.height - client->child_rect.y - 1; + absolute.width = client->child_rect.width; + absolute.height = client->child_rect.height; fake_configure_notify(conn, absolute, client->child); } @@ -238,6 +237,8 @@ void xcb_get_numlock_mask(xcb_connection_t *conn) { #else /* For now, we only use the first keysymbol. */ xcb_keycode_t *numlock_syms = xcb_key_symbols_get_keycode(keysyms, XCB_NUM_LOCK); + if (numlock_syms == NULL) + return; xcb_keycode_t numlock = *numlock_syms; free(numlock_syms); #endif @@ -340,10 +341,10 @@ static xcb_charinfo_t *get_charinfo(int col, int row, xcb_query_font_reply_t *fo * real length (amount of glyphs) using the given font. * */ -int predict_text_width(xcb_connection_t *conn, char *font_pattern, char *text, int length) { +int predict_text_width(xcb_connection_t *conn, const char *font_pattern, char *text, int length) { xcb_query_font_reply_t *font_info; xcb_charinfo_t *table; - int i, width; + int i, width = 0; i3Font *font = load_font(conn, font_pattern); font_info = xcb_query_font_reply(conn, xcb_query_font_unchecked(conn, font->id), NULL); @@ -356,5 +357,7 @@ int predict_text_width(xcb_connection_t *conn, char *font_pattern, char *text, i width += info->character_width; } + free(font_info); + return width; }