A fix for flicker when the top-level window is disabled or enabled (e.g. by modal dialogs).
Achieved by using IsThisEnabled to determine the visual disabled state and thus requiring no refresh on top-level window enabling/disabling. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70870 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -758,7 +758,7 @@ bool wxChoice::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
|
||||
|
||||
WXHBRUSH wxChoice::MSWControlColor(WXHDC hDC, WXHWND hWnd)
|
||||
{
|
||||
if ( !IsEnabled() )
|
||||
if ( !IsThisEnabled() )
|
||||
return MSWControlColorDisabled(hDC);
|
||||
|
||||
return wxChoiceBase::MSWControlColor(hDC, hWnd);
|
||||
|
@@ -294,7 +294,7 @@ wxComboCtrl::PrepareBackground( wxDC& dc, const wxRect& rect, int flags ) const
|
||||
if ( !(flags & wxCONTROL_ISSUBMENU) )
|
||||
{
|
||||
// Drawing control
|
||||
isEnabled = IsEnabled();
|
||||
isEnabled = IsThisEnabled();
|
||||
doDrawFocusRect = ShouldDrawFocus();
|
||||
|
||||
#if wxUSE_UXTHEME
|
||||
@@ -429,7 +429,7 @@ void wxComboCtrl::OnPaintEvent( wxPaintEvent& WXUNUSED(event) )
|
||||
wxColour bgCol = GetBackgroundColour();
|
||||
|
||||
#if wxUSE_UXTHEME
|
||||
const bool isEnabled = IsEnabled();
|
||||
const bool isEnabled = IsThisEnabled();
|
||||
|
||||
wxMSWDCImpl *impl = (wxMSWDCImpl*) dc.GetImpl();
|
||||
HDC hDc = GetHdcOf(*impl);
|
||||
|
@@ -2055,7 +2055,7 @@ bool wxTextCtrl::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
|
||||
|
||||
WXHBRUSH wxTextCtrl::MSWControlColor(WXHDC hDC, WXHWND hWnd)
|
||||
{
|
||||
if ( !IsEnabled() && !HasFlag(wxTE_MULTILINE) )
|
||||
if ( !IsThisEnabled() && !HasFlag(wxTE_MULTILINE) )
|
||||
return MSWControlColorDisabled(hDC);
|
||||
|
||||
return wxTextCtrlBase::MSWControlColor(hDC, hWnd);
|
||||
|
@@ -1344,7 +1344,21 @@ void wxTopLevelWindowMSW::DoEnable(bool enable)
|
||||
// so we have to issue explicit refresh to avoid rendering artifacts.
|
||||
//
|
||||
// TODO: find out just what exactly is wrong here
|
||||
Refresh();
|
||||
//Refresh();
|
||||
|
||||
// JS: From observing other application behaviour, such as VS 2010, controls such
|
||||
// as text fields and comboboxes do not indicate a disabled state when the parent
|
||||
// is disabled due to a modal dialog being shown. Therefore I have changed these
|
||||
// controls' behaviour to only indicate a disabled state when IsThisEnabled returns false,
|
||||
// i.e. the application has specifically disabled each control. Since the colour
|
||||
// no longer changes when the top-level window is disabled, this means we can avoid
|
||||
// doing a refresh that causes a distracting flicker in some controls.
|
||||
// Windows should probably be sending a paint event to each child control just in
|
||||
// case the state change requires a refresh, but this would cause flicker so perhaps
|
||||
// it's as well that it doesn't.
|
||||
// The result of this change is to remove the flicker and also remove the distraction
|
||||
// of individual controls greying-out due to a dialog being shown, which I think was
|
||||
// the wrong behaviour.
|
||||
}
|
||||
|
||||
void wxTopLevelWindowMSW::DoFreeze()
|
||||
|
Reference in New Issue
Block a user