Make wxComboCtrl a wxCompositeWindow

wxComboCtrl consists of several controls (text entry, button, popup) and therefore should be implemented as a wxCompositeWindow to prevent problems with generating spurious events when e.g. focus is transferred between the sub-controls.

Closes #18394.
This commit is contained in:
Artur Wieczorek
2019-08-23 20:58:33 +02:00
parent a47d16dc9f
commit 70e9dbd756
2 changed files with 15 additions and 38 deletions

View File

@@ -46,6 +46,7 @@
#include "wx/bitmap.h" // wxBitmap used by-value
#include "wx/textentry.h"
#include "wx/time.h" // needed for wxMilliClock_t
#include "wx/compositewin.h" // wxComboCtrlBase declaration
class WXDLLIMPEXP_FWD_CORE wxTextCtrl;
class WXDLLIMPEXP_FWD_CORE wxComboPopup;
@@ -140,14 +141,14 @@ struct wxComboCtrlFeatures
};
class WXDLLIMPEXP_CORE wxComboCtrlBase : public wxControl,
class WXDLLIMPEXP_CORE wxComboCtrlBase : public wxCompositeWindow<wxControl>,
public wxTextEntry
{
friend class wxComboPopup;
friend class wxComboPopupEvtHandler;
public:
// ctors and such
wxComboCtrlBase() : wxControl(), wxTextEntry() { Init(); }
wxComboCtrlBase() : wxCompositeWindow<wxControl>(), wxTextEntry() { Init(); }
bool Create(wxWindow *parent,
wxWindowID id,
@@ -472,7 +473,6 @@ public:
{ return m_mainCtrlWnd; }
// also set the embedded wxTextCtrl colours
virtual bool SetForegroundColour(const wxColour& colour) wxOVERRIDE;
virtual bool SetBackgroundColour(const wxColour& colour) wxOVERRIDE;
protected:
@@ -598,10 +598,6 @@ protected:
// Flags are same as for DoShowPopup.
virtual bool AnimateShow( const wxRect& rect, int flags );
#if wxUSE_TOOLTIPS
virtual void DoSetToolTip( wxToolTip *tip ) wxOVERRIDE;
#endif
// protected wxTextEntry methods
virtual void DoSetValue(const wxString& value, int flags) wxOVERRIDE;
virtual wxString DoGetValue() const wxOVERRIDE;
@@ -611,6 +607,8 @@ protected:
virtual bool DoSetMargins(const wxPoint& pt) wxOVERRIDE;
virtual wxPoint DoGetMargins() const wxOVERRIDE;
virtual wxWindowList GetCompositeWindowParts() const wxOVERRIDE;
// This is used when m_text is hidden (readonly).
wxString m_valueString;