Index: gdk/win32/gdkevents-win32.c
===================================================================
--- gdk/win32/gdkevents-win32.c	(revision 20810)
+++ gdk/win32/gdkevents-win32.c	(working copy)
@@ -140,6 +140,7 @@
 
 static gboolean in_ime_composition = FALSE;
 static UINT     modal_timer;
+static UINT     sync_timer = 0;
 
 static int debug_indent = 0;
 
@@ -2039,14 +2040,31 @@
 
 static VOID CALLBACK
 modal_timer_proc (HWND     hwnd,
-		   UINT     msg,
-		   UINT     id,
-		   DWORD    time)
+		  UINT     msg,
+		  UINT     id,
+		  DWORD    time)
 {
   if (_sizemove_in_progress)
     handle_stuff_while_moving_or_resizing ();
 }
 
+static VOID CALLBACK
+sync_timer_proc (HWND hwnd,
+		 UINT msg,
+		 UINT id,
+		 DWORD time)
+{
+  MSG message;
+  if (PeekMessageW (&message, hwnd, WM_PAINT, WM_PAINT, PM_REMOVE))
+    {
+      return;
+    }
+
+  RedrawWindow (hwnd, NULL, NULL, RDW_INVALIDATE|RDW_UPDATENOW|RDW_ALLCHILDREN);
+
+  KillTimer (hwnd, sync_timer);
+}
+
 static void
 handle_display_change (void)
 {
@@ -2878,6 +2896,13 @@
       *ret_valp = 1;
       break;
 
+    case WM_SYNCPAINT:
+
+      sync_timer = SetTimer (GDK_WINDOW_HWND (window),
+			     1,
+			     200, sync_timer_proc);
+      break;
+
     case WM_PAINT:
       handle_wm_paint (msg, window, FALSE, NULL);
       break;
