#define TEXTCTRLXADJUST                 0 // position adjustment for wxTextCtrl, with zero indent
 #define TEXTCTRLYADJUST                 0
 #define TEXTXADJUST                     0 // how much is read-only text's x adjusted
-#define DEFAULT_DROPBUTTON_WIDTH        19
+#define DEFAULT_DROPBUTTON_WIDTH        22
 
 #else
 
     border = wxBORDER_NONE;
 
     Customize( wxCC_BUTTON_OUTSIDE_BORDER |
-               wxCC_NO_TEXT_AUTO_SELECT );
+               wxCC_NO_TEXT_AUTO_SELECT |
+               wxCC_BUTTON_STAYS_DOWN );
 
 #endif
 
         dc.DrawRectangle(rect2);
     }
 
+#ifndef __WXMAC__  // see note in OnThemeChange
     wxColour winCol = GetBackgroundColour();
+#else
+    wxColour winCol = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW);
+#endif
     dc.SetBrush(winCol);
     dc.SetPen(winCol);
 
 
     // clear main background
     dc.DrawRectangle(rect);
-
+    
     if ( !m_btn )
+    {
         // Standard button rendering
-        DrawButton(dc,rectb,true);
+        DrawButton(dc,rectb);
+    }
 
     // paint required portion on the control
     if ( (!m_text || m_widthCustomPaint) )
             tc->RemoveEventHandler(m_textEvtHandler);
             delete m_textEvtHandler;
 
+#if wxUSE_VALIDATORS
             wxValidator* pValidator = tc->GetValidator();
             if ( pValidator )
             {
                 delete pValidator;
             }
             else
+#endif
             {
                 CreateTextCtrl( tcCreateStyle, wxDefaultValidator );
             }