summaryrefslogtreecommitdiff
path: root/gdk/win32/gdkevents-win32.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdk/win32/gdkevents-win32.c')
-rw-r--r--gdk/win32/gdkevents-win32.c31
1 files changed, 28 insertions, 3 deletions
diff --git a/gdk/win32/gdkevents-win32.c b/gdk/win32/gdkevents-win32.c
index 6633f5920..6e3565469 100644
--- a/gdk/win32/gdkevents-win32.c
+++ b/gdk/win32/gdkevents-win32.c
@@ -139,6 +139,7 @@ static HKL latin_locale = NULL;
static gboolean in_ime_composition = FALSE;
static UINT modal_timer;
+static UINT sync_timer = 0;
static int debug_indent = 0;
@@ -2031,14 +2032,31 @@ handle_stuff_while_moving_or_resizing (void)
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)
{
@@ -2824,6 +2842,13 @@ gdk_event_translate (MSG *msg,
*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;