]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/listbkg.cpp
Compilation fixes.
[wxWidgets.git] / src / generic / listbkg.cpp
index 676b202c93662e19cc6c0b1ebe397b3effda71ca..f0d53056976b41066f4b9a08bc1860336f91c414 100644 (file)
@@ -45,7 +45,7 @@
 const wxCoord MARGIN = 5;
 
 // ----------------------------------------------------------------------------
-// various wxWindows macros
+// various wxWidgets macros
 // ----------------------------------------------------------------------------
 
 IMPLEMENT_DYNAMIC_CLASS(wxListbook, wxControl)
@@ -57,7 +57,6 @@ const int wxID_LISTBOOKLISTVIEW = wxNewId();
 
 BEGIN_EVENT_TABLE(wxListbook, wxBookCtrl)
     EVT_SIZE(wxListbook::OnSize)
-
     EVT_LIST_ITEM_SELECTED(wxID_LISTBOOKLISTVIEW, wxListbook::OnListSelected)
 END_EVENT_TABLE()
 
@@ -118,13 +117,23 @@ wxListbook::Create(wxWindow *parent,
     m_line = new wxStaticLine
                  (
                     this,
-                    -1,
+                    wxID_ANY,
                     wxDefaultPosition,
                     wxDefaultSize,
                     IsVertical() ? wxLI_HORIZONTAL : wxLI_VERTICAL
                  );
 #endif // wxUSE_LINE_IN_LISTBOOK
 
+#ifdef __WXMSW__
+    // On XP with themes enabled the GetViewRect used in GetListSize to
+    // determine the space needed for the list view will incorrectly return
+    // (0,0,0,0) the first time.  So send a pending event so OnSize wiull be
+    // called again after the window is ready to go.  Technically we don't
+    // need to do this on non-XP windows, but if things are already sized
+    // correctly then nothing changes and so there is no harm.
+    wxSizeEvent evt;
+    GetEventHandler()->AddPendingEvent(evt);
+#endif
     return true;
 }
 
@@ -348,10 +357,12 @@ int wxListbook::SetSelection(size_t n)
 
     if ( (int)n != m_selection )
     {
-        m_selection = n;
+        m_list->Select(n);
+        m_list->Focus(n);
 
-        m_list->Select(m_selection);
-        m_list->Focus(m_selection);
+        // change m_selection only now, otherwise OnListSelected() would ignore
+        // the selection change event
+        m_selection = n;
     }
 
     return selOld;