diff options
Diffstat (limited to 'gdk/win32/gdkevents-win32.c')
-rw-r--r-- | gdk/win32/gdkevents-win32.c | 31 |
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; |