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)
|
WXHBRUSH wxChoice::MSWControlColor(WXHDC hDC, WXHWND hWnd)
|
||||||
{
|
{
|
||||||
if ( !IsEnabled() )
|
if ( !IsThisEnabled() )
|
||||||
return MSWControlColorDisabled(hDC);
|
return MSWControlColorDisabled(hDC);
|
||||||
|
|
||||||
return wxChoiceBase::MSWControlColor(hDC, hWnd);
|
return wxChoiceBase::MSWControlColor(hDC, hWnd);
|
||||||
|
@@ -294,7 +294,7 @@ wxComboCtrl::PrepareBackground( wxDC& dc, const wxRect& rect, int flags ) const
|
|||||||
if ( !(flags & wxCONTROL_ISSUBMENU) )
|
if ( !(flags & wxCONTROL_ISSUBMENU) )
|
||||||
{
|
{
|
||||||
// Drawing control
|
// Drawing control
|
||||||
isEnabled = IsEnabled();
|
isEnabled = IsThisEnabled();
|
||||||
doDrawFocusRect = ShouldDrawFocus();
|
doDrawFocusRect = ShouldDrawFocus();
|
||||||
|
|
||||||
#if wxUSE_UXTHEME
|
#if wxUSE_UXTHEME
|
||||||
@@ -429,7 +429,7 @@ void wxComboCtrl::OnPaintEvent( wxPaintEvent& WXUNUSED(event) )
|
|||||||
wxColour bgCol = GetBackgroundColour();
|
wxColour bgCol = GetBackgroundColour();
|
||||||
|
|
||||||
#if wxUSE_UXTHEME
|
#if wxUSE_UXTHEME
|
||||||
const bool isEnabled = IsEnabled();
|
const bool isEnabled = IsThisEnabled();
|
||||||
|
|
||||||
wxMSWDCImpl *impl = (wxMSWDCImpl*) dc.GetImpl();
|
wxMSWDCImpl *impl = (wxMSWDCImpl*) dc.GetImpl();
|
||||||
HDC hDc = GetHdcOf(*impl);
|
HDC hDc = GetHdcOf(*impl);
|
||||||
|
@@ -2055,7 +2055,7 @@ bool wxTextCtrl::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
|
|||||||
|
|
||||||
WXHBRUSH wxTextCtrl::MSWControlColor(WXHDC hDC, WXHWND hWnd)
|
WXHBRUSH wxTextCtrl::MSWControlColor(WXHDC hDC, WXHWND hWnd)
|
||||||
{
|
{
|
||||||
if ( !IsEnabled() && !HasFlag(wxTE_MULTILINE) )
|
if ( !IsThisEnabled() && !HasFlag(wxTE_MULTILINE) )
|
||||||
return MSWControlColorDisabled(hDC);
|
return MSWControlColorDisabled(hDC);
|
||||||
|
|
||||||
return wxTextCtrlBase::MSWControlColor(hDC, hWnd);
|
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.
|
// so we have to issue explicit refresh to avoid rendering artifacts.
|
||||||
//
|
//
|
||||||
// TODO: find out just what exactly is wrong here
|
// 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()
|
void wxTopLevelWindowMSW::DoFreeze()
|
||||||
|
Reference in New Issue
Block a user