textcontrol handling change for mac (execute event in mid stream)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@22977 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor
2003-08-17 19:41:16 +00:00
parent d2699196d3
commit 1ea39a0399
6 changed files with 72 additions and 4 deletions

View File

@@ -972,6 +972,9 @@ wxApp::wxApp()
{
m_printMode = wxPRINT_WINDOWS;
m_auto3D = TRUE;
m_macCurrentEvent = NULL ;
m_macCurrentEventHandlerCallRef = NULL ;
}
bool wxApp::Initialized()
@@ -1692,6 +1695,8 @@ void wxApp::MacHandleKeyDownEvent( WXEVENTREF evr )
if ( MacSendKeyDownEvent( focus , ev->message , ev->modifiers , ev->when , ev->where.h , ev->where.v ) == false )
{
#if 0
// we must handle control keys the other way round, otherwise text content is updated too late
// has not been handled -> perform default
wxControl* control = wxDynamicCast( focus , wxControl ) ;
if ( control && control->GetMacControl() != NULL )
@@ -1702,6 +1707,7 @@ void wxApp::MacHandleKeyDownEvent( WXEVENTREF evr )
keycode = short(ev->message & keyCodeMask) >> 8 ;
::HandleControlKey( (ControlHandle) control->GetMacControl() , keycode , keychar , ev->modifiers ) ;
}
#endif
}
}
}

View File

@@ -972,6 +972,9 @@ wxApp::wxApp()
{
m_printMode = wxPRINT_WINDOWS;
m_auto3D = TRUE;
m_macCurrentEvent = NULL ;
m_macCurrentEventHandlerCallRef = NULL ;
}
bool wxApp::Initialized()
@@ -1692,6 +1695,8 @@ void wxApp::MacHandleKeyDownEvent( WXEVENTREF evr )
if ( MacSendKeyDownEvent( focus , ev->message , ev->modifiers , ev->when , ev->where.h , ev->where.v ) == false )
{
#if 0
// we must handle control keys the other way round, otherwise text content is updated too late
// has not been handled -> perform default
wxControl* control = wxDynamicCast( focus , wxControl ) ;
if ( control && control->GetMacControl() != NULL )
@@ -1702,6 +1707,7 @@ void wxApp::MacHandleKeyDownEvent( WXEVENTREF evr )
keycode = short(ev->message & keyCodeMask) >> 8 ;
::HandleControlKey( (ControlHandle) control->GetMacControl() , keycode , keychar , ev->modifiers ) ;
}
#endif
}
}
}

View File

