// headers
 // ----------------------------------------------------------------------------
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
     #pragma implementation "univcombobox.h"
 #endif
 
     }
 
 protected:
-    void OnButton(wxCommandEvent& event) { m_combo->ShowPopup(); }
+    void OnButton(wxCommandEvent& WXUNUSED(event)) { m_combo->ShowPopup(); }
 
     virtual wxSize DoGetBestClientSize() const
     {
     virtual bool SetSelection(const wxString& value);
     virtual wxControl *GetControl() { return this; }
     virtual void OnShow();
+    virtual wxCoord GetBestWidth() const;
 
 protected:
     // we shouldn't return height too big from here
 // ----------------------------------------------------------------------------
 
 void wxComboControl::DoSetSize(int x, int y,
-                               int width, int height,
+                               int width, int WXUNUSED(height),
                                int sizeFlags)
 {
     // combo height is always fixed
 {
     wxSize sizeBtn = m_btn->GetBestSize(),
            sizeText = m_text->GetBestSize();
+    wxCoord widthPopup = 0;
 
-    return wxSize(sizeText.x + g_comboMargin + sizeBtn.x, wxMax(sizeBtn.y, sizeText.y));
+    if (m_popup)
+    {
+        widthPopup = m_popup->GetBestWidth();
+    }
+
+    return wxSize(wxMax(sizeText.x + g_comboMargin + sizeBtn.x, widthPopup), 
+                  wxMax(sizeBtn.y, sizeText.y));
 }
 
 void wxComboControl::DoMoveWindow(int x, int y, int width, int height)
     }
 }
 
+wxCoord wxComboListBox::GetBestWidth() const
+{
+    wxSize size = wxListBox::GetBestSize();
+    return size.x;
+}
+
 wxSize wxComboListBox::DoGetBestClientSize() const
 {
     // don't return size too big or we risk to not fit on the screen
     return GetLBox()->Append(item);
 }
 
+int wxComboBox::DoInsert(const wxString& item, int pos)
+{
+    wxCHECK_MSG(!(GetWindowStyle() & wxCB_SORT), -1, wxT("can't insert into sorted list"));
+    wxCHECK_MSG((pos>=0) && (pos<=GetCount()), -1, wxT("invalid index"));
+
+    if (pos == GetCount())
+        return DoAppend(item);
+
+    GetLBox()->Insert(item, pos);
+    return pos;
+}
+
 void wxComboBox::DoSetItemClientData(int n, void* clientData)
 {
     GetLBox()->SetClientData(n, clientData);