]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/notebook.cpp
exposing the dynamic event table
[wxWidgets.git] / src / os2 / notebook.cpp
index dbf582f6d481da78b3a0c3694d30ad7f67e67b9b..fe64de12818c4a3d5e815710cb4d2fb16d0ad229 100644 (file)
@@ -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