- one single method for sending char events from a NSString
- adding insertText override for multiline fields as char events went missing after r74945 git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@75405 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -65,6 +65,8 @@ public:
|
||||
wxNSTextViewControl( wxTextCtrl *wxPeer, WXWidget w );
|
||||
virtual ~wxNSTextViewControl();
|
||||
|
||||
virtual void insertText(NSString* text, WXWidget slf, void *_cmd);
|
||||
|
||||
virtual wxString GetStringValue() const ;
|
||||
virtual void SetStringValue( const wxString &str) ;
|
||||
virtual void Copy() ;
|
||||
|
@@ -586,6 +586,15 @@ bool wxNSTextViewControl::CanFocus() const
|
||||
return true;
|
||||
}
|
||||
|
||||
void wxNSTextViewControl::insertText(NSString* text, WXWidget slf, void *_cmd)
|
||||
{
|
||||
if ( m_lastKeyDownEvent ==NULL || !DoHandleCharEvent(m_lastKeyDownEvent, text) )
|
||||
{
|
||||
wxOSX_TextEventHandlerPtr superimpl = (wxOSX_TextEventHandlerPtr) [[slf superclass] instanceMethodForSelector:(SEL)_cmd];
|
||||
superimpl(slf, (SEL)_cmd, text);
|
||||
}
|
||||
}
|
||||
|
||||
wxString wxNSTextViewControl::GetStringValue() const
|
||||
{
|
||||
if (m_textView)
|
||||
|
@@ -1388,26 +1388,7 @@ void wxWidgetCocoaImpl::insertText(NSString* text, WXWidget slf, void *_cmd)
|
||||
{
|
||||
// If we don't have a corresponding key event (e.g. IME-composed
|
||||
// characters), send wxEVT_CHAR without sending wxEVT_KEY_DOWN.
|
||||
for (NSUInteger i = 0; i < [text length]; ++i)
|
||||
{
|
||||
wxKeyEvent wxevent(wxEVT_CHAR);
|
||||
wxevent.m_shiftDown = wxevent.m_controlDown = wxevent.m_altDown = wxevent.m_metaDown = false;
|
||||
wxevent.m_rawCode = 0;
|
||||
wxevent.m_rawFlags = 0;
|
||||
wxevent.SetTimestamp();
|
||||
unichar aunichar = [text characterAtIndex:i];
|
||||
#if wxUSE_UNICODE
|
||||
wxevent.m_uniChar = aunichar;
|
||||
#endif
|
||||
wxevent.m_keyCode = aunichar < 0x80 ? aunichar : WXK_NONE;
|
||||
wxWindowMac* peer = GetWXPeer();
|
||||
if ( peer )
|
||||
{
|
||||
wxevent.SetEventObject(peer);
|
||||
wxevent.SetId(peer->GetId());
|
||||
}
|
||||
result = GetWXPeer()->OSXHandleKeyEvent(wxevent) || result;
|
||||
}
|
||||
result = DoHandleCharEvent(NULL,text);
|
||||
}
|
||||
}
|
||||
if ( !result )
|
||||
@@ -2707,16 +2688,29 @@ void wxWidgetCocoaImpl::InstallEventHandler( WXWidget control )
|
||||
bool wxWidgetCocoaImpl::DoHandleCharEvent(NSEvent *event, NSString *text)
|
||||
{
|
||||
bool result = false;
|
||||
|
||||
wxWindowMac* peer = GetWXPeer();
|
||||
if ( peer )
|
||||
{
|
||||
for (NSUInteger i = 0; i < [text length]; ++i)
|
||||
{
|
||||
wxKeyEvent wxevent(wxEVT_CHAR);
|
||||
unichar c = [text characterAtIndex:i];
|
||||
SetupKeyEvent( wxevent, event, [NSString stringWithCharacters:&c length:1]);
|
||||
wxevent.m_shiftDown = wxevent.m_controlDown = wxevent.m_altDown = wxevent.m_metaDown = false;
|
||||
wxevent.m_rawCode = 0;
|
||||
wxevent.m_rawFlags = 0;
|
||||
if ( event )
|
||||
wxevent.SetTimestamp( (int)([event timestamp] * 1000) ) ;
|
||||
unichar aunichar = [text characterAtIndex:i];
|
||||
#if wxUSE_UNICODE
|
||||
wxevent.m_uniChar = aunichar;
|
||||
#endif
|
||||
wxevent.m_keyCode = aunichar < 0x80 ? aunichar : WXK_NONE;
|
||||
|
||||
result = GetWXPeer()->OSXHandleKeyEvent(wxevent) || result;
|
||||
wxevent.SetEventObject(peer);
|
||||
wxevent.SetId(peer->GetId());
|
||||
|
||||
result = peer->OSXHandleKeyEvent(wxevent) || result;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user