Check for empty page location to avoid crash in lack of selected book (solves bug #1121381).
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@32955 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -125,6 +125,22 @@ class wxHtmlHelpHtmlWindow : public wxHtmlWindow
|
|||||||
m_Frame->NotifyPageChanged();
|
m_Frame->NotifyPageChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Returns full location with anchor (helper)
|
||||||
|
static wxString GetOpenedPageWithAnchor(wxHtmlWindow *win)
|
||||||
|
{
|
||||||
|
if(!win)
|
||||||
|
return wxEmptyString;
|
||||||
|
|
||||||
|
wxString an = win->GetOpenedAnchor();
|
||||||
|
wxString pg = win->GetOpenedPage();
|
||||||
|
if(!an.empty())
|
||||||
|
{
|
||||||
|
pg << wxT("#");
|
||||||
|
pg << an;
|
||||||
|
}
|
||||||
|
return pg;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
wxHtmlHelpFrame *m_Frame;
|
wxHtmlHelpFrame *m_Frame;
|
||||||
|
|
||||||
@@ -682,7 +698,7 @@ void wxHtmlHelpFrame::SetTitleFormat(const wxString& format)
|
|||||||
bool wxHtmlHelpFrame::Display(const wxString& x)
|
bool wxHtmlHelpFrame::Display(const wxString& x)
|
||||||
{
|
{
|
||||||
wxString url = m_Data->FindPageByName(x);
|
wxString url = m_Data->FindPageByName(x);
|
||||||
if (!url.IsEmpty())
|
if (!url.empty())
|
||||||
{
|
{
|
||||||
m_HtmlWin->LoadPage(url);
|
m_HtmlWin->LoadPage(url);
|
||||||
NotifyPageChanged();
|
NotifyPageChanged();
|
||||||
@@ -695,7 +711,7 @@ bool wxHtmlHelpFrame::Display(const wxString& x)
|
|||||||
bool wxHtmlHelpFrame::Display(const int id)
|
bool wxHtmlHelpFrame::Display(const int id)
|
||||||
{
|
{
|
||||||
wxString url = m_Data->FindPageById(id);
|
wxString url = m_Data->FindPageById(id);
|
||||||
if (!url.IsEmpty())
|
if (!url.empty())
|
||||||
{
|
{
|
||||||
m_HtmlWin->LoadPage(url);
|
m_HtmlWin->LoadPage(url);
|
||||||
NotifyPageChanged();
|
NotifyPageChanged();
|
||||||
@@ -725,7 +741,7 @@ bool wxHtmlHelpFrame::DisplayContents()
|
|||||||
if (m_Data->GetBookRecArray().GetCount() > 0)
|
if (m_Data->GetBookRecArray().GetCount() > 0)
|
||||||
{
|
{
|
||||||
wxHtmlBookRecord& book = m_Data->GetBookRecArray()[0];
|
wxHtmlBookRecord& book = m_Data->GetBookRecArray()[0];
|
||||||
if (!book.GetStart().IsEmpty())
|
if (!book.GetStart().empty())
|
||||||
m_HtmlWin->LoadPage(book.GetFullPath(book.GetStart()));
|
m_HtmlWin->LoadPage(book.GetFullPath(book.GetStart()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -751,7 +767,7 @@ bool wxHtmlHelpFrame::DisplayIndex()
|
|||||||
if (m_Data->GetBookRecArray().GetCount() > 0)
|
if (m_Data->GetBookRecArray().GetCount() > 0)
|
||||||
{
|
{
|
||||||
wxHtmlBookRecord& book = m_Data->GetBookRecArray()[0];
|
wxHtmlBookRecord& book = m_Data->GetBookRecArray()[0];
|
||||||
if (!book.GetStart().IsEmpty())
|
if (!book.GetStart().empty())
|
||||||
m_HtmlWin->LoadPage(book.GetFullPath(book.GetStart()));
|
m_HtmlWin->LoadPage(book.GetFullPath(book.GetStart()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1353,12 +1369,11 @@ void wxHtmlHelpFrame::NotifyPageChanged()
|
|||||||
{
|
{
|
||||||
if (m_UpdateContents && m_PagesHash)
|
if (m_UpdateContents && m_PagesHash)
|
||||||
{
|
{
|
||||||
wxString an = m_HtmlWin->GetOpenedAnchor();
|
wxString page = wxHtmlHelpHtmlWindow::GetOpenedPageWithAnchor(m_HtmlWin);
|
||||||
wxHtmlHelpHashData *ha;
|
wxHtmlHelpHashData *ha = NULL;
|
||||||
if (an.IsEmpty())
|
if (!page.empty())
|
||||||
ha = (wxHtmlHelpHashData*) m_PagesHash->Get(m_HtmlWin->GetOpenedPage());
|
ha = (wxHtmlHelpHashData*) m_PagesHash->Get(page);
|
||||||
else
|
|
||||||
ha = (wxHtmlHelpHashData*) m_PagesHash->Get(m_HtmlWin->GetOpenedPage() + wxT("#") + an);
|
|
||||||
if (ha)
|
if (ha)
|
||||||
{
|
{
|
||||||
bool olduc = m_UpdateContents;
|
bool olduc = m_UpdateContents;
|
||||||
@@ -1408,12 +1423,10 @@ void wxHtmlHelpFrame::OnToolbar(wxCommandEvent& event)
|
|||||||
case wxID_HTML_UP :
|
case wxID_HTML_UP :
|
||||||
if (m_PagesHash)
|
if (m_PagesHash)
|
||||||
{
|
{
|
||||||
wxString an = m_HtmlWin->GetOpenedAnchor();
|
wxString page = wxHtmlHelpHtmlWindow::GetOpenedPageWithAnchor(m_HtmlWin);
|
||||||
wxHtmlHelpHashData *ha;
|
wxHtmlHelpHashData *ha = NULL;
|
||||||
if (an.IsEmpty())
|
if (!page.empty())
|
||||||
ha = (wxHtmlHelpHashData*) m_PagesHash->Get(m_HtmlWin->GetOpenedPage());
|
ha = (wxHtmlHelpHashData*) m_PagesHash->Get(page);
|
||||||
else
|
|
||||||
ha = (wxHtmlHelpHashData*) m_PagesHash->Get(m_HtmlWin->GetOpenedPage() + wxT("#") + an);
|
|
||||||
if (ha && ha->m_Index > 0)
|
if (ha && ha->m_Index > 0)
|
||||||
{
|
{
|
||||||
const wxHtmlHelpDataItem& it = m_Data->GetContentsArray()[ha->m_Index - 1];
|
const wxHtmlHelpDataItem& it = m_Data->GetContentsArray()[ha->m_Index - 1];
|
||||||
@@ -1429,12 +1442,10 @@ void wxHtmlHelpFrame::OnToolbar(wxCommandEvent& event)
|
|||||||
case wxID_HTML_UPNODE :
|
case wxID_HTML_UPNODE :
|
||||||
if (m_PagesHash)
|
if (m_PagesHash)
|
||||||
{
|
{
|
||||||
wxString an = m_HtmlWin->GetOpenedAnchor();
|
wxString page = wxHtmlHelpHtmlWindow::GetOpenedPageWithAnchor(m_HtmlWin);
|
||||||
wxHtmlHelpHashData *ha;
|
wxHtmlHelpHashData *ha = NULL;
|
||||||
if (an.IsEmpty())
|
if (!page.empty())
|
||||||
ha = (wxHtmlHelpHashData*) m_PagesHash->Get(m_HtmlWin->GetOpenedPage());
|
ha = (wxHtmlHelpHashData*) m_PagesHash->Get(page);
|
||||||
else
|
|
||||||
ha = (wxHtmlHelpHashData*) m_PagesHash->Get(m_HtmlWin->GetOpenedPage() + wxT("#") + an);
|
|
||||||
if (ha && ha->m_Index > 0)
|
if (ha && ha->m_Index > 0)
|
||||||
{
|
{
|
||||||
int level =
|
int level =
|
||||||
@@ -1463,21 +1474,17 @@ void wxHtmlHelpFrame::OnToolbar(wxCommandEvent& event)
|
|||||||
case wxID_HTML_DOWN :
|
case wxID_HTML_DOWN :
|
||||||
if (m_PagesHash)
|
if (m_PagesHash)
|
||||||
{
|
{
|
||||||
wxString an = m_HtmlWin->GetOpenedAnchor();
|
wxString page = wxHtmlHelpHtmlWindow::GetOpenedPageWithAnchor(m_HtmlWin);
|
||||||
wxString adr;
|
wxHtmlHelpHashData *ha = NULL;
|
||||||
wxHtmlHelpHashData *ha;
|
if (!page.empty())
|
||||||
|
ha = (wxHtmlHelpHashData*) m_PagesHash->Get(page);
|
||||||
if (an.IsEmpty()) adr = m_HtmlWin->GetOpenedPage();
|
|
||||||
else adr = m_HtmlWin->GetOpenedPage() + wxT("#") + an;
|
|
||||||
|
|
||||||
ha = (wxHtmlHelpHashData*) m_PagesHash->Get(adr);
|
|
||||||
|
|
||||||
const wxHtmlHelpDataItems& contents = m_Data->GetContentsArray();
|
const wxHtmlHelpDataItems& contents = m_Data->GetContentsArray();
|
||||||
if (ha && ha->m_Index < (int)contents.size() - 1)
|
if (ha && ha->m_Index < (int)contents.size() - 1)
|
||||||
{
|
{
|
||||||
size_t idx = ha->m_Index + 1;
|
size_t idx = ha->m_Index + 1;
|
||||||
|
|
||||||
while (contents[idx].GetFullPath() == adr) idx++;
|
while (contents[idx].GetFullPath() == page) idx++;
|
||||||
|
|
||||||
if (!contents[idx].page.empty())
|
if (!contents[idx].page.empty())
|
||||||
{
|
{
|
||||||
@@ -1576,7 +1583,7 @@ void wxHtmlHelpFrame::OnToolbar(wxCommandEvent& event)
|
|||||||
filemask,
|
filemask,
|
||||||
wxOPEN | wxFILE_MUST_EXIST,
|
wxOPEN | wxFILE_MUST_EXIST,
|
||||||
this);
|
this);
|
||||||
if (!s.IsEmpty())
|
if (!s.empty())
|
||||||
{
|
{
|
||||||
wxString ext = s.Right(4).Lower();
|
wxString ext = s.Right(4).Lower();
|
||||||
if (ext == _T(".zip") || ext == _T(".htb") ||
|
if (ext == _T(".zip") || ext == _T(".htb") ||
|
||||||
|
Reference in New Issue
Block a user