X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9f30729a03fc1a1de3a71c3b1af2192df45e7318..9fd8f2dd3df305448a0c2d56508c04e26385a76d:/src/generic/treebkg.cpp diff --git a/src/generic/treebkg.cpp b/src/generic/treebkg.cpp index 066e30edff..8f34b7ef4d 100644 --- a/src/generic/treebkg.cpp +++ b/src/generic/treebkg.cpp @@ -432,7 +432,9 @@ void wxTreebook::DoInternalRemovePageRange(size_t pagePos, size_t subCount) // actually shown page (the first (sub)child with page != NULL) is // already deleted m_actualSelection = m_selection; - DoSetSelection(m_selection); + + // send event as documented + DoSetSelection(m_selection, SetSelection_SendEvent); } //else: nothing to do -- selection is before the deleted node } @@ -583,34 +585,32 @@ int wxTreebook::GetSelection() const return m_selection; } -int wxTreebook::SetSelection(size_t pagePos) -{ - if ( (size_t)m_selection != pagePos ) - return DoSetSelection(pagePos); - - return m_selection; -} - -int wxTreebook::DoSetSelection(size_t pagePos) +int wxTreebook::DoSetSelection(size_t pagePos, int flags) { wxCHECK_MSG( IS_VALID_PAGE(pagePos), wxNOT_FOUND, - wxT("invalid page index in wxListbook::SetSelection()") ); + wxT("invalid page index in wxListbook::DoSetSelection()") ); wxASSERT_MSG( GetPageCount() == DoInternalGetPageCount(), wxT("wxTreebook logic error: m_treeIds and m_pages not in sync!")); + wxTreebookEvent event(wxEVT_COMMAND_TREEBOOK_PAGE_CHANGING, m_windowId); const int oldSel = m_selection; wxTreeCtrl *tree = GetTreeCtrl(); + bool allowed = false; - wxTreebookEvent event(wxEVT_COMMAND_TREEBOOK_PAGE_CHANGING, m_windowId); - event.SetEventObject(this); - event.SetSelection(pagePos); - event.SetOldSelection(m_selection); - - // don't send the event if the old and new pages are the same; do send it - // otherwise and be prepared for it to be vetoed - if ( (int)pagePos == m_selection || - !GetEventHandler()->ProcessEvent(event) || - event.IsAllowed() ) + if (flags & SetSelection_SendEvent) + { + event.SetEventObject(this); + event.SetSelection(pagePos); + event.SetOldSelection(m_selection); + + // don't send the event if the old and new pages are the same; do send it + // otherwise and be prepared for it to be vetoed + allowed = (int)pagePos == m_selection || + !GetEventHandler()->ProcessEvent(event) || + event.IsAllowed(); + } + + if ( !(flags & SetSelection_SendEvent) || allowed ) { // hide the previously shown page wxTreebookPage * const oldPage = DoGetCurrentPage(); @@ -644,11 +644,14 @@ int wxTreebook::DoSetSelection(size_t pagePos) tree->SelectItem(DoInternalGetPage(pagePos)); - // notify about the (now completed) page change - event.SetEventType(wxEVT_COMMAND_TREEBOOK_PAGE_CHANGED); - (void)GetEventHandler()->ProcessEvent(event); + if (flags & SetSelection_SendEvent) + { + // notify about the (now completed) page change + event.SetEventType(wxEVT_COMMAND_TREEBOOK_PAGE_CHANGED); + (void)GetEventHandler()->ProcessEvent(event); + } } - else // page change vetoed + else if ( (flags & SetSelection_SendEvent) && !allowed) // page change vetoed { // tree selection might have already had changed if ( oldSel != wxNOT_FOUND ) @@ -743,7 +746,7 @@ int wxTreebook::HitTest(wxPoint const & pt, long * flags) const const wxPoint treePt = tree->ScreenToClient(ClientToScreen(pt)); // is it over the tree? - if ( wxRect(tree->GetSize()).Inside(treePt) ) + if ( wxRect(tree->GetSize()).Contains(treePt) ) { int flagsTree; wxTreeItemId id = tree->HitTest(treePt, flagsTree); @@ -769,7 +772,7 @@ int wxTreebook::HitTest(wxPoint const & pt, long * flags) const } else // not over the tree { - if ( flags && GetPageRect().Inside( pt ) ) + if ( flags && GetPageRect().Contains( pt ) ) *flags |= wxBK_HITTEST_ONPAGE; }