Account for wxTE_PROCESS_TAB when doing tab navigation on wxOSX.

This commit is contained in:
Steve Browne
2017-06-05 01:14:43 -04:00
parent 8bca6deda3
commit f4b73fd99e
2 changed files with 32 additions and 8 deletions

View File

@@ -16,9 +16,27 @@
@class wxTextEntryFormatter; @class wxTextEntryFormatter;
class wxNSTextBase : public wxWidgetCocoaImpl, public wxTextWidgetImpl
{
public :
wxNSTextBase( wxTextCtrl *text, WXWidget w )
: wxWidgetCocoaImpl(text, w),
wxTextWidgetImpl(text)
{
}
wxNSTextBase( wxWindow *wxPeer, wxTextEntry *entry, WXWidget w )
: wxWidgetCocoaImpl(wxPeer, w),
wxTextWidgetImpl(entry)
{
}
virtual ~wxNSTextBase() { }
virtual bool ShouldHandleKeyNavigation(const wxKeyEvent &event) const wxOVERRIDE;
};
// implementation exposed, so that search control can pull it // implementation exposed, so that search control can pull it
class wxNSTextFieldControl : public wxWidgetCocoaImpl, public wxTextWidgetImpl class wxNSTextFieldControl : public wxNSTextBase
{ {
public : public :
// wxNSTextFieldControl must always be associated with a wxTextEntry. If // wxNSTextFieldControl must always be associated with a wxTextEntry. If
@@ -67,7 +85,7 @@ private:
wxTextEntryFormatter* GetFormatter(); wxTextEntryFormatter* GetFormatter();
}; };
class wxNSTextViewControl : public wxWidgetCocoaImpl, public wxTextWidgetImpl class wxNSTextViewControl : public wxNSTextBase
{ {
public: public:
wxNSTextViewControl( wxTextCtrl *wxPeer, WXWidget w, long style ); wxNSTextViewControl( wxTextCtrl *wxPeer, WXWidget w, long style );

View File

@@ -646,6 +646,15 @@ NSView* wxMacEditHelper::ms_viewCurrentlyEdited = nil;
} }
@end @end
bool wxNSTextBase::ShouldHandleKeyNavigation(const wxKeyEvent &event) const
{
// Text controls must be allowed to handle the key even if wxWANTS_CHARS is not set, provided wxTE_PROCESS_TAB
// is set. To make Shift+TAB work with text controls we must process it here regardless of wxTE_PROCESS_TAB.
// For Ctrl(+Shift)+TAB to work as navigation key consistently in all types of text fields we must process it here as well.
return (!m_wxPeer->HasFlag(wxTE_PROCESS_TAB) || event.HasAnyModifiers());
}
// wxNSTextViewControl // wxNSTextViewControl
// Official Apple docs suggest to use FLT_MAX when embedding an NSTextView // Official Apple docs suggest to use FLT_MAX when embedding an NSTextView
@@ -656,8 +665,7 @@ NSView* wxMacEditHelper::ms_viewCurrentlyEdited = nil;
#define MAX_WIDTH 1000000 #define MAX_WIDTH 1000000
wxNSTextViewControl::wxNSTextViewControl( wxTextCtrl *wxPeer, WXWidget w, long style ) wxNSTextViewControl::wxNSTextViewControl( wxTextCtrl *wxPeer, WXWidget w, long style )
: wxWidgetCocoaImpl(wxPeer, w), : wxNSTextBase(wxPeer, w)
wxTextWidgetImpl(wxPeer)
{ {
wxNSTextScrollView* sv = (wxNSTextScrollView*) w; wxNSTextScrollView* sv = (wxNSTextScrollView*) w;
m_scrollView = sv; m_scrollView = sv;
@@ -963,8 +971,7 @@ wxSize wxNSTextViewControl::GetBestSize() const
// wxNSTextFieldControl // wxNSTextFieldControl
wxNSTextFieldControl::wxNSTextFieldControl( wxTextCtrl *text, WXWidget w ) wxNSTextFieldControl::wxNSTextFieldControl( wxTextCtrl *text, WXWidget w )
: wxWidgetCocoaImpl(text, w), : wxNSTextBase(text, w)
wxTextWidgetImpl(text)
{ {
Init(w); Init(w);
} }
@@ -972,8 +979,7 @@ wxNSTextFieldControl::wxNSTextFieldControl( wxTextCtrl *text, WXWidget w )
wxNSTextFieldControl::wxNSTextFieldControl(wxWindow *wxPeer, wxNSTextFieldControl::wxNSTextFieldControl(wxWindow *wxPeer,
wxTextEntry *entry, wxTextEntry *entry,
WXWidget w) WXWidget w)
: wxWidgetCocoaImpl(wxPeer, w), : wxNSTextBase(wxPeer, entry, w)
wxTextWidgetImpl(entry)
{ {
Init(w); Init(w);
} }