X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ef0120c1bbb3e9f8031e6aecebb497c58f2be432..bc6e28d55ac11ae700a304dd2ce3f4e20923ca88:/src/generic/listbkg.cpp diff --git a/src/generic/listbkg.cpp b/src/generic/listbkg.cpp index 676b202c93..f0d5305697 100644 --- a/src/generic/listbkg.cpp +++ b/src/generic/listbkg.cpp @@ -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;