From 715824d58d26ed7df8d55e60ae29b3d2f7966d4e Mon Sep 17 00:00:00 2001 From: Stefan Csomor Date: Sat, 26 Sep 2009 16:39:33 +0000 Subject: [PATCH] reducing key event handling complexity git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62149 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/osx/cocoa/listbox.mm | 13 ------------- src/osx/cocoa/textctrl.mm | 7 ++++++- src/osx/cocoa/window.mm | 9 ++++++--- 3 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/osx/cocoa/listbox.mm b/src/osx/cocoa/listbox.mm index 2ba3fde0e2..0e04dfb22c 100644 --- a/src/osx/cocoa/listbox.mm +++ b/src/osx/cocoa/listbox.mm @@ -150,7 +150,6 @@ public : virtual void UpdateLineToEnd( unsigned int n); virtual void controlDoubleAction(WXWidget slf, void* _cmd, void *sender); - virtual bool DoHandleKeyEvent(NSEvent *event); protected : wxNSTableView* m_tableView ; @@ -512,18 +511,6 @@ void wxListWidgetCocoaImpl::controlDoubleAction(WXWidget WXUNUSED(slf),void* WXU list->HandleLineEvent( sel, true ); } -bool wxListWidgetCocoaImpl::DoHandleKeyEvent(NSEvent *event) -{ - wxKeyEvent wxevent(wxEVT_KEY_DOWN); - SetupKeyEvent( wxevent, event ); - wxevent.SetEventObject(GetWXPeer()); - bool result = GetWXPeer()->OSXHandleKeyEvent(wxevent); - - // no interpretKeyEvents here, but rerouting to native keyhandling - - return result; -} - // accessing content diff --git a/src/osx/cocoa/textctrl.mm b/src/osx/cocoa/textctrl.mm index 14bfab4447..13b2d97897 100644 --- a/src/osx/cocoa/textctrl.mm +++ b/src/osx/cocoa/textctrl.mm @@ -416,8 +416,10 @@ void wxNSTextViewControl::WriteText(const wxString& str) wxString st = str; wxMacConvertNewlines10To13( &st ); wxMacEditHelper helper(m_textView); - + NSEvent* formerEvent = m_lastKeyDownEvent; + m_lastKeyDownEvent = nil; [m_textView insertText:wxCFStringRef( st , m_wxPeer->GetFont().GetEncoding() ).AsNSString()]; + m_lastKeyDownEvent = formerEvent; } void wxNSTextViewControl::SetFont( const wxFont & font , const wxColour& foreground , long windowStyle, bool ignoreBlack ) @@ -538,6 +540,8 @@ void wxNSTextFieldControl::SetSelection( long from , long to ) void wxNSTextFieldControl::WriteText(const wxString& str) { + NSEvent* formerEvent = m_lastKeyDownEvent; + m_lastKeyDownEvent = nil; NSText* editor = [m_textField currentEditor]; if ( editor ) { @@ -554,6 +558,7 @@ void wxNSTextFieldControl::WriteText(const wxString& str) SetStringValue( val ) ; SetSelection( start + str.length() , start + str.length() ) ; } + m_lastKeyDownEvent = formerEvent; } void wxNSTextFieldControl::controlAction(WXWidget WXUNUSED(slf), diff --git a/src/osx/cocoa/window.mm b/src/osx/cocoa/window.mm index 064d7ab234..3fa27c5d24 100644 --- a/src/osx/cocoa/window.mm +++ b/src/osx/cocoa/window.mm @@ -881,11 +881,14 @@ void wxWidgetCocoaImpl::mouseEvent(WX_NSEvent event, WXWidget slf, void *_cmd) void wxWidgetCocoaImpl::keyEvent(WX_NSEvent event, WXWidget slf, void *_cmd) { + if ( [event type] == NSKeyDown ) + m_lastKeyDownEvent = event; if ( GetFocusedViewInWindow([slf window]) != slf || m_hasEditor || !DoHandleKeyEvent(event) ) { wxOSX_EventHandlerPtr superimpl = (wxOSX_EventHandlerPtr) [[slf superclass] instanceMethodForSelector:(SEL)_cmd]; superimpl(slf, (SEL)_cmd, event); } + m_lastKeyDownEvent = NULL; } void wxWidgetCocoaImpl::insertText(NSString* text, WXWidget slf, void *_cmd) @@ -895,7 +898,6 @@ void wxWidgetCocoaImpl::insertText(NSString* text, WXWidget slf, void *_cmd) wxOSX_TextEventHandlerPtr superimpl = (wxOSX_TextEventHandlerPtr) [[slf superclass] instanceMethodForSelector:(SEL)_cmd]; superimpl(slf, (SEL)_cmd, text); } - m_lastKeyDownEvent = NULL; } @@ -1578,9 +1580,9 @@ bool wxWidgetCocoaImpl::DoHandleKeyEvent(NSEvent *event) // this will fire higher level events, like insertText, to help // us handle EVT_CHAR, etc. - if ( !m_hasEditor && [event type] == NSKeyDown) + + if ( m_wxPeer->MacIsUserPane() && [event type] == NSKeyDown) { - m_lastKeyDownEvent = event; if ( !result ) { if ( [m_osxView isKindOfClass:[NSScrollView class] ] ) @@ -1590,6 +1592,7 @@ bool wxWidgetCocoaImpl::DoHandleKeyEvent(NSEvent *event) result = true; } } + return result; } -- 2.45.2