Bug 153567 – Repaint glitches in widgets

2008-07-21  Cody Russell  <bratsche@gnome.org>

        Bug 153567 – Repaint glitches in widgets

        * gdk/win32/gdkevents-win32.c: Set a sync timer when
        we receive WM_SYNCPAINT, and RedrawWindow() once
        the timer expires.


svn path=/trunk/; revision=20881
This commit is contained in:
Cody Russell 2008-07-21 12:46:41 +00:00 committed by Cody Russell
parent b06c30bb51
commit c8fef535b2
2 changed files with 36 additions and 3 deletions

View File

@ -1,3 +1,11 @@
2008-07-21 Cody Russell <bratsche@gnome.org>
Bug 153567 Repaint glitches in widgets
* gdk/win32/gdkevents-win32.c: Set a sync timer when
we receive WM_SYNCPAINT, and RedrawWindow() once
the timer expires.
2008-07-21 Michael Natterer <mitch@imendio.com> 2008-07-21 Michael Natterer <mitch@imendio.com>
* gtk/gtktoolbar.c (gtk_toolbar_class_init): use the simpler * gtk/gtktoolbar.c (gtk_toolbar_class_init): use the simpler

View File

@ -139,6 +139,7 @@ static HKL latin_locale = NULL;
static gboolean in_ime_composition = FALSE; static gboolean in_ime_composition = FALSE;
static UINT modal_timer; static UINT modal_timer;
static UINT sync_timer = 0;
static int debug_indent = 0; static int debug_indent = 0;
@ -2031,14 +2032,31 @@ handle_stuff_while_moving_or_resizing (void)
static VOID CALLBACK static VOID CALLBACK
modal_timer_proc (HWND hwnd, modal_timer_proc (HWND hwnd,
UINT msg, UINT msg,
UINT id, UINT id,
DWORD time) DWORD time)
{ {
if (_sizemove_in_progress) if (_sizemove_in_progress)
handle_stuff_while_moving_or_resizing (); 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 static void
handle_display_change (void) handle_display_change (void)
{ {
@ -2824,6 +2842,13 @@ gdk_event_translate (MSG *msg,
*ret_valp = 1; *ret_valp = 1;
break; break;
case WM_SYNCPAINT:
sync_timer = SetTimer (GDK_WINDOW_HWND (window),
1,
200, sync_timer_proc);
break;
case WM_PAINT: case WM_PAINT:
handle_wm_paint (msg, window, FALSE, NULL); handle_wm_paint (msg, window, FALSE, NULL);
break; break;