- if ( m_selection != wxNOT_FOUND )
- m_pages[m_selection]->Hide();
- wxWindow *page = m_pages[n];
- page->SetSize(GetPageRect());
- page->Show();
-
- // change m_selection only now to ignore the selection change event
- m_selection = n;
-
- m_list->Select(n);
- m_list->Focus(n);
+ wxListbookEvent event(wxEVT_COMMAND_LISTBOOK_PAGE_CHANGING, m_windowId);
+ event.SetSelection(n);
+ event.SetOldSelection(m_selection);
+ event.SetEventObject(this);
+ if ( !GetEventHandler()->ProcessEvent(event) || event.IsAllowed() )
+ {
+ if ( m_selection != wxNOT_FOUND )
+ m_pages[m_selection]->Hide();
+
+ wxWindow *page = m_pages[n];
+ page->SetSize(GetPageRect());
+ page->Show();
+
+ // change m_selection now to ignore the selection change event
+ m_selection = n;
+ GetListView()->Select(n);
+ GetListView()->Focus(n);
+
+ // program allows the page change
+ event.SetEventType(wxEVT_COMMAND_LISTBOOK_PAGE_CHANGED);
+ (void)GetEventHandler()->ProcessEvent(event);
+ }