- case 0x01 :
- retval = WXK_HOME;
- break;
- case 0x03 :
- retval = WXK_RETURN;
- break;
- case 0x04 :
- retval = WXK_END;
- break;
- case 0x05 :
- retval = WXK_HELP;
- break;
- case 0x08 :
- retval = WXK_BACK;
- break;
- case 0x09 :
- retval = WXK_TAB;
- break;
- case 0x0b :
- retval = WXK_PAGEUP;
- break;
- case 0x0c :
- retval = WXK_PAGEDOWN;
- break;
- case 0x0d :
- retval = WXK_RETURN;
- break;
- case 0x10 :
- {
- switch( code )
- {
- case 0x7a :
- retval = WXK_F1 ;
- break;
- case 0x78 :
- retval = WXK_F2 ;
- break;
- case 0x63 :
- retval = WXK_F3 ;
- break;
- case 0x76 :
- retval = WXK_F4 ;
- break;
- case 0x60 :
- retval = WXK_F5 ;
- break;
- case 0x61 :
- retval = WXK_F6 ;
- break;
- case 0x62:
- retval = WXK_F7 ;
- break;
- case 0x64 :
- retval = WXK_F8 ;
- break;
- case 0x65 :
- retval = WXK_F9 ;
- break;
- case 0x6D :
- retval = WXK_F10 ;
- break;
- case 0x67 :
- retval = WXK_F11 ;
- break;
- case 0x6F :
- retval = WXK_F12 ;
- break;
- case 0x69 :
- retval = WXK_F13 ;
- break;
- case 0x6B :
- retval = WXK_F14 ;
- break;
- case 0x71 :
- retval = WXK_F15 ;
- break;
- }
- }
- break ;
- case 0x1b :
- retval = WXK_ESCAPE ;
- break ;
- case 0x1c :
- retval = WXK_LEFT ;
- break ;
- case 0x1d :
- retval = WXK_RIGHT ;
- break ;
- case 0x1e :
- retval = WXK_UP ;
- break ;
- case 0x1f :
- retval = WXK_DOWN ;
- break ;
- case 0x7F :
- retval = WXK_DELETE ;
- default:
- break ;
- } // end switch
-
- return retval;
-}
-
-void wxApp::MacHandleKeyDownEvent( EventRecord *ev )
-{
- wxToolTip::RemoveToolTips() ;
-
- UInt32 menuresult = UMAMenuEvent(ev) ;
- if ( HiWord( menuresult ) )
- {
- if ( !s_macIsInModalLoop )
- MacHandleMenuSelect( HiWord( menuresult ) , LoWord( menuresult ) ) ;
- }
- else
- {
- short keycode ;
- short keychar ;
- keychar = short(ev->message & charCodeMask);
- keycode = short(ev->message & keyCodeMask) >> 8 ;
-
- wxWindow* focus = wxWindow::FindFocus() ;
- if ( focus )
- {
- long keyval = wxMacTranslateKey(keychar, keycode) ;
-
- wxKeyEvent event(wxEVT_KEY_DOWN);
- event.m_shiftDown = ev->modifiers & shiftKey;
- event.m_controlDown = ev->modifiers & controlKey;
- event.m_altDown = ev->modifiers & optionKey;
- event.m_metaDown = ev->modifiers & cmdKey;
- event.m_keyCode = keyval;
- event.m_x = ev->where.h;
- event.m_y = ev->where.v;
- event.m_timeStamp = ev->when;
- event.SetEventObject(focus);
- bool handled = focus->GetEventHandler()->ProcessEvent( event ) ;
- if ( !handled )
- {
- #if wxUSE_ACCEL
- if (!handled)
- {
- wxWindow *ancestor = focus;
- /*
- while (ancestor)
- {
- int command = ancestor->GetAcceleratorTable()->GetCommand( event );
- if (command != -1)
- {
- wxCommandEvent command_event( wxEVT_COMMAND_MENU_SELECTED, command );
- handled = ancestor->GetEventHandler()->ProcessEvent( command_event );
- break;
- }
- if (ancestor->m_isFrame)
- break;
- ancestor = ancestor->GetParent();
- }
- */
- }
- #endif // wxUSE_ACCEL
- }
- if (!handled)
- {
- wxKeyEvent event(wxEVT_CHAR);
- event.m_shiftDown = ev->modifiers & shiftKey;
- event.m_controlDown = ev->modifiers & controlKey;
- event.m_altDown = ev->modifiers & optionKey;
- event.m_metaDown = ev->modifiers & cmdKey;
- event.m_keyCode = keyval;
- event.m_x = ev->where.h;
- event.m_y = ev->where.v;
- event.m_timeStamp = ev->when;
- event.SetEventObject(focus);
- handled = focus->GetEventHandler()->ProcessEvent( event ) ;
- }
- if ( !handled &&
- (keyval == WXK_TAB) &&
- (!focus->HasFlag(wxTE_PROCESS_TAB)) &&
- (focus->GetParent()) &&
- (focus->GetParent()->HasFlag( wxTAB_TRAVERSAL)) )
- {
- wxNavigationKeyEvent new_event;
- new_event.SetEventObject( focus );
- new_event.SetDirection( !event.ShiftDown() );
- /* CTRL-TAB changes the (parent) window, i.e. switch notebook page */
- new_event.SetWindowChange( event.ControlDown() );
- new_event.SetCurrentFocus( focus );
- handled = focus->GetEventHandler()->ProcessEvent( new_event );
- }
- /* generate wxID_CANCEL if command-. or <esc> has been pressed (typically in dialogs) */
- if ( (!handled) &&
- (keyval == '.' && event.ControlDown() ) )
- {
- wxCommandEvent new_event(wxEVT_COMMAND_BUTTON_CLICKED,wxID_CANCEL);
- new_event.SetEventObject( focus );
- handled = focus->GetEventHandler()->ProcessEvent( new_event );
- }
- }
- }
-}
-
-void wxApp::MacHandleKeyUpEvent( EventRecord *ev )
-{
- // nothing to do
-}
-
-void wxApp::MacHandleActivateEvent( EventRecord *ev )
-{
- WindowRef window = (WindowRef) ev->message ;
- if ( window )
- {
- bool activate = (ev->modifiers & activeFlag ) ;
- WindowClass wclass ;
- UMAGetWindowClass ( window , &wclass ) ;
- if ( wclass == kFloatingWindowClass )
- {
- // if it is a floater we activate/deactivate the front non-floating window instead
- window = UMAFrontNonFloatingWindow() ;
- }
- wxWindow* win = wxFindWinFromMacWindow( window ) ;
- if ( win )
- win->MacActivate( ev , activate ) ;
- }
-}
-
-void wxApp::MacHandleUpdateEvent( EventRecord *ev )
-{
- WindowRef window = (WindowRef) ev->message ;
- wxWindow * win = wxFindWinFromMacWindow( window ) ;
- if ( win )
- {
- win->MacUpdate( ev ) ;
- }
- else
- {
- // since there is no way of telling this foreign window to update itself
- // we have to invalidate the update region otherwise we keep getting the same
- // event over and over again
- BeginUpdate( window ) ;
- EndUpdate( window ) ;
- }
-}
-
-void wxApp::MacHandleDiskEvent( EventRecord *ev )
-{
- if ( HiWord( ev->message ) != noErr )
+ case 0x01 :
+ retval = WXK_HOME;
+ break;
+ case 0x03 :
+ retval = WXK_RETURN;
+ break;
+ case 0x04 :
+ retval = WXK_END;
+ break;
+ case 0x05 :
+ retval = WXK_HELP;
+ break;
+ case 0x08 :
+ retval = WXK_BACK;
+ break;
+ case 0x09 :
+ retval = WXK_TAB;
+ break;
+ case 0x0b :
+ retval = WXK_PAGEUP;
+ break;
+ case 0x0c :
+ retval = WXK_PAGEDOWN;
+ break;
+ case 0x0d :
+ retval = WXK_RETURN;
+ break;
+ case 0x10 :
+ {
+ switch( code )
+ {
+ case 0x7a :
+ retval = WXK_F1 ;
+ break;
+ case 0x78 :
+ retval = WXK_F2 ;
+ break;
+ case 0x63 :
+ retval = WXK_F3 ;
+ break;
+ case 0x76 :
+ retval = WXK_F4 ;
+ break;
+ case 0x60 :
+ retval = WXK_F5 ;
+ break;
+ case 0x61 :
+ retval = WXK_F6 ;
+ break;
+ case 0x62:
+ retval = WXK_F7 ;
+ break;
+ case 0x64 :
+ retval = WXK_F8 ;
+ break;
+ case 0x65 :
+ retval = WXK_F9 ;
+ break;
+ case 0x6D :
+ retval = WXK_F10 ;
+ break;
+ case 0x67 :
+ retval = WXK_F11 ;
+ break;
+ case 0x6F :
+ retval = WXK_F12 ;
+ break;
+ case 0x69 :
+ retval = WXK_F13 ;
+ break;
+ case 0x6B :
+ retval = WXK_F14 ;
+ break;
+ case 0x71 :
+ retval = WXK_F15 ;
+ break;
+ }
+ }
+ break ;
+ case 0x1b :
+ retval = WXK_ESCAPE ;
+ break ;
+ case 0x1c :
+ retval = WXK_LEFT ;
+ break ;
+ case 0x1d :
+ retval = WXK_RIGHT ;
+ break ;
+ case 0x1e :
+ retval = WXK_UP ;
+ break ;
+ case 0x1f :
+ retval = WXK_DOWN ;
+ break ;
+ case 0x7F :
+ retval = WXK_DELETE ;
+ default:
+ break ;
+ } // end switch
+
+ return retval;
+}
+
+void wxApp::MacHandleKeyDownEvent( WXEVENTREF evr )
+{
+ EventRecord* ev = (EventRecord*) evr ;
+ wxToolTip::RemoveToolTips() ;
+
+ UInt32 menuresult = UMAMenuEvent(ev) ;
+ if ( HiWord( menuresult ) )
+ {
+ if ( !s_macIsInModalLoop )
+ MacHandleMenuSelect( HiWord( menuresult ) , LoWord( menuresult ) ) ;
+ }
+ else
+ {
+ short keycode ;
+ 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 )
+ {
+
+ wxKeyEvent event(wxEVT_KEY_DOWN);
+ event.m_shiftDown = ev->modifiers & shiftKey;
+ event.m_controlDown = ev->modifiers & controlKey;
+ event.m_altDown = ev->modifiers & optionKey;
+ event.m_metaDown = ev->modifiers & cmdKey;
+ event.m_keyCode = keyval;
+ event.m_x = ev->where.h;
+ event.m_y = ev->where.v;
+ event.m_timeStamp = ev->when;
+ event.SetEventObject(focus);
+ handled = focus->GetEventHandler()->ProcessEvent( event ) ;
+ if ( !handled )
+ {
+ #if wxUSE_ACCEL
+ if (!handled)
+ {
+ wxWindow *ancestor = focus;
+ /*
+ while (ancestor)
+ {
+ int command = ancestor->GetAcceleratorTable()->GetCommand( event );
+ if (command != -1)
+ {
+ wxCommandEvent command_event( wxEVT_COMMAND_MENU_SELECTED, command );
+ handled = ancestor->GetEventHandler()->ProcessEvent( command_event );
+ break;
+ }
+ if (ancestor->m_isFrame)
+ break;
+ ancestor = ancestor->GetParent();
+ }
+ */
+ }
+ #endif // wxUSE_ACCEL
+ }
+ if (!handled)
+ {
+ wxKeyEvent event(wxEVT_CHAR);
+ event.m_shiftDown = ev->modifiers & shiftKey;
+ event.m_controlDown = ev->modifiers & controlKey;
+ event.m_altDown = ev->modifiers & optionKey;
+ event.m_metaDown = ev->modifiers & cmdKey;
+ event.m_keyCode = keyval;
+ event.m_x = ev->where.h;
+ event.m_y = ev->where.v;
+ event.m_timeStamp = ev->when;
+ event.SetEventObject(focus);
+ handled = focus->GetEventHandler()->ProcessEvent( event ) ;
+ }
+ if ( !handled &&
+ (keyval == WXK_TAB) &&
+ (!focus->HasFlag(wxTE_PROCESS_TAB)) &&
+ (focus->GetParent()) &&
+ (focus->GetParent()->HasFlag( wxTAB_TRAVERSAL)) )
+ {
+ wxNavigationKeyEvent new_event;
+ new_event.SetEventObject( focus );
+ new_event.SetDirection( !event.ShiftDown() );
+ /* CTRL-TAB changes the (parent) window, i.e. switch notebook page */
+ new_event.SetWindowChange( event.ControlDown() );
+ 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 <esc> has been pressed (typically in dialogs) */
+ 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 );
+ }
+ }
+ }
+ }
+}
+
+void wxApp::MacHandleKeyUpEvent( WXEVENTREF evr )
+{
+ EventRecord* ev = (EventRecord*) evr ;
+ wxToolTip::RemoveToolTips() ;
+
+ UInt32 menuresult = UMAMenuEvent(ev) ;
+ if ( HiWord( menuresult ) )
+ {
+ }
+ else
+ {
+ short keycode ;
+ short keychar ;
+ keychar = short(ev->message & charCodeMask);
+ keycode = short(ev->message & keyCodeMask) >> 8 ;
+
+ wxWindow* focus = wxWindow::FindFocus() ;
+ if ( focus )
+ {
+ long keyval = wxMacTranslateKey(keychar, keycode) ;
+
+ wxKeyEvent event(wxEVT_KEY_UP);
+ event.m_shiftDown = ev->modifiers & shiftKey;
+ event.m_controlDown = ev->modifiers & controlKey;
+ event.m_altDown = ev->modifiers & optionKey;
+ event.m_metaDown = ev->modifiers & cmdKey;
+ event.m_keyCode = keyval;
+ event.m_x = ev->where.h;
+ event.m_y = ev->where.v;
+ event.m_timeStamp = ev->when;
+ event.SetEventObject(focus);
+ bool handled = focus->GetEventHandler()->ProcessEvent( event ) ;
+ }
+ }
+}
+
+void wxApp::MacHandleActivateEvent( WXEVENTREF evr )
+{
+ EventRecord* ev = (EventRecord*) evr ;
+ WindowRef window = (WindowRef) ev->message ;
+ if ( window )
+ {
+ bool activate = (ev->modifiers & activeFlag ) ;
+ WindowClass wclass ;
+ ::GetWindowClass ( window , &wclass ) ;
+ if ( wclass == kFloatingWindowClass )
+ {
+ // if it is a floater we activate/deactivate the front non-floating window instead
+ window = ::FrontNonFloatingWindow() ;
+ }
+ wxTopLevelWindowMac* win = wxFindWinFromMacWindow( window ) ;
+ if ( win )
+ win->MacActivate( ev , activate ) ;
+ }
+}
+
+void wxApp::MacHandleUpdateEvent( WXEVENTREF evr )
+{
+ EventRecord* ev = (EventRecord*) evr ;
+ WindowRef window = (WindowRef) ev->message ;
+ wxTopLevelWindowMac * win = wxFindWinFromMacWindow( window ) ;
+ if ( win )
+ {
+ if ( !wxPendingDelete.Member(win) )
+ win->MacUpdate( ev->when ) ;
+ }
+ else
+ {
+ // since there is no way of telling this foreign window to update itself
+ // we have to invalidate the update region otherwise we keep getting the same
+ // event over and over again
+ BeginUpdate( window ) ;
+ EndUpdate( window ) ;
+ }
+}
+
+void wxApp::MacHandleDiskEvent( WXEVENTREF evr )
+{
+ EventRecord* ev = (EventRecord*) evr ;
+ if ( HiWord( ev->message ) != noErr )