Make wxMac single line text control ignore ENTER

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12850 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2001-12-03 23:25:28 +00:00
parent 14b3f932dd
commit ed8c278040
2 changed files with 2564 additions and 2542 deletions

View File

@@ -665,15 +665,18 @@ void wxTextCtrl::OnDropFiles(wxDropFilesEvent& event)
} }
} }
void wxTextCtrl::OnChar(wxKeyEvent& event) void wxTextCtrl::OnChar(wxKeyEvent& key_event)
{ {
switch ( event.KeyCode() ) bool eat_key = FALSE;
switch ( key_event.KeyCode() )
{ {
case WXK_RETURN: case WXK_RETURN:
if (m_windowStyle & wxPROCESS_ENTER) if (m_windowStyle & wxPROCESS_ENTER)
{ {
wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, m_windowId); wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, m_windowId);
event.SetEventObject( this ); event.SetEventObject( this );
event.SetString( GetValue() );
if ( GetEventHandler()->ProcessEvent(event) ) if ( GetEventHandler()->ProcessEvent(event) )
return; return;
} }
@@ -698,8 +701,12 @@ void wxTextCtrl::OnChar(wxKeyEvent& event)
return ; return ;
} }
} }
// this will make wxWindows eat the ENTER key so that
// we actually prevent line wrapping in a single line
// text control
eat_key = TRUE;
} }
//else: multiline controls need Enter for themselves
break; break;
@@ -710,32 +717,36 @@ void wxTextCtrl::OnChar(wxKeyEvent& event)
// do its default job. // do its default job.
{ {
wxNavigationKeyEvent eventNav; wxNavigationKeyEvent eventNav;
eventNav.SetDirection(!event.ShiftDown()); eventNav.SetDirection(!key_event.ShiftDown());
eventNav.SetWindowChange(event.ControlDown()); eventNav.SetWindowChange(key_event.ControlDown());
eventNav.SetEventObject(this); eventNav.SetEventObject(this);
if ( GetParent()->GetEventHandler()->ProcessEvent(eventNav) ) if ( GetParent()->GetEventHandler()->ProcessEvent(eventNav) )
return; return;
event.Skip() ;
key_event.Skip() ;
return; return;
} }
break; break;
} }
EventRecord *ev = wxTheApp->MacGetCurrentEvent(); EventRecord *ev = wxTheApp->MacGetCurrentEvent();
short keycode ; short keychar = short(ev->message & charCodeMask);
short keychar ; if (!eat_key)
keychar = short(ev->message & charCodeMask); {
keycode = short(ev->message & keyCodeMask) >> 8 ; short keycode = short(ev->message & keyCodeMask) >> 8 ;
::HandleControlKey( m_macControl , keycode , keychar , ev->modifiers ); ::HandleControlKey( m_macControl , keycode , keychar , ev->modifiers );
if ( keychar >= 0x20 || event.KeyCode() == WXK_RETURN || event.KeyCode() == WXK_DELETE || event.KeyCode() == WXK_BACK) }
if ( keychar >= 0x20 ||
key_event.KeyCode() == WXK_RETURN ||
key_event.KeyCode() == WXK_DELETE ||
key_event.KeyCode() == WXK_BACK)
{ {
wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, m_windowId); wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, m_windowId);
event.SetString( GetValue() ) ; event.SetString( GetValue() ) ;
event.SetEventObject( this ); event.SetEventObject( this );
GetEventHandler()->ProcessEvent(event); GetEventHandler()->ProcessEvent(event);
} }
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@@ -665,15 +665,18 @@ void wxTextCtrl::OnDropFiles(wxDropFilesEvent& event)
} }
} }
void wxTextCtrl::OnChar(wxKeyEvent& event) void wxTextCtrl::OnChar(wxKeyEvent& key_event)
{ {
switch ( event.KeyCode() ) bool eat_key = FALSE;
switch ( key_event.KeyCode() )
{ {
case WXK_RETURN: case WXK_RETURN:
if (m_windowStyle & wxPROCESS_ENTER) if (m_windowStyle & wxPROCESS_ENTER)
{ {
wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, m_windowId); wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, m_windowId);
event.SetEventObject( this ); event.SetEventObject( this );
event.SetString( GetValue() );
if ( GetEventHandler()->ProcessEvent(event) ) if ( GetEventHandler()->ProcessEvent(event) )
return; return;
} }
@@ -698,8 +701,12 @@ void wxTextCtrl::OnChar(wxKeyEvent& event)
return ; return ;
} }
} }
// this will make wxWindows eat the ENTER key so that
// we actually prevent line wrapping in a single line
// text control
eat_key = TRUE;
} }
//else: multiline controls need Enter for themselves
break; break;
@@ -710,32 +717,36 @@ void wxTextCtrl::OnChar(wxKeyEvent& event)
// do its default job. // do its default job.
{ {
wxNavigationKeyEvent eventNav; wxNavigationKeyEvent eventNav;
eventNav.SetDirection(!event.ShiftDown()); eventNav.SetDirection(!key_event.ShiftDown());
eventNav.SetWindowChange(event.ControlDown()); eventNav.SetWindowChange(key_event.ControlDown());
eventNav.SetEventObject(this); eventNav.SetEventObject(this);
if ( GetParent()->GetEventHandler()->ProcessEvent(eventNav) ) if ( GetParent()->GetEventHandler()->ProcessEvent(eventNav) )
return; return;
event.Skip() ;
key_event.Skip() ;
return; return;
} }
break; break;
} }
EventRecord *ev = wxTheApp->MacGetCurrentEvent(); EventRecord *ev = wxTheApp->MacGetCurrentEvent();
short keycode ; short keychar = short(ev->message & charCodeMask);
short keychar ; if (!eat_key)
keychar = short(ev->message & charCodeMask); {
keycode = short(ev->message & keyCodeMask) >> 8 ; short keycode = short(ev->message & keyCodeMask) >> 8 ;
::HandleControlKey( m_macControl , keycode , keychar , ev->modifiers ); ::HandleControlKey( m_macControl , keycode , keychar , ev->modifiers );
if ( keychar >= 0x20 || event.KeyCode() == WXK_RETURN || event.KeyCode() == WXK_DELETE || event.KeyCode() == WXK_BACK) }
if ( keychar >= 0x20 ||
key_event.KeyCode() == WXK_RETURN ||
key_event.KeyCode() == WXK_DELETE ||
key_event.KeyCode() == WXK_BACK)
{ {
wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, m_windowId); wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, m_windowId);
event.SetString( GetValue() ) ; event.SetString( GetValue() ) ;
event.SetEventObject( this ); event.SetEventObject( this );
GetEventHandler()->ProcessEvent(event); GetEventHandler()->ProcessEvent(event);
} }
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------