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.
*
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.