- 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:
Stefan Csomor
2013-12-21 14:59:50 +00:00
parent b69da09293
commit b0a5f5ac18
3 changed files with 32 additions and 27 deletions

View File

@@ -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() ;

View File

@@ -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)

View File

@@ -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;
}