X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;ds=sidebyside;f=net-irc%2Fxchat%2Ffiles%2Fxchat-2.8.6-shm-pixmaps.patch;fp=net-irc%2Fxchat%2Ffiles%2Fxchat-2.8.6-shm-pixmaps.patch;h=68f7fbe0b65e14c67aa248a6309b6765084925fb;hb=510d1349eaf5638193f1e85adb91c38621f801ab;hp=0000000000000000000000000000000000000000;hpb=35027b3af8ebf8d155ce18f639588f13df15d397;p=overlay.git diff --git a/net-irc/xchat/files/xchat-2.8.6-shm-pixmaps.patch b/net-irc/xchat/files/xchat-2.8.6-shm-pixmaps.patch new file mode 100644 index 0000000..68f7fbe --- /dev/null +++ b/net-irc/xchat/files/xchat-2.8.6-shm-pixmaps.patch @@ -0,0 +1,106 @@ +diff -ruN xchat-2.8.6.orig/src/fe-gtk/xtext.c xchat-2.8.6/src/fe-gtk/xtext.c +--- xchat-2.8.6.orig/src/fe-gtk/xtext.c 2008-02-24 06:04:30.000000000 +0100 ++++ xchat-2.8.6/src/fe-gtk/xtext.c 2008-10-14 11:04:57.000000000 +0200 +@@ -1350,6 +1350,22 @@ + } + } + ++#ifdef USE_SHM ++static int ++have_shm_pixmaps(Display *dpy) ++{ ++ static int checked = 0, major, minor; ++ static Bool have = FALSE; ++ ++ if (!checked) { ++ XShmQueryVersion(dpy, &major, &minor, &have); ++ checked = 1; ++ } ++ ++ return have; ++} ++#endif ++ + static void + gtk_xtext_paint (GtkWidget *widget, GdkRectangle *area) + { +@@ -1366,8 +1382,12 @@ + { + xtext->last_win_x = x; + xtext->last_win_y = y; +-#if !defined(USE_SHM) && !defined(WIN32) ++#ifndef WIN32 ++#ifdef USE_SHM ++ if (xtext->shaded && !have_shm_pixmaps(GDK_WINDOW_XDISPLAY (xtext->draw_buf))) ++#else + if (xtext->shaded) ++#endif + { + xtext->recycle = TRUE; + gtk_xtext_load_trans (xtext); +@@ -3559,6 +3579,11 @@ + GC tgc; + Display *xdisplay = GDK_WINDOW_XDISPLAY (xtext->draw_buf); + ++#ifdef USE_SHM ++ int shm_pixmaps; ++ shm_pixmaps = have_shm_pixmaps(xdisplay); ++#endif ++ + XGetGeometry (xdisplay, p, &root, &dummy, &dummy, &width, &height, + &dummy, &depth); + +@@ -3576,18 +3601,20 @@ + XFreeGC (xdisplay, tgc); + + #ifdef USE_SHM +- ximg = get_image (xtext, xdisplay, &xtext->shminfo, 0, 0, w, h, depth, tmp); +-#else +- ximg = XGetImage (xdisplay, tmp, 0, 0, w, h, -1, ZPixmap); ++ if (shm_pixmaps) ++ ximg = get_image (xtext, xdisplay, &xtext->shminfo, 0, 0, w, h, depth, tmp); ++ else + #endif ++ ximg = XGetImage (xdisplay, tmp, 0, 0, w, h, -1, ZPixmap); + XFreePixmap (xdisplay, tmp); + } else + { + #ifdef USE_SHM +- ximg = get_image (xtext, xdisplay, &xtext->shminfo, x, y, w, h, depth, p); +-#else +- ximg = XGetImage (xdisplay, p, x, y, w, h, -1, ZPixmap); ++ if (shm_pixmaps) ++ ximg = get_image (xtext, xdisplay, &xtext->shminfo, x, y, w, h, depth, p); ++ else + #endif ++ ximg = XGetImage (xdisplay, p, x, y, w, h, -1, ZPixmap); + } + + if (!ximg) +@@ -3612,7 +3639,7 @@ + else + { + #ifdef USE_SHM +- if (xtext->shm) ++ if (xtext->shm && shm_pixmaps) + { + #if (GTK_MAJOR_VERSION == 2) && (GTK_MINOR_VERSION == 0) + shaded_pix = gdk_pixmap_foreign_new ( +@@ -3630,7 +3657,7 @@ + } + + #ifdef USE_SHM +- if (!xtext->shm) ++ if (!xtext->shm || !shm_pixmaps) + #endif + XPutImage (xdisplay, GDK_WINDOW_XWINDOW (shaded_pix), + GDK_GC_XGC (xtext->fgc), ximg, 0, 0, 0, 0, w, h); +@@ -3650,7 +3677,7 @@ + if (xtext->pixmap) + { + #ifdef USE_SHM +- if (xtext->shm) ++ if (xtext->shm && have_shm_pixmaps(GDK_WINDOW_XDISPLAY (xtext->draw_buf))) + { + XFreePixmap (GDK_WINDOW_XDISPLAY (xtext->pixmap), + GDK_WINDOW_XWINDOW (xtext->pixmap));