+wxSize wxListBox::DoGetBestSize() const
+{
+ int lbWidth = 100; // some defaults
+ int lbHeight = 110;
+ int wLine;
+
+ // Find the widest line
+ for(int i = 0; i < GetCount(); i++) {
+ wxString str(GetString(i));
+ GetTextExtent(str, &wLine, NULL);
+ lbWidth = wxMax(lbWidth, wLine);
+ }
+
+ // Add room for the scrollbar
+ lbWidth += wxSystemSettings::GetMetric(wxSYS_VSCROLL_X);
+
+ // And just a bit more
+ int cx, cy;
+ GetTextExtent("X", &cx, &cy);
+ lbWidth += 3 * cx;
+
+ // don't make the listbox too tall (limit height to around 10 items) but don't
+ // make it too small neither
+ lbHeight = (cy+4) * wxMin(wxMax(GetCount(), 3), 10);
+
+ return wxSize(lbWidth, lbHeight);
+}
+
+void wxListBox::FixUpMouseEvent(GtkWidget *widget, wxCoord& x, wxCoord& y)
+{
+ // the mouse event coords are relative to the listbox items, we need to
+ // translate them to the normal client coords
+ x += widget->allocation.x;
+ y += widget->allocation.y;
+}
+
+#endif // wxUSE_LISTBOX
+