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:
@@ -972,6 +972,9 @@ wxApp::wxApp()
|
|||||||
{
|
{
|
||||||
m_printMode = wxPRINT_WINDOWS;
|
m_printMode = wxPRINT_WINDOWS;
|
||||||
m_auto3D = TRUE;
|
m_auto3D = TRUE;
|
||||||
|
|
||||||
|
m_macCurrentEvent = NULL ;
|
||||||
|
m_macCurrentEventHandlerCallRef = NULL ;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxApp::Initialized()
|
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 ( 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
|
// has not been handled -> perform default
|
||||||
wxControl* control = wxDynamicCast( focus , wxControl ) ;
|
wxControl* control = wxDynamicCast( focus , wxControl ) ;
|
||||||
if ( control && control->GetMacControl() != NULL )
|
if ( control && control->GetMacControl() != NULL )
|
||||||
@@ -1702,6 +1707,7 @@ void wxApp::MacHandleKeyDownEvent( WXEVENTREF evr )
|
|||||||
keycode = short(ev->message & keyCodeMask) >> 8 ;
|
keycode = short(ev->message & keyCodeMask) >> 8 ;
|
||||||
::HandleControlKey( (ControlHandle) control->GetMacControl() , keycode , keychar , ev->modifiers ) ;
|
::HandleControlKey( (ControlHandle) control->GetMacControl() , keycode , keychar , ev->modifiers ) ;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -972,6 +972,9 @@ wxApp::wxApp()
|
|||||||
{
|
{
|
||||||
m_printMode = wxPRINT_WINDOWS;
|
m_printMode = wxPRINT_WINDOWS;
|
||||||
m_auto3D = TRUE;
|
m_auto3D = TRUE;
|
||||||
|
|
||||||
|
m_macCurrentEvent = NULL ;
|
||||||
|
m_macCurrentEventHandlerCallRef = NULL ;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxApp::Initialized()
|
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 ( 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
|
// has not been handled -> perform default
|
||||||
wxControl* control = wxDynamicCast( focus , wxControl ) ;
|
wxControl* control = wxDynamicCast( focus , wxControl ) ;
|
||||||
if ( control && control->GetMacControl() != NULL )
|
if ( control && control->GetMacControl() != NULL )
|
||||||
@@ -1702,6 +1707,7 @@ void wxApp::MacHandleKeyDownEvent( WXEVENTREF evr )
|
|||||||
keycode = short(ev->message & keyCodeMask) >> 8 ;
|
keycode = short(ev->message & keyCodeMask) >> 8 ;
|
||||||
::HandleControlKey( (ControlHandle) control->GetMacControl() , keycode , keychar , ev->modifiers ) ;
|
::HandleControlKey( (ControlHandle) control->GetMacControl() , keycode , keychar , ev->modifiers ) ;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -575,6 +575,13 @@ OSStatus mUPOpenControl(ControlHandle theControl, long wxStyle )
|
|||||||
kTXNSystemDefaultEncoding,
|
kTXNSystemDefaultEncoding,
|
||||||
&varsp->fTXNRec, &varsp->fTXNFrame, (TXNObjectRefcon) tpvars);
|
&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 ;
|
Str255 fontName ;
|
||||||
SInt16 fontSize ;
|
SInt16 fontSize ;
|
||||||
Style fontStyle ;
|
Style fontStyle ;
|
||||||
@@ -1591,8 +1598,25 @@ void wxTextCtrl::OnChar(wxKeyEvent& event)
|
|||||||
|
|
||||||
if (!eat_key)
|
if (!eat_key)
|
||||||
{
|
{
|
||||||
// default handling
|
// perform keystroke handling
|
||||||
event.Skip() ;
|
#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 ) ||
|
if ( ( key >= 0x20 && key < WXK_START ) ||
|
||||||
key == WXK_RETURN ||
|
key == WXK_RETURN ||
|
||||||
|
@@ -176,11 +176,15 @@ static pascal OSStatus KeyboardEventHandler( EventHandlerCallRef handler , Event
|
|||||||
{
|
{
|
||||||
case kEventRawKeyRepeat :
|
case kEventRawKeyRepeat :
|
||||||
case kEventRawKeyDown :
|
case kEventRawKeyDown :
|
||||||
|
WXEVENTREF formerEvent = wxTheApp->MacGetCurrentEvent() ;
|
||||||
|
WXEVENTHANDLERCALLREF formerHandler = wxTheApp->MacGetCurrentEventHandlerCallRef() ;
|
||||||
|
wxTheApp->MacSetCurrentEvent( event , handler ) ;
|
||||||
if ( (focus != NULL) && wxTheApp->MacSendKeyDownEvent(
|
if ( (focus != NULL) && wxTheApp->MacSendKeyDownEvent(
|
||||||
focus , message , modifiers , when , point.h , point.v ) )
|
focus , message , modifiers , when , point.h , point.v ) )
|
||||||
{
|
{
|
||||||
result = noErr ;
|
result = noErr ;
|
||||||
}
|
}
|
||||||
|
wxTheApp->MacSetCurrentEvent( formerEvent , formerHandler ) ;
|
||||||
break ;
|
break ;
|
||||||
case kEventRawKeyUp :
|
case kEventRawKeyUp :
|
||||||
if ( (focus != NULL) && wxTheApp->MacSendKeyUpEvent(
|
if ( (focus != NULL) && wxTheApp->MacSendKeyUpEvent(
|
||||||
|
@@ -575,6 +575,13 @@ OSStatus mUPOpenControl(ControlHandle theControl, long wxStyle )
|
|||||||
kTXNSystemDefaultEncoding,
|
kTXNSystemDefaultEncoding,
|
||||||
&varsp->fTXNRec, &varsp->fTXNFrame, (TXNObjectRefcon) tpvars);
|
&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 ;
|
Str255 fontName ;
|
||||||
SInt16 fontSize ;
|
SInt16 fontSize ;
|
||||||
Style fontStyle ;
|
Style fontStyle ;
|
||||||
@@ -1591,8 +1598,25 @@ void wxTextCtrl::OnChar(wxKeyEvent& event)
|
|||||||
|
|
||||||
if (!eat_key)
|
if (!eat_key)
|
||||||
{
|
{
|
||||||
// default handling
|
// perform keystroke handling
|
||||||
event.Skip() ;
|
#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 ) ||
|
if ( ( key >= 0x20 && key < WXK_START ) ||
|
||||||
key == WXK_RETURN ||
|
key == WXK_RETURN ||
|
||||||
|
@@ -176,11 +176,15 @@ static pascal OSStatus KeyboardEventHandler( EventHandlerCallRef handler , Event
|
|||||||
{
|
{
|
||||||
case kEventRawKeyRepeat :
|
case kEventRawKeyRepeat :
|
||||||
case kEventRawKeyDown :
|
case kEventRawKeyDown :
|
||||||
|
WXEVENTREF formerEvent = wxTheApp->MacGetCurrentEvent() ;
|
||||||
|
WXEVENTHANDLERCALLREF formerHandler = wxTheApp->MacGetCurrentEventHandlerCallRef() ;
|
||||||
|
wxTheApp->MacSetCurrentEvent( event , handler ) ;
|
||||||
if ( (focus != NULL) && wxTheApp->MacSendKeyDownEvent(
|
if ( (focus != NULL) && wxTheApp->MacSendKeyDownEvent(
|
||||||
focus , message , modifiers , when , point.h , point.v ) )
|
focus , message , modifiers , when , point.h , point.v ) )
|
||||||
{
|
{
|
||||||
result = noErr ;
|
result = noErr ;
|
||||||
}
|
}
|
||||||
|
wxTheApp->MacSetCurrentEvent( formerEvent , formerHandler ) ;
|
||||||
break ;
|
break ;
|
||||||
case kEventRawKeyUp :
|
case kEventRawKeyUp :
|
||||||
if ( (focus != NULL) && wxTheApp->MacSendKeyUpEvent(
|
if ( (focus != NULL) && wxTheApp->MacSendKeyUpEvent(
|
||||||
|
Reference in New Issue
Block a user