@@ -575,6 +575,13 @@ OSStatus mUPOpenControl(ControlHandle theControl, long wxStyle )
kTXNSystemDefaultEncoding,
&varsp->fTXNRec, &varsp->fTXNFrame, (TXNObjectRefcon) tpvars);
if ( (wxStyle & wxTE_MULTILINE) && (wxStyle & wxTE_DONTWRAP) )
{
TXNControlTag tag = kTXNWordWrapStateTag ;
TXNControlData dat ;
dat.uValue = kTXNNoAutoWrap ;
TXNSetTXNObjectControls( varsp->fTXNRec , false , 1 , &tag , &dat ) ;
}
Str255 fontName ;
SInt16 fontSize ;
Style fontStyle ;
@@ -1591,8 +1598,25 @@ void wxTextCtrl::OnChar(wxKeyEvent& event)
if (!eat_key)
{
// default handling
event.Skip() ;
// perform keystroke handling
#if TARGET_CARBON
if ( m_macUsesTXN && wxTheApp->MacGetCurrentEvent() != NULL && wxTheApp->MacGetCurrentEventHandlerCallRef() != NULL )
CallNextEventHandler((EventHandlerCallRef)wxTheApp->MacGetCurrentEventHandlerCallRef() , (EventRef) wxTheApp->MacGetCurrentEvent() ) ;
else
#endif
{
EventRecord rec ;
if ( wxMacConvertEventToRecord( (EventRef) wxTheApp->MacGetCurrentEvent() , &rec ) )
{
EventRecord *ev = &rec ;
short keycode ;
short keychar ;
keychar = short(ev->message & charCodeMask);
keycode = short(ev->message & keyCodeMask) >> 8 ;
::HandleControlKey( (ControlHandle) m_macControl , keycode , keychar , ev->modifiers ) ;
}
}
}
if ( ( key >= 0x20 && key < WXK_START ) ||
key == WXK_RETURN ||

View File

@@ -176,11 +176,15 @@ static pascal OSStatus KeyboardEventHandler( EventHandlerCallRef handler , Event
{
case kEventRawKeyRepeat :
case kEventRawKeyDown :
WXEVENTREF formerEvent = wxTheApp->MacGetCurrentEvent() ;
WXEVENTHANDLERCALLREF formerHandler = wxTheApp->MacGetCurrentEventHandlerCallRef() ;
wxTheApp->MacSetCurrentEvent( event , handler ) ;
if ( (focus != NULL) && wxTheApp->MacSendKeyDownEvent(
focus , message , modifiers , when , point.h , point.v ) )
{
result = noErr ;
}
wxTheApp->MacSetCurrentEvent( formerEvent , formerHandler ) ;
break ;
case kEventRawKeyUp :
if ( (focus != NULL) && wxTheApp->MacSendKeyUpEvent(

View File

@@ -575,6 +575,13 @@ OSStatus mUPOpenControl(ControlHandle theControl, long wxStyle )
kTXNSystemDefaultEncoding,
&varsp->fTXNRec, &varsp->fTXNFrame, (TXNObjectRefcon) tpvars);
if ( (wxStyle & wxTE_MULTILINE) && (wxStyle & wxTE_DONTWRAP) )
{
TXNControlTag tag = kTXNWordWrapStateTag ;
TXNControlData dat ;
dat.uValue = kTXNNoAutoWrap ;
TXNSetTXNObjectControls( varsp->fTXNRec , false , 1 , &tag , &dat ) ;
}
Str255 fontName ;
SInt16 fontSize ;
Style fontStyle ;
@@ -1591,8 +1598,25 @@ void wxTextCtrl::OnChar(wxKeyEvent& event)
if (!eat_key)
{
// default handling
event.Skip() ;
// perform keystroke handling
#if TARGET_CARBON
if ( m_macUsesTXN && wxTheApp->MacGetCurrentEvent() != NULL && wxTheApp->MacGetCurrentEventHandlerCallRef() != NULL )
CallNextEventHandler((EventHandlerCallRef)wxTheApp->MacGetCurrentEventHandlerCallRef() , (EventRef) wxTheApp->MacGetCurrentEvent() ) ;
else
#endif
{
EventRecord rec ;
if ( wxMacConvertEventToRecord( (EventRef) wxTheApp->MacGetCurrentEvent() , &rec ) )
{
EventRecord *ev = &rec ;
short keycode ;
short keychar ;
keychar = short(ev->message & charCodeMask);
keycode = short(ev->message & keyCodeMask) >> 8 ;
::HandleControlKey( (ControlHandle) m_macControl , keycode , keychar , ev->modifiers ) ;
}
}
}
if ( ( key >= 0x20 && key < WXK_START ) ||
key == WXK_RETURN ||

View File

@@ -176,11 +176,15 @@ static pascal OSStatus KeyboardEventHandler( EventHandlerCallRef handler , Event
{
case kEventRawKeyRepeat :
case kEventRawKeyDown :
WXEVENTREF formerEvent = wxTheApp->MacGetCurrentEvent() ;
WXEVENTHANDLERCALLREF formerHandler = wxTheApp->MacGetCurrentEventHandlerCallRef() ;
wxTheApp->MacSetCurrentEvent( event , handler ) ;
if ( (focus != NULL) && wxTheApp->MacSendKeyDownEvent(
focus , message , modifiers , when , point.h , point.v ) )
{
result = noErr ;
}
wxTheApp->MacSetCurrentEvent( formerEvent , formerHandler ) ;
break ;
case kEventRawKeyUp :
if ( (focus != NULL) && wxTheApp->MacSendKeyUpEvent(