Created attachment 3207 Patch to panel to prevent double exposure The panel expose handler is sending the expose event to child widgets twice--someone added code to do this, but it's already handled automatically through its 'FALSE' return value. Gtk+ only clears or buffer-swaps once, so this results in text being drawn over itself a second time (and everything else is drawn twice, too). You can fix this by simply getting rid of the extra code. (attached patch)
Patch applied in 5db5434. If you use git-format-patch next time, you can get the credits too.
This is obviously back (since the commit was reverted due to side-effects with custom-color panels). Need to find out why certain widgets are getting exposed twice in the panel's normal-background mode.
It seems if I remove the expose call at panel/panel-base-window.c:454 and the subsequent if statement, then the problem disappears. Doing this, it looks like there are no ill effects on the color-panel mode or any missing applets. Of course, I don't know whether or not that was put there to work around some other bug.
We need to chain up events to if gtkwindow has anything to draw it can do that too. Why is this exactly a problem?
(In reply to comment #4) > We need to chain up events to if gtkwindow has anything to draw it can do that > too. Why is this exactly a problem? It's sending another signal that automatically propagates back down to the panel applets again and they draw twice. This wouldn't normally be a problem aside from the extra cpu time. With the normal panel style, however, any text that is drawn directly onto the panel background (like the clock applet or the flat window-list buttons) doubles up. And when you alpha blend the text over itself the contrast goes out of whack and the text looks weird. I don't understand why it's calling the expose on the parent window. If the child widgets are receiving the expose then it's because they occlude the parent window and are the only window that update that region anyways. The parent's expose handler should trigger for anything that isn't covered by a child window and it can handle things then. It doesn't look like there's a custom handler for the GtkWindow, so I don't know what you need it to do that it wouldn't do automatically.
Created attachment 3400 Drop chain expose Yeah, looked though the gtk code, but the GtkContainer also exposes the child, so it get triggered twice. With the attached patch, as you suggested, I see no problems, could you give it a shot?
Created attachment 3408 Drop chain expose 2 Yeah, that works great. You missed removing the result var from one of the returns inside an assertion, though. The attached patch adds that.
Ok thanks for the searching, applied in 23fa1ae.
*** Bug 7186 has been marked as a duplicate of this bug. ***