const wxCoord MARGIN = 5;
// ----------------------------------------------------------------------------
-// various wxWindows macros
+// various wxWidgets macros
// ----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxListbook, wxControl)
BEGIN_EVENT_TABLE(wxListbook, wxBookCtrl)
EVT_SIZE(wxListbook::OnSize)
-
EVT_LIST_ITEM_SELECTED(wxID_LISTBOOKLISTVIEW, wxListbook::OnListSelected)
END_EVENT_TABLE()
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;
}
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;