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
+ if (notebook->m_skipNextPageChangeEvent)
{
+ // this event was programatically generated by ChangeSelection() and thus must
+ // be skipped
+ notebook->m_skipNextPageChangeEvent = false;
+
// 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;
+ }
+ else
+ {
+ if ( !notebook->SendPageChangingEvent(page) )
+ {
+ // 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->SendPageChangedEvent(old);
+ }
}
notebook->m_inSwitchPage = FALSE;
return m_pagesData.Item(page)->GetData();
}
-int wxNotebook::SetSelection( size_t page )
+int wxNotebook::DoSetSelection( size_t page, int flags )
{
wxCHECK_MSG( m_widget != NULL, -1, wxT("invalid notebook") );
int selOld = GetSelection();
+ if ( !(flags & SetSelection_SendEvent) )
+ m_skipNextPageChangeEvent = true;
+
// cache the selection
m_selection = page;
gtk_notebook_set_page( GTK_NOTEBOOK(m_widget), page );
+#ifdef __WXDEBUG__
+ if ( !(flags & SetSelection_SendEvent) )
+ {
+ // gtk_notebook_set_current_page will emit the switch-page signal which will be
+ // caught by our gtk_notebook_page_change_callback which should have reset the
+ // flag to false:
+ wxASSERT(!m_skipNextPageChangeEvent);
+ }
+#endif // __WXDEBUG__
+
wxNotebookPage *client = GetPage(page);
if ( client )
client->SetFocus();