This is an X11 issue. I think that using extensions such as Damage, you could avoid redraws, but I'm not sure of that. I suggest you cache the result of the last draw in a pixmap and simply redraw the pixmap when the paint event comes in. Just make sure to regenerate the pixmap when the contents of the widget change.