From 83c65b3ed8021aca3ae537711017c1611b9e5595 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Thu, 8 Aug 2024 10:19:14 +0200 Subject: [PATCH] Xnest: replace XCreateBitmapFromData() by xcb_put_image() Signed-off-by: Enrico Weigelt, metux IT consult --- hw/xnest/Display.c | 6 +++--- hw/xnest/xcb.c | 33 +++++++++++++++++++++++++++++++++ hw/xnest/xnest-xcb.h | 3 +++ 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/hw/xnest/Display.c b/hw/xnest/Display.c index 64b2e552d..0a151d745 100644 --- a/hw/xnest/Display.c +++ b/hw/xnest/Display.c @@ -180,9 +180,9 @@ xnestOpenDisplay(int argc, char *argv[]) xnestBorderWidth = 1; xnestIconBitmap = - XCreateBitmapFromData(xnestDisplay, - xnestUpstreamInfo.screenInfo->root, - (char *) icon_bits, icon_width, icon_height); + xnest_create_bitmap_from_data(xnestUpstreamInfo.conn, + xnestUpstreamInfo.screenInfo->root, + (char *) icon_bits, icon_width, icon_height); xnestScreenSaverPixmap = XCreatePixmapFromBitmapData(xnestDisplay, diff --git a/hw/xnest/xcb.c b/hw/xnest/xcb.c index 41f6dbfb8..4816a405f 100644 --- a/hw/xnest/xcb.c +++ b/hw/xnest/xcb.c @@ -12,6 +12,7 @@ #include #include "include/gc.h" +#include "include/servermd.h" #include "Xnest.h" #include "xnest-xcb.h" @@ -72,3 +73,35 @@ void xnest_wm_colormap_windows( free(reply); } + +uint32_t xnest_create_bitmap_from_data( + xcb_connection_t *conn, + uint32_t drawable, + const char *data, + uint32_t width, + uint32_t height) +{ + uint32_t pix = xcb_generate_id(xnestUpstreamInfo.conn); + xcb_create_pixmap(conn, 1, pix, drawable, width, height); + + uint32_t gc = xcb_generate_id(xnestUpstreamInfo.conn); + xcb_create_gc(conn, gc, pix, 0, NULL); + + const int leftPad = 0; + + xcb_put_image(conn, + XYPixmap, + pix, + gc, + width, + height, + 0 /* dst_x */, + 0 /* dst_y */, + leftPad, + 1 /* depth */, + BitmapBytePad(width + leftPad) * height, + (uint8_t*)data); + + xcb_free_gc(conn, gc); + return pix; +} diff --git a/hw/xnest/xnest-xcb.h b/hw/xnest/xnest-xcb.h index a924e2575..f3c3a1923 100644 --- a/hw/xnest/xnest-xcb.h +++ b/hw/xnest/xnest-xcb.h @@ -25,4 +25,7 @@ uint32_t xnest_upstream_gc(GCPtr pGC); void xnest_wm_colormap_windows(xcb_connection_t *conn, xcb_window_t w, xcb_window_t *windows, int count); +uint32_t xnest_create_bitmap_from_data(xcb_connection_t *conn, uint32_t drawable, + const char *data, uint32_t width, uint32_t height); + #endif /* __XNEST__XCB_H */