Defer SetHorizontalExtent to idle, also fixes (wxListBox::Delete ignores Freeze/Thaw and is verrrrry slow)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@53743 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -147,11 +147,13 @@ protected:
|
|||||||
virtual void* DoGetItemClientData(unsigned int n) const;
|
virtual void* DoGetItemClientData(unsigned int n) const;
|
||||||
virtual int DoListHitTest(const wxPoint& point) const;
|
virtual int DoListHitTest(const wxPoint& point) const;
|
||||||
|
|
||||||
|
bool m_updateHorizontalExtent;
|
||||||
|
virtual void OnInternalIdle();
|
||||||
|
|
||||||
// free memory (common part of Clear() and dtor)
|
// free memory (common part of Clear() and dtor)
|
||||||
void Free();
|
void Free();
|
||||||
|
|
||||||
unsigned int m_noItems;
|
unsigned int m_noItems;
|
||||||
int m_selected;
|
|
||||||
|
|
||||||
virtual wxSize DoGetBestSize() const;
|
virtual wxSize DoGetBestSize() const;
|
||||||
|
|
||||||
|
@@ -145,7 +145,7 @@ wxOwnerDrawn *wxListBox::CreateLboxItem(size_t WXUNUSED(n))
|
|||||||
wxListBox::wxListBox()
|
wxListBox::wxListBox()
|
||||||
{
|
{
|
||||||
m_noItems = 0;
|
m_noItems = 0;
|
||||||
m_selected = 0;
|
m_updateHorizontalExtent = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxListBox::Create(wxWindow *parent,
|
bool wxListBox::Create(wxWindow *parent,
|
||||||
@@ -158,7 +158,7 @@ bool wxListBox::Create(wxWindow *parent,
|
|||||||
const wxString& name)
|
const wxString& name)
|
||||||
{
|
{
|
||||||
m_noItems = 0;
|
m_noItems = 0;
|
||||||
m_selected = 0;
|
m_updateHorizontalExtent = false;
|
||||||
|
|
||||||
// initialize base class fields
|
// initialize base class fields
|
||||||
if ( !CreateControl(parent, id, pos, size, style, validator, name) )
|
if ( !CreateControl(parent, id, pos, size, style, validator, name) )
|
||||||
@@ -245,6 +245,17 @@ WXDWORD wxListBox::MSWGetStyle(long style, WXDWORD *exstyle) const
|
|||||||
return msStyle;
|
return msStyle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wxListBox::OnInternalIdle()
|
||||||
|
{
|
||||||
|
wxWindow::OnInternalIdle();
|
||||||
|
|
||||||
|
if (m_updateHorizontalExtent)
|
||||||
|
{
|
||||||
|
SetHorizontalExtent(wxEmptyString);
|
||||||
|
m_updateHorizontalExtent = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// implementation of wxListBoxBase methods
|
// implementation of wxListBoxBase methods
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -265,7 +276,8 @@ void wxListBox::DoDeleteOneItem(unsigned int n)
|
|||||||
SendMessage(GetHwnd(), LB_DELETESTRING, n, 0);
|
SendMessage(GetHwnd(), LB_DELETESTRING, n, 0);
|
||||||
m_noItems--;
|
m_noItems--;
|
||||||
|
|
||||||
SetHorizontalExtent(wxEmptyString);
|
// SetHorizontalExtent(wxEmptyString); can be slow
|
||||||
|
m_updateHorizontalExtent = true;
|
||||||
|
|
||||||
UpdateOldSelections();
|
UpdateOldSelections();
|
||||||
}
|
}
|
||||||
@@ -290,7 +302,7 @@ void wxListBox::DoClear()
|
|||||||
ListBox_ResetContent(GetHwnd());
|
ListBox_ResetContent(GetHwnd());
|
||||||
|
|
||||||
m_noItems = 0;
|
m_noItems = 0;
|
||||||
SetHorizontalExtent();
|
m_updateHorizontalExtent = true;
|
||||||
|
|
||||||
UpdateOldSelections();
|
UpdateOldSelections();
|
||||||
}
|
}
|
||||||
@@ -468,7 +480,7 @@ int wxListBox::DoInsertItems(const wxArrayStringsAdapter & items,
|
|||||||
AssignNewItemClientData(n, clientData, i, type);
|
AssignNewItemClientData(n, clientData, i, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
SetHorizontalExtent();
|
m_updateHorizontalExtent = true;
|
||||||
|
|
||||||
UpdateOldSelections();
|
UpdateOldSelections();
|
||||||
|
|
||||||
@@ -530,7 +542,7 @@ void wxListBox::SetString(unsigned int n, const wxString& s)
|
|||||||
if ( wasSelected )
|
if ( wasSelected )
|
||||||
Select(n);
|
Select(n);
|
||||||
|
|
||||||
SetHorizontalExtent();
|
m_updateHorizontalExtent = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int wxListBox::GetCount() const
|
unsigned int wxListBox::GetCount() const
|
||||||
|
Reference in New Issue
Block a user