dlls/user/painting.c is getting caught in an infinite loop in the function update_now() I added two TRACE statements to try to figure out what is going on. Uncommenting the SendMessageW() line allows the loop to exit. See the attached win traces for the working and broken cases.
I don't know enough about what this function is trying to do to fix it...
The bug can be reproduced using Irfan View's ( www.irfanview.com ) slideshow
functions.
--- painting.c.orig 2005-02-28 12:01:55.000000000 -0700
+++ painting.c 2005-03-04 08:18:52.000000000 -0700
@@ -340,6 +340,7 @@
else if (rdw_flags & RDW_ALLCHILDREN) flags |= UPDATE_ALLCHILDREN;
if (!get_update_flags( hwnd, &child, &flags )) break;
+TRACE( "flags = %d, child = %d, prev = %d\n", flags, child , prev );
if (!flags) break; /* nothing more to do */
if (child == prev) /* same window again, didn't get repainted
properly */
@@ -351,8 +352,10 @@
TRACE( "%p not repainted properly, erasing\n", child );
if ((hrgn = send_ncpaint( child, NULL, &erase_flags )))
{
+ TRACE( "hrgn = %p, deleting\n", hrgn );
send_erase( child, erase_flags, hrgn, &rect, NULL );
DeleteObject( hrgn );
+// SendMessageW( child, WM_PAINT, 0, 0 );
}
}
else
wintrace.tar.gz
Description: Binary data
