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) &&

Reply via email to