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:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user