fixed crash in multi notebook

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42536 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Benjamin Williams
2006-10-27 15:52:21 +00:00
parent 8775253065
commit ae4558e051

View File

@@ -1030,7 +1030,7 @@ bool wxAuiMultiNotebook::InsertPage(size_t page_idx,
bool wxAuiMultiNotebook::DeletePage(size_t page_idx) bool wxAuiMultiNotebook::DeletePage(size_t page_idx)
{ {
wxWindow* wnd = m_tabs.GetWindowFromIdx(page_idx); wxWindow* wnd = m_tabs.GetWindowFromIdx(page_idx);
wxWindow* new_active = NULL;
// find out which onscreen tab ctrl owns this tab // find out which onscreen tab ctrl owns this tab
wxAuiTabCtrl* ctrl; wxAuiTabCtrl* ctrl;
@@ -1045,33 +1045,24 @@ bool wxAuiMultiNotebook::DeletePage(size_t page_idx)
if (new_idx >= 0 && new_idx < (int)ctrl->GetPageCount()) if (new_idx >= 0 && new_idx < (int)ctrl->GetPageCount())
{ {
wxWindow* new_wnd = ctrl->GetWindowFromIdx(new_idx); new_active = ctrl->GetWindowFromIdx(new_idx);
int main_idx = m_tabs.GetIdxFromWindow(new_wnd);
wxASSERT(main_idx != -1);
SetSelection(main_idx);
} }
else else
{ {
// set the active page to the first page that // set the active page to the first page that
// isn't the one being deleted // isn't the one being deleted
bool found = false;
size_t i, page_count = m_tabs.GetPageCount(); size_t i, page_count = m_tabs.GetPageCount();
for (i = 0; i < page_count; ++i) for (i = 0; i < page_count; ++i)
{ {
wxWindow* w = m_tabs.GetWindowFromIdx(i); wxWindow* w = m_tabs.GetWindowFromIdx(i);
if (wnd != w) if (wnd != w)
{ {
found = true; new_active = m_tabs.GetWindowFromIdx(i);
SetSelection(i);
break; break;
} }
} }
if (!found)
m_curpage = -1;
} }
// remove the tab from main catalog // remove the tab from main catalog
if (!m_tabs.RemovePage(wnd)) if (!m_tabs.RemovePage(wnd))
return false; return false;
@@ -1094,6 +1085,13 @@ bool wxAuiMultiNotebook::DeletePage(size_t page_idx)
RemoveEmptyTabFrames(); RemoveEmptyTabFrames();
// set new active pane
if (new_active)
{
m_curpage = -1;
SetSelection(m_tabs.GetIdxFromWindow(new_active));
}
return true; return true;
} }