Calling SetSysColor in the current cvs version of wine causes an infinite loop
in update_now in dlls/user/painting.c. As I understand it, the problem is the
following: get_update_flags will promote it's child window argument to the
next child window (via a wineserver call to get_update_region), if the
current child doesn't need any repaint. Calling get_update_flags on the
desktop window will always return a repaint flag, so it never gets ahead. The
attached patch automatically promotes the child window argument to the first
child, if called on the desktop window. I don't know if this really is the
desired behaviour. Another fix would be to not return any repaint flags for
the desktop window.
Ciao,
Michael
Index: server/window.c
===================================================================
RCS file: /home/wine/wine/server/window.c,v
retrieving revision 1.36
diff -u -r1.36 window.c
--- server/window.c 7 Dec 2004 17:31:53 -0000 1.36
+++ server/window.c 4 Jan 2005 23:16:12 -0000
@@ -1632,7 +1632,7 @@
}
}
- if (!(reply->flags = get_update_flags( win, flags )))
+ if (win == top_window || !(reply->flags = get_update_flags( win, flags )))
{
/* if window doesn't need any repaint, check the children */
if (!(flags & UPDATE_NOCHILDREN) &&