XSetWindowBackground (target->dpy, target->scrollBar.win, target->pix_colors[Color_border]);
# endif
}
-
- /* don't want Expose on the parent */
- XClearArea (target->dpy, target->parent[0], 0, 0, 0, 0, False);
- /* do want Expose on the vt, so we get refreshed properly */
- XClearArea (target->dpy, target->vt, 0, 0, 0, 0, True);
+ /* don't want Expose on the parent or vt. It is better to use
+ scr_touch or we get a great deal of flicker otherwise: */
+ XClearWindow (target->dpy, target->parent[0]);
# if HAVE_SCROLLBARS
if (target->scrollBar.win)
target->scrollbar_show (0);
}
# endif
+
+ target->want_refresh = 1;
+ flags |= hasChanged;
}
}
isTransparent = (1UL<<16),
isInvalid = (1UL<<17),
- isVtOrigin = (1UL<<18) /* if set pixmap has origin at corner of
+ isVtOrigin = (1UL<<18), /* if set pixmap has origin at corner of
vt window instead of parent[0]! */
+ hasChanged = (1UL<<19)
};
unsigned long flags;
transpTransformations = (tintNeeded|blurNeeded)
}; /* this flags are returned by make_transparency_pixmap if called */
+ bool check_clearChanged () { bool r = flags & hasChanged; flags &= ~hasChanged; return r; };
+
# ifdef BG_IMAGE_FROM_FILE
# ifdef HAVE_AFTERIMAGE
ASImage *original_asim;
rxvt_term::flush ()
{
flush_ev.stop ();
+
+#ifdef HAVE_BG_PIXMAP
+ if (bgPixmap.check_clearChanged ())
+ {
+ scr_clear (true);
+ scr_touch (false);
+ }
+#endif
if (want_refresh)
{
break;
case ConfigureNotify:
-/* fprintf (stderr, "ConfigureNotify for %X, parent is %X, geom is %dx%d%+d%+d, old geom was %dx%d\n",
+ /* fprintf (stderr, "ConfigureNotify for %X, parent is %X, geom is %dx%d%+d%+d, old geom was %dx%d\n",
ev.xconfigure.window, parent[0], ev.xconfigure.width, ev.xconfigure.height, ev.xconfigure.x, ev.xconfigure.y,
- szHint.width, szHint.height);*/
+ szHint.width, szHint.height); */
if (ev.xconfigure.window == parent[0])
{
while (XCheckTypedWindowEvent (dpy, ev.xconfigure.window, ConfigureNotify, &ev))
if (ev.xany.window == vt)
{
do
- scr_expose (ev.xexpose.x, ev.xexpose.y,
- ev.xexpose.width, ev.xexpose.height, False);
+ {
+ scr_expose (ev.xexpose.x, ev.xexpose.y,
+ ev.xexpose.width, ev.xexpose.height, False);
+ }
while (XCheckTypedWindowEvent (dpy, vt, ev.xany.type, &ev));
ev.xany.type = ev.xany.type == Expose ? GraphicsExpose : Expose;
while (XCheckTypedWindowEvent (dpy, vt, ev.xany.type, &ev))
- scr_expose (ev.xexpose.x, ev.xexpose.y,
- ev.xexpose.width, ev.xexpose.height, False);
-
+ {
+ scr_expose (ev.xexpose.x, ev.xexpose.y,
+ ev.xexpose.width, ev.xexpose.height, False);
+ }
want_refresh = 1;
}
else