- // TODO: emulate PAGE_CHANGING event
-
- wxNotebookEvent event( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED,
- notebook->GetId(), nPage, old );
- event.SetEventObject( notebook );
- notebook->GetEventHandler()->ProcessEvent( event );
+ int old = notebook->GetSelection();
+
+ wxNotebookEvent eventChanging( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING,
+ notebook->GetId(), page, old );
+ eventChanging.SetEventObject( notebook );
+
+ if ( (notebook->GetEventHandler()->ProcessEvent(eventChanging)) &&
+ !eventChanging.IsAllowed() )
+ {
+ /* program doesn't allow the page change */
+ gtk_signal_emit_stop_by_name( GTK_OBJECT(notebook->m_widget),
+ "switch_page" );
+ }
+ else // change allowed
+ {
+ // make wxNotebook::GetSelection() return the correct (i.e. consistent
+ // with wxNotebookEvent::GetSelection()) value even though the page is
+ // not really changed in GTK+
+ notebook->m_selection = page;
+
+ wxNotebookEvent eventChanged( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED,
+ notebook->GetId(), page, old );
+ eventChanged.SetEventObject( notebook );
+ notebook->GetEventHandler()->ProcessEvent( eventChanged );
+ }
+
+ notebook->m_inSwitchPage = FALSE;