]> git.saurik.com Git - wxWidgets.git/commitdiff
Avoid events when implicitly selecting first wxBookCtrl page.
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 31 Oct 2010 13:33:34 +0000 (13:33 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 31 Oct 2010 13:33:34 +0000 (13:33 +0000)
The first page added to a wxBookCtrlBase-derived control is always selected,
even if "bSelect" argument of AddPage() was false. This is necessary because
a non-empty book control must always have a selection but the "selection
changed" event generated when doing it is unexpected.

Fix this by not generating any events when the first page is implicitly
selected.

Closes #12075.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65967 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/bookctrl.h
src/common/bookctrl.cpp
src/generic/choicbkg.cpp
src/generic/listbkg.cpp
src/msw/notebook.cpp
src/os2/notebook.cpp
src/osx/notebook_osx.cpp

index c7c7c27f9c81a71e35f298b05d566eaf7da92228..86a89acfd13c2b634cbcd136049da14382625a6f 100644 (file)
@@ -252,6 +252,17 @@ protected:
     // choose the default border for this window
     virtual wxBorder GetDefaultBorder() const { return wxBORDER_NONE; }
 
+    // After the insertion of the page in the method InsertPage, calling this
+    // method sets the selection to the given page or the first one if there is
+    // still no selection. The "selection changed" event is sent only if
+    // bSelect is true, so when it is false, no event is sent even if the
+    // selection changed from wxNOT_FOUND to 0 when inserting the first page.
+    //
+    // Returns true if the selection was set to the specified page (explicitly
+    // because of bSelect == true or implicitly because it's the first page) or
+    // false otherwise.
+    bool DoSetSelectionAfterInsertion(size_t n, bool bSelect);
+
     // set the selection to the given page, sending the events (which can
     // possibly prevent the page change from taking place) if SendEvent flag is
     // included
index cd3baf71e67401c2b87b3bf59f14f674f6af0b2d..5392388681f206df02125550ebbe1127f924d4c6 100644 (file)
@@ -471,6 +471,19 @@ int wxBookCtrlBase::GetNextPage(bool forward) const
     return nPage;
 }
 
+bool wxBookCtrlBase::DoSetSelectionAfterInsertion(size_t n, bool bSelect)
+{
+    if ( bSelect )
+        SetSelection(n);
+    else if ( m_selection == wxNOT_FOUND )
+        ChangeSelection(0);
+    else // We're not going to select this page.
+        return false;
+
+    // Return true to indicate that we selected this page.
+    return true;
+}
+
 int wxBookCtrlBase::DoSetSelection(size_t n, int flags)
 {
     wxCHECK_MSG( n < GetPageCount(), wxNOT_FOUND,
index 09e9465ffdde4f0e1522ec1debaf0a2547c79521..52fd088591cea7cd805d9751d00e7d084297bcde 100644 (file)
@@ -195,20 +195,9 @@ wxChoicebook::InsertPage(size_t n,
         GetChoiceCtrl()->Select(m_selection);
     }
 
-    // some page should be selected: either this one or the first one if there
-    // is still no selection
-    int selNew = wxNOT_FOUND;
-    if ( bSelect )
-        selNew = n;
-    else if ( m_selection == wxNOT_FOUND )
-        selNew = 0;
-
-    if ( selNew != m_selection )
+    if ( !DoSetSelectionAfterInsertion(n, bSelect) )
         page->Hide();
 
-    if ( selNew != wxNOT_FOUND )
-        SetSelection(selNew);
-
     return true;
 }
 
index fddedd14ae50075824234d19924c863199a4d5d8..0861211c0eeb4ab6d3d08253c9b03a0565d990db 100644 (file)
@@ -343,20 +343,9 @@ wxListbook::InsertPage(size_t n,
         GetListView()->Focus(m_selection);
     }
 
-    // some page should be selected: either this one or the first one if there
-    // is still no selection
-    int selNew = wxNOT_FOUND;
-    if ( bSelect )
-        selNew = n;
-    else if ( m_selection == wxNOT_FOUND )
-        selNew = 0;
-
-    if ( selNew != m_selection )
+    if ( !DoSetSelectionAfterInsertion(n, bSelect) )
         page->Hide();
 
-    if ( selNew != wxNOT_FOUND )
-        SetSelection(selNew);
-
     UpdateSize();
 
     return true;
index f5487c26b980e3f86a4912e566372502bbd457ee..046096b05f5a63ef886f2cfc5e0dca7e385f83d3 100644 (file)
@@ -842,16 +842,7 @@ bool wxNotebook::InsertPage(size_t nPage,
         m_selection++;
     }
 
-    // some page should be selected: either this one or the first one if there
-    // is still no selection
-    int selNew = wxNOT_FOUND;
-    if ( bSelect )
-        selNew = nPage;
-    else if ( m_selection == wxNOT_FOUND )
-        selNew = 0;
-
-    if ( selNew != wxNOT_FOUND )
-        SetSelection(selNew);
+    DoSetSelectionAfterInsertion(nPage, bSelect);
 
     InvalidateBestSize();
 
index fb45fe10a3e64131652bd3d23bf4b46fd09356ed..f0a88c0c6ab57d8ea4ea7e8cf961f5af95a25e0a 100644 (file)
@@ -648,19 +648,7 @@ bool wxNotebook::InsertPage ( size_t          nPage,
         pPage->Show(false);
     }
 
-    //
-    // Some page should be selected: either this one or the first one if there is
-    // still no selection
-    //
-    int nSelNew = wxNOT_FOUND;
-
-    if (bSelect)
-        nSelNew = nPage;
-    else if ( m_selection == wxNOT_FOUND )
-        nSelNew = 0;
-
-    if (nSelNew != wxNOT_FOUND)
-        SetSelection(nSelNew);
+    DoSetSelectionAfterInsertion(nPage, bSelect);
 
     InvalidateBestSize();
 
index 110a36e9916afb6e8361326fb054ed6e76590da3..fb58c4850992b4d528dda2aa1135d190c8499329 100644 (file)
@@ -240,16 +240,7 @@ bool wxNotebook::InsertPage(size_t nPage,
         m_peer->SetValue( m_selection + 1 ) ;
     }
 
-    // some page should be selected: either this one or the first one if there
-    // is still no selection
-    int selNew = wxNOT_FOUND;
-    if ( bSelect )
-        selNew = nPage;
-    else if ( m_selection == wxNOT_FOUND )
-        selNew = 0;
-
-    if ( selNew != wxNOT_FOUND )
-        SetSelection( selNew );
+    DoSetSelectionAfterInsertion(nPage, bSelect);
 
     InvalidateBestSize();