From: Stefan Csomor Date: Tue, 4 Dec 2001 16:22:36 +0000 (+0000) Subject: added default return and escape/command-period handling for dialogs X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/e562df9b4b6905377adcdf8658cba3c722e50aac added default return and escape/command-period handling for dialogs git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12863 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/mac/app.cpp b/src/mac/app.cpp index b27475c3f1..89b58a9c3e 100644 --- a/src/mac/app.cpp +++ b/src/mac/app.cpp @@ -1406,11 +1406,11 @@ void wxApp::MacHandleKeyDownEvent( EventRecord *ev ) short keychar ; keychar = short(ev->message & charCodeMask); keycode = short(ev->message & keyCodeMask) >> 8 ; - + long keyval = wxMacTranslateKey(keychar, keycode) ; + bool handled = false ; wxWindow* focus = wxWindow::FindFocus() ; if ( focus ) { - long keyval = wxMacTranslateKey(keychar, keycode) ; wxKeyEvent event(wxEVT_KEY_DOWN); event.m_shiftDown = ev->modifiers & shiftKey; @@ -1422,7 +1422,7 @@ void wxApp::MacHandleKeyDownEvent( EventRecord *ev ) event.m_y = ev->where.v; event.m_timeStamp = ev->when; event.SetEventObject(focus); - bool handled = focus->GetEventHandler()->ProcessEvent( event ) ; + handled = focus->GetEventHandler()->ProcessEvent( event ) ; if ( !handled ) { #if wxUSE_ACCEL @@ -1475,14 +1475,34 @@ void wxApp::MacHandleKeyDownEvent( EventRecord *ev ) new_event.SetCurrentFocus( focus ); handled = focus->GetEventHandler()->ProcessEvent( new_event ); } + } + if ( !handled ) + { + // if window is not having a focus still testing for default enter or cancel + // TODO add the UMA version for ActiveNonFloatingWindow + focus = wxFindWinFromMacWindow( FrontWindow() ) ; + if ( focus ) + { + if ( keyval == WXK_RETURN ) + { + wxButton *def = wxDynamicCast(focus->GetDefaultItem(), + wxButton); + if ( def && def->IsEnabled() ) + { + wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() ); + event.SetEventObject(def); + def->Command(event); + return ; + } + } /* generate wxID_CANCEL if command-. or has been pressed (typically in dialogs) */ - if ( (!handled) && - (keyval == '.' && event.ControlDown() ) ) + else if (keyval == WXK_ESCAPE || (keyval == '.' && ev->modifiers & cmdKey ) ) { - wxCommandEvent new_event(wxEVT_COMMAND_BUTTON_CLICKED,wxID_CANCEL); - new_event.SetEventObject( focus ); - handled = focus->GetEventHandler()->ProcessEvent( new_event ); + wxCommandEvent new_event(wxEVT_COMMAND_BUTTON_CLICKED,wxID_CANCEL); + new_event.SetEventObject( focus ); + handled = focus->GetEventHandler()->ProcessEvent( new_event ); } + } } } } diff --git a/src/mac/carbon/app.cpp b/src/mac/carbon/app.cpp index b27475c3f1..89b58a9c3e 100644 --- a/src/mac/carbon/app.cpp +++ b/src/mac/carbon/app.cpp @@ -1406,11 +1406,11 @@ void wxApp::MacHandleKeyDownEvent( EventRecord *ev ) short keychar ; keychar = short(ev->message & charCodeMask); keycode = short(ev->message & keyCodeMask) >> 8 ; - + long keyval = wxMacTranslateKey(keychar, keycode) ; + bool handled = false ; wxWindow* focus = wxWindow::FindFocus() ; if ( focus ) { - long keyval = wxMacTranslateKey(keychar, keycode) ; wxKeyEvent event(wxEVT_KEY_DOWN); event.m_shiftDown = ev->modifiers & shiftKey; @@ -1422,7 +1422,7 @@ void wxApp::MacHandleKeyDownEvent( EventRecord *ev ) event.m_y = ev->where.v; event.m_timeStamp = ev->when; event.SetEventObject(focus); - bool handled = focus->GetEventHandler()->ProcessEvent( event ) ; + handled = focus->GetEventHandler()->ProcessEvent( event ) ; if ( !handled ) { #if wxUSE_ACCEL @@ -1475,14 +1475,34 @@ void wxApp::MacHandleKeyDownEvent( EventRecord *ev ) new_event.SetCurrentFocus( focus ); handled = focus->GetEventHandler()->ProcessEvent( new_event ); } + } + if ( !handled ) + { + // if window is not having a focus still testing for default enter or cancel + // TODO add the UMA version for ActiveNonFloatingWindow + focus = wxFindWinFromMacWindow( FrontWindow() ) ; + if ( focus ) + { + if ( keyval == WXK_RETURN ) + { + wxButton *def = wxDynamicCast(focus->GetDefaultItem(), + wxButton); + if ( def && def->IsEnabled() ) + { + wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() ); + event.SetEventObject(def); + def->Command(event); + return ; + } + } /* generate wxID_CANCEL if command-. or has been pressed (typically in dialogs) */ - if ( (!handled) && - (keyval == '.' && event.ControlDown() ) ) + else if (keyval == WXK_ESCAPE || (keyval == '.' && ev->modifiers & cmdKey ) ) { - wxCommandEvent new_event(wxEVT_COMMAND_BUTTON_CLICKED,wxID_CANCEL); - new_event.SetEventObject( focus ); - handled = focus->GetEventHandler()->ProcessEvent( new_event ); + wxCommandEvent new_event(wxEVT_COMMAND_BUTTON_CLICKED,wxID_CANCEL); + new_event.SetEventObject( focus ); + handled = focus->GetEventHandler()->ProcessEvent( new_event ); } + } } } }