X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1a75e76f399bc91b3f841e7f77140e83f9bd5958..10da6a8fa4bcff9a1d6ff09012cd70ad7df38f94:/src/os2/notebook.cpp diff --git a/src/os2/notebook.cpp b/src/os2/notebook.cpp index dbf582f6d4..fe64de1281 100644 --- a/src/os2/notebook.cpp +++ b/src/os2/notebook.cpp @@ -212,19 +212,34 @@ int wxNotebook::SetSelection( ) { wxCHECK_MSG( IS_VALID_PAGE(nPage), -1, wxT("notebook page out of range") ); - int nOldPage = GetSelection(); - ChangePage( m_nSelection - ,nPage - ); + if (nPage != m_nSelection) + { + wxNotebookEvent vEvent( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING + ,m_windowId + ); - ULONG ulPageId = (ULONG)m_alPageId[nPage]; + vEvent.SetSelection(nPage); + vEvent.SetOldSelection(m_nSelection); + vEvent.SetEventObject(this); + if (!GetEventHandler()->ProcessEvent(vEvent) || vEvent.IsAllowed()) + { - ::WinSendMsg( GetHWND() - ,BKM_TURNTOPAGE - ,MPFROMLONG((ULONG)m_alPageId[nPage]) - ,(MPARAM)0 - ); + // + // Program allows the page change + // + vEvent.SetEventType(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED); + GetEventHandler()->ProcessEvent(vEvent); + + ULONG ulPageId = (ULONG)m_alPageId[nPage]; + + ::WinSendMsg( GetHWND() + ,BKM_TURNTOPAGE + ,MPFROMLONG((ULONG)m_alPageId[nPage]) + ,(MPARAM)0 + ); + } + } m_nSelection = nPage; return nPage; } // end of wxNotebook::SetSelection @@ -891,56 +906,5 @@ bool wxNotebook::OS2OnScroll ( ); } // end of wxNotebook::OS2OnScroll -// ---------------------------------------------------------------------------- -// wxNotebook helper functions -// ---------------------------------------------------------------------------- - -// -// Generate the page changing and changed events, hide the currently active -// panel and show the new one -// -void wxNotebook::ChangePage ( - int nOldSel -, int nSel -) -{ - static bool sbInsideChangePage = FALSE; - - // - // When we call ProcessEvent(), our own OnSelChange() is called which calls - // this function - break the infinite loop - // - if (sbInsideChangePage) - return; - - // - // It's not an error (the message may be generated by the tab control itself) - // and it may happen - just do nothing - // - if (nSel == nOldSel) - return; - - sbInsideChangePage = TRUE; - - wxNotebookEvent rEvent( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING - ,m_windowId - ); - - rEvent.SetSelection(nSel); - rEvent.SetOldSelection(nOldSel); - rEvent.SetEventObject(this); - if (GetEventHandler()->ProcessEvent(rEvent) && !rEvent.IsAllowed()) - { - // - // Program doesn't allow the page change - // - sbInsideChangePage = FALSE; - return; - } - rEvent.SetEventType(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED); - GetEventHandler()->ProcessEvent(rEvent); - sbInsideChangePage = FALSE; -} // end of wxNotebook::ChangePage - #endif // wxUSE_NOTEBOOK