+ // when we call ProcessEvent(), our own OnSelChange() is called which calls
+ // this function - break the infinite loop
+ if ( s_bInsideChangePage )
+ 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;
+
+ s_bInsideChangePage = TRUE;
+
+ wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, m_windowId);
+ event.SetSelection(nSel);
+ event.SetOldSelection(nOldSel);
+ event.SetEventObject(this);
+ if ( ProcessEvent(event) && !event.IsAllowed() )
+ {
+ // program doesn't allow the page change
+ s_bInsideChangePage = FALSE;
+ return;