X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fxcb.c;h=3fd0bfcde2f5d87cf62f421f56f0dfe5d2ac932a;hb=3f45d3c44785c552b28f079df1888de52cd34a19;hp=aaad590d97a871fc33a0fafced0722496d8d1a89;hpb=f162e7efaa4817c327d84c79854a5c3102a60105;p=i3%2Fi3 diff --git a/src/xcb.c b/src/xcb.c index aaad590d..3fd0bfcd 100644 --- a/src/xcb.c +++ b/src/xcb.c @@ -206,6 +206,26 @@ void fake_absolute_configure_notify(Con *con) { fake_configure_notify(conn, absolute, con->window->id); } +/* + * Sends the WM_TAKE_FOCUS ClientMessage to the given window + * + */ +void send_take_focus(xcb_window_t window) { + xcb_client_message_event_t ev; + + memset(&ev, 0, sizeof(xcb_client_message_event_t)); + + ev.response_type = XCB_CLIENT_MESSAGE; + ev.window = window; + ev.type = A_WM_PROTOCOLS; + ev.format = 32; + ev.data.data32[0] = A_WM_TAKE_FOCUS; + ev.data.data32[1] = XCB_CURRENT_TIME; + + DLOG("Sending WM_TAKE_FOCUS to the client\n"); + xcb_send_event(conn, false, window, XCB_EVENT_MASK_NO_EVENT, (char*)&ev); +} + /* * Finds out which modifier mask is the one for numlock, as the user may change this. * @@ -269,38 +289,6 @@ void xcb_raise_window(xcb_connection_t *conn, xcb_window_t window) { xcb_configure_window(conn, window, XCB_CONFIG_WINDOW_STACK_MODE, values); } -/* - * - * Prepares the given Cached_Pixmap for usage (checks whether the size of the - * object this pixmap is related to (e.g. a window) has changed and re-creates - * the pixmap if so). - * - */ -void cached_pixmap_prepare(xcb_connection_t *conn, struct Cached_Pixmap *pixmap) { - DLOG("preparing pixmap\n"); - - /* If the Rect did not change, the pixmap does not need to be recreated */ - if (memcmp(&(pixmap->rect), pixmap->referred_rect, sizeof(Rect)) == 0) - return; - - memcpy(&(pixmap->rect), pixmap->referred_rect, sizeof(Rect)); - - if (pixmap->id == 0 || pixmap->gc == 0) { - DLOG("Creating new pixmap...\n"); - pixmap->id = xcb_generate_id(conn); - pixmap->gc = xcb_generate_id(conn); - } else { - DLOG("Re-creating this pixmap...\n"); - xcb_free_gc(conn, pixmap->gc); - xcb_free_pixmap(conn, pixmap->id); - } - - xcb_create_pixmap(conn, root_depth, pixmap->id, - pixmap->referred_drawable, pixmap->rect.width, pixmap->rect.height); - - xcb_create_gc(conn, pixmap->gc, pixmap->id, 0, 0); -} - /* * Query the width of the given text (16-bit characters, UCS) with given real * length (amount of glyphs) using the given font. @@ -340,7 +328,7 @@ void xcb_set_window_rect(xcb_connection_t *conn, xcb_window_t window, Rect r) { XCB_CONFIG_WINDOW_HEIGHT, &(r.x)); /* ignore events which are generated because we configured a window */ - add_ignore_event(cookie.sequence); + add_ignore_event(cookie.sequence, 0); } /*