--- rxvt-unicode/src/rxvtfont.C 2006/11/02 17:23:50 1.106 +++ rxvt-unicode/src/rxvtfont.C 2007/08/03 05:33:04 1.109 @@ -1276,9 +1276,8 @@ bool buffered = bg >= 0 // we don't use a transparent bg #ifndef FORCE_UNBUFFERED_XFT -# if defined(XPM_BACKGROUND) || defined(TRANSPARENT) +# ifdef ENABLE_TRANSPARENCY || !term->am_transparent // we aren't transparent - || term->am_pixmap_trans // we have a pixmap # endif #endif ; @@ -1324,29 +1323,41 @@ if (0) ; -#ifdef TRANSPARENT - else if (bg < 0 && term->am_pixmap_trans) - XCopyArea (disp, term->pixmap, d2, gc, - x + term->window_vt_x, y + term->window_vt_y, - w, h, 0, 0); -#endif -#ifdef XPM_BACKGROUND +#if defined(ENABLE_TRANSPARENCY) || defined(XPM_BACKGROUND) else if (bg < 0 && term->bgPixmap.pixmap) { - XGCValues gcv; - - gcv.fill_style = FillTiled; - gcv.tile = term->pixmap; - gcv.ts_x_origin = -x; - gcv.ts_y_origin = -y; - - GC gc2 = XCreateGC (disp, d2, - GCTile | GCTileStipXOrigin | GCTileStipYOrigin | GCFillStyle, - &gcv); - - XFillRectangle (disp, d2, gc2, 0, 0, w, h); - - XFreeGC (disp, gc2); + if (term->bgPixmap.pmap_width >= x + term->window_vt_x+w + && term->bgPixmap.pmap_height >= y + term->window_vt_y+h) + { + XCopyArea (disp, term->bgPixmap.pixmap, d2, gc, + x + term->window_vt_x, y + term->window_vt_y, + w, h, 0, 0); + } + else + { + XGCValues gcv; + + gcv.fill_style = FillTiled; + gcv.tile = term->bgPixmap.pixmap; + gcv.ts_x_origin = -x; + gcv.ts_y_origin = -y; + +#if 0 + GC gc2 = XCreateGC (disp, d2, + GCTile | GCTileStipXOrigin | GCTileStipYOrigin | GCFillStyle, + &gcv); +#endif + XChangeGC (disp, gc, + GCTile | GCTileStipXOrigin | GCTileStipYOrigin | GCFillStyle, + &gcv); + + XFillRectangle (disp, d2, gc/*gc2*/, 0, 0, w, h); + + gcv.fill_style = FillSolid; + XChangeGC (disp, gc, GCFillStyle, &gcv); + /* XFreeGC (disp, gc2); */ + + } } #endif else