From 90df6033544b93f48573c6a5371fefc87f36e564 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 24 Oct 2007 23:27:17 +0000 Subject: [PATCH] release update region as soon as we finished painting the window instead of keeping it indefinitely (bug 1819635) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@49411 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/msw/window.cpp | 51 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 36 insertions(+), 15 deletions(-) diff --git a/src/msw/window.cpp b/src/msw/window.cpp index 3fd01af496..cbacc08988 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -4506,6 +4506,10 @@ bool wxWindowMSW::HandlePaint() eventNc.SetEventObject(this); GetEventHandler()->ProcessEvent(eventNc); + // don't keep an HRGN we don't need any longer (GetUpdateRegion() can only + // be called from inside the event handlers called above) + m_updateRegion.Clear(); + return processed; } @@ -4551,20 +4555,29 @@ void wxWindowMSW::OnEraseBackground(wxEraseEvent& event) return; } - if ( GetBackgroundStyle() == wxBG_STYLE_CUSTOM ) + switch ( GetBackgroundStyle() ) { - // don't skip the event here, custom background means that the app - // is drawing it itself in its OnPaint(), so don't draw it at all - // now to avoid flicker - return; - } + default: + wxFAIL_MSG( _T("Unknown background style") ); + // fall through + case wxBG_STYLE_SYSTEM: + case wxBG_STYLE_COLOUR: + // do default background painting + if ( !DoEraseBackground(GetHdcOf(*event.GetDC())) ) + { + // let the system paint the background + event.Skip(); + } - // do default background painting - if ( !DoEraseBackground(GetHdcOf(*event.GetDC())) ) - { - // let the system paint the background - event.Skip(); + case wxBG_STYLE_CUSTOM: + // don't skip the event here, custom background means that the app + // is drawing it itself in its OnPaint(), so don't draw it at all + // now to avoid flicker + return; + + case wxBG_STYLE_TRANSPARENT: + event.Skip(); } } @@ -5935,10 +5948,18 @@ WXWORD wxCharCodeWXToMSW(int wxk, bool *isVirtual) break; default: - if ( isVirtual ) - *isVirtual = false; - vk = (WXWORD)wxk; - break; + // check to see if its one of the OEM key codes. + BYTE vks = LOBYTE(VkKeyScan(wxk)); + if ( vks != -1 ) + { + vk = vks; + } + else + { + if ( isVirtual ) + *isVirtual = false; + vk = (WXWORD)wxk; + } } return vk;