Fix focus behaviour of the spin control under MSW

Override MSWGetFocusHwnd for wxSpinCtrl to focus the right subwindow.
So the correct window will be used in wxWindowMSW::SetFocusFromKbd and
the spin controls content will be selected on TAB key.
This commit is contained in:
Ilya Sinitsyn
2019-11-01 00:27:43 +07:00
parent 1b6dc0a2fb
commit bfde3d3e08
2 changed files with 9 additions and 6 deletions

View File

@@ -77,7 +77,6 @@ public:
virtual int GetValue() const wxOVERRIDE;
virtual void SetRange(int minVal, int maxVal) wxOVERRIDE;
virtual bool SetFont(const wxFont &font) wxOVERRIDE;
virtual void SetFocus() wxOVERRIDE;
virtual bool Enable(bool enable = true) wxOVERRIDE;
virtual bool Show(bool show = true) wxOVERRIDE;
@@ -115,6 +114,8 @@ public:
virtual void SetLayoutDirection(wxLayoutDirection dir) wxOVERRIDE;
virtual WXHWND MSWGetFocusHWND() const wxOVERRIDE;
protected:
virtual void DoGetPosition(int *x, int *y) const wxOVERRIDE;
virtual void DoMoveWindow(int x, int y, int width, int height) wxOVERRIDE;

View File

@@ -522,6 +522,13 @@ void wxSpinCtrl::SetLayoutDirection(wxLayoutDirection dir)
SetSize(-1, -1, -1, -1, wxSIZE_AUTO | wxSIZE_FORCE);
}
WXHWND wxSpinCtrl::MSWGetFocusHWND() const
{
// Return the buddy hwnd because it shuld be focused instead of the
// wxSpinCtrl itself.
return m_hwndBuddy;
}
// ----------------------------------------------------------------------------
// wxSpinButton methods
// ----------------------------------------------------------------------------
@@ -653,11 +660,6 @@ bool wxSpinCtrl::Enable(bool enable)
return true;
}
void wxSpinCtrl::SetFocus()
{
::SetFocus(GetBuddyHwnd());
}
#if wxUSE_TOOLTIPS
void wxSpinCtrl::DoSetToolTip(wxToolTip *tip)