|
|
df14c8a |
diff -ur xchat-2.8.4/src/fe-gtk/xtext.c xchat-2.8.4-shm-pixmaps/src/fe-gtk/xtext.c
|
|
|
df14c8a |
--- xchat-2.8.4/src/fe-gtk/xtext.c 2007-06-08 11:57:07.000000000 +0200
|
|
|
df14c8a |
+++ xchat-2.8.4-shm-pixmaps/src/fe-gtk/xtext.c 2008-05-23 00:56:52.000000000 +0200
|
|
|
df14c8a |
@@ -1347,6 +1347,22 @@
|
|
|
df14c8a |
}
|
|
|
df14c8a |
}
|
|
|
7ba2d04 |
|
|
|
7ba2d04 |
+#ifdef USE_SHM
|
|
|
7ba2d04 |
+static int
|
|
|
7ba2d04 |
+have_shm_pixmaps(Display *dpy)
|
|
|
7ba2d04 |
+{
|
|
|
7ba2d04 |
+ static int checked = 0, major, minor;
|
|
|
4942546 |
+ static Bool have = FALSE;
|
|
|
7ba2d04 |
+
|
|
|
7ba2d04 |
+ if (!checked) {
|
|
|
7ba2d04 |
+ XShmQueryVersion(dpy, &major, &minor, &have);
|
|
|
7ba2d04 |
+ checked = 1;
|
|
|
7ba2d04 |
+ }
|
|
|
7ba2d04 |
+
|
|
|
7ba2d04 |
+ return have;
|
|
|
7ba2d04 |
+}
|
|
|
7ba2d04 |
+#endif
|
|
|
7ba2d04 |
+
|
|
|
df14c8a |
static void
|
|
|
df14c8a |
gtk_xtext_paint (GtkWidget *widget, GdkRectangle *area)
|
|
|
7ba2d04 |
{
|
|
|
df14c8a |
@@ -1363,8 +1379,12 @@
|
|
|
df14c8a |
{
|
|
|
df14c8a |
xtext->last_win_x = x;
|
|
|
df14c8a |
xtext->last_win_y = y;
|
|
|
df14c8a |
-#if !defined(USE_SHM) && !defined(WIN32)
|
|
|
df14c8a |
+#ifndef WIN32
|
|
|
df14c8a |
+#ifdef USE_SHM
|
|
|
df14c8a |
+ if (xtext->shaded && !have_shm_pixmaps(GDK_WINDOW_XDISPLAY (xtext->draw_buf)))
|
|
|
df14c8a |
+#else
|
|
|
df14c8a |
if (xtext->shaded)
|
|
|
df14c8a |
+#endif
|
|
|
df14c8a |
{
|
|
|
df14c8a |
xtext->recycle = TRUE;
|
|
|
df14c8a |
gtk_xtext_load_trans (xtext);
|
|
|
df14c8a |
@@ -3549,6 +3569,11 @@
|
|
|
7ba2d04 |
GC tgc;
|
|
|
7ba2d04 |
Display *xdisplay = GDK_WINDOW_XDISPLAY (xtext->draw_buf);
|
|
|
7ba2d04 |
|
|
|
7ba2d04 |
+#ifdef USE_SHM
|
|
|
7ba2d04 |
+ int shm_pixmaps;
|
|
|
7ba2d04 |
+ shm_pixmaps = have_shm_pixmaps(xdisplay);
|
|
|
7ba2d04 |
+#endif
|
|
|
7ba2d04 |
+
|
|
|
7ba2d04 |
XGetGeometry (xdisplay, p, &root, &dummy, &dummy, &width, &height,
|
|
|
7ba2d04 |
&dummy, &depth);
|
|
|
7ba2d04 |
|
|
|
df14c8a |
@@ -3566,18 +3591,20 @@
|
|
|
df14c8a |
XFreeGC (xdisplay, tgc);
|
|
|
df14c8a |
|
|
|
df14c8a |
#ifdef USE_SHM
|
|
|
df14c8a |
- ximg = get_image (xtext, xdisplay, &xtext->shminfo, 0, 0, w, h, depth, tmp);
|
|
|
df14c8a |
-#else
|
|
|
df14c8a |
- ximg = XGetImage (xdisplay, tmp, 0, 0, w, h, -1, ZPixmap);
|
|
|
df14c8a |
+ if (shm_pixmaps)
|
|
|
df14c8a |
+ ximg = get_image (xtext, xdisplay, &xtext->shminfo, 0, 0, w, h, depth, tmp);
|
|
|
df14c8a |
+ else
|
|
|
df14c8a |
#endif
|
|
|
df14c8a |
+ ximg = XGetImage (xdisplay, tmp, 0, 0, w, h, -1, ZPixmap);
|
|
|
df14c8a |
XFreePixmap (xdisplay, tmp);
|
|
|
df14c8a |
} else
|
|
|
df14c8a |
{
|
|
|
df14c8a |
#ifdef USE_SHM
|
|
|
df14c8a |
- ximg = get_image (xtext, xdisplay, &xtext->shminfo, x, y, w, h, depth, p);
|
|
|
df14c8a |
-#else
|
|
|
df14c8a |
- ximg = XGetImage (xdisplay, p, x, y, w, h, -1, ZPixmap);
|
|
|
df14c8a |
+ if (shm_pixmaps)
|
|
|
df14c8a |
+ ximg = get_image (xtext, xdisplay, &xtext->shminfo, x, y, w, h, depth, p);
|
|
|
df14c8a |
+ else
|
|
|
df14c8a |
#endif
|
|
|
df14c8a |
+ ximg = XGetImage (xdisplay, p, x, y, w, h, -1, ZPixmap);
|
|
|
df14c8a |
}
|
|
|
df14c8a |
|
|
|
df14c8a |
if (!ximg)
|
|
|
df14c8a |
@@ -3602,7 +3629,7 @@
|
|
|
7ba2d04 |
else
|
|
|
7ba2d04 |
{
|
|
|
7ba2d04 |
#ifdef USE_SHM
|
|
|
7ba2d04 |
- if (xtext->shm)
|
|
|
7ba2d04 |
+ if (xtext->shm && shm_pixmaps)
|
|
|
7ba2d04 |
{
|
|
|
7ba2d04 |
#if (GTK_MAJOR_VERSION == 2) && (GTK_MINOR_VERSION == 0)
|
|
|
7ba2d04 |
shaded_pix = gdk_pixmap_foreign_new (
|
|
|
df14c8a |
@@ -3620,7 +3647,7 @@
|
|
|
7ba2d04 |
}
|
|
|
7ba2d04 |
|
|
|
7ba2d04 |
#ifdef USE_SHM
|
|
|
7ba2d04 |
- if (!xtext->shm)
|
|
|
7ba2d04 |
+ if (!xtext->shm || !shm_pixmaps)
|
|
|
7ba2d04 |
#endif
|
|
|
7ba2d04 |
XPutImage (xdisplay, GDK_WINDOW_XWINDOW (shaded_pix),
|
|
|
7ba2d04 |
GDK_GC_XGC (xtext->fgc), ximg, 0, 0, 0, 0, w, h);
|
|
|
df14c8a |
@@ -3640,7 +3667,7 @@
|
|
|
df14c8a |
if (xtext->pixmap)
|
|
|
df14c8a |
{
|
|
|
df14c8a |
#ifdef USE_SHM
|
|
|
df14c8a |
- if (xtext->shm)
|
|
|
df14c8a |
+ if (xtext->shm && have_shm_pixmaps(GDK_WINDOW_XDISPLAY (xtext->draw_buf)))
|
|
|
df14c8a |
{
|
|
|
df14c8a |
XFreePixmap (GDK_WINDOW_XDISPLAY (xtext->pixmap),
|
|
|
df14c8a |
GDK_WINDOW_XWINDOW (xtext->pixmap));
|