diff --git a/src/gtk/menu.cpp b/src/gtk/menu.cpp index bc121ecf3c..d0f884e031 100644 --- a/src/gtk/menu.cpp +++ b/src/gtk/menu.cpp @@ -1059,10 +1059,28 @@ static wxString GetGtkHotKey( const wxMenuItem& item ) hotkey << wxT("Delete" ); break; case WXK_UP: - hotkey << wxT("Up" ); + if( flags ) + hotkey << wxT("Up" ); + else + wxFAIL_MSG( wxT("The Up key must have modifiers to be an accelerator key") ); break; case WXK_DOWN: - hotkey << wxT("Down" ); + if( flags ) + hotkey << wxT("Down" ); + else + wxFAIL_MSG( wxT("The Down key must have modifiers to be an accelerator key") ); + break; + case WXK_LEFT: + if( flags ) + hotkey << wxT("Left" ); + else + wxFAIL_MSG( wxT("The Left key must have modifiers to be an accelerator key") ); + break; + case WXK_RIGHT: + if( flags ) + hotkey << wxT("Right" ); + else + wxFAIL_MSG( wxT("The Right key must have modifiers to be an accelerator key") ); break; case WXK_PAGEUP: hotkey << wxT("Page_Up" ); @@ -1070,12 +1088,6 @@ static wxString GetGtkHotKey( const wxMenuItem& item ) case WXK_PAGEDOWN: hotkey << wxT("Page_Down" ); break; - case WXK_LEFT: - hotkey << wxT("Left" ); - break; - case WXK_RIGHT: - hotkey << wxT("Right" ); - break; case WXK_HOME: hotkey << wxT("Home" ); break; @@ -1121,9 +1133,6 @@ static wxString GetGtkHotKey( const wxMenuItem& item ) case WXK_HELP: hotkey << wxT("Help" ); break; - case WXK_NUMLOCK: - hotkey << wxT("Num_Lock" ); - break; case WXK_NUMPAD_INSERT: hotkey << wxT("KP_Insert" ); break; @@ -1133,9 +1142,6 @@ static wxString GetGtkHotKey( const wxMenuItem& item ) case WXK_NUMPAD_SPACE: hotkey << wxT("KP_Space" ); break; - case WXK_NUMPAD_TAB: - hotkey << wxT("KP_Tab" ); - break; case WXK_NUMPAD_ENTER: hotkey << wxT("KP_Enter" ); break; @@ -1146,17 +1152,29 @@ static wxString GetGtkHotKey( const wxMenuItem& item ) case WXK_NUMPAD_HOME: hotkey << wxT("KP_Home" ); break; - case WXK_NUMPAD_LEFT: - hotkey << wxT("KP_Left" ); - break; case WXK_NUMPAD_UP: - hotkey << wxT("KP_Up" ); - break; - case WXK_NUMPAD_RIGHT: - hotkey << wxT("KP_Right" ); + if( flags ) + hotkey << wxT("KP_Up" ); + else + wxFAIL_MSG( wxT("The KP_Up key must have modifiers to be an accelerator key") ); break; case WXK_NUMPAD_DOWN: - hotkey << wxT("KP_Down" ); + if( flags ) + hotkey << wxT("KP_Down" ); + else + wxFAIL_MSG( wxT("The KP_Down key must have modifiers to be an accelerator key") ); + break; + case WXK_NUMPAD_LEFT: + if( flags ) + hotkey << wxT("KP_Left" ); + else + wxFAIL_MSG( wxT("The KP_Left key must have modifiers to be an accelerator key") ); + break; + case WXK_NUMPAD_RIGHT: + if( flags ) + hotkey << wxT("KP_Right" ); + else + wxFAIL_MSG( wxT("The KP_Right key must have modifiers to be an accelerator key") ); break; case WXK_NUMPAD_PAGEUP: hotkey << wxT("KP_Page_Up" ); @@ -1197,12 +1215,6 @@ static wxString GetGtkHotKey( const wxMenuItem& item ) case WXK_NUMPAD9: hotkey += wxString::Format(wxT("KP_%d"), code - WXK_NUMPAD0); break; - case WXK_WINDOWS_LEFT: - hotkey << wxT("Super_L" ); - break; - case WXK_WINDOWS_RIGHT: - hotkey << wxT("Super_R" ); - break; case WXK_WINDOWS_MENU: hotkey << wxT("Menu" ); break; @@ -1210,13 +1222,19 @@ static wxString GetGtkHotKey( const wxMenuItem& item ) /* The following keycodes have been shown not to work as accelerator keys on GTK (see https://trac.wxwidgets.org/ticket/10049) + and are not valid + (see gtkaccelgroup.c inside gtk_accelerator_valid()) */ case WXK_COMMAND: // Same as WXK_CONTROL - case WXK_SCROLL: // Scroll lock - case WXK_CAPITAL: // Caps lock - case WXK_TAB: case WXK_SHIFT: case WXK_ALT: + case WXK_SCROLL: // Scroll lock + case WXK_CAPITAL: // Caps lock + case WXK_NUMLOCK: + case WXK_NUMPAD_TAB: + case WXK_TAB: + case WXK_WINDOWS_LEFT: + case WXK_WINDOWS_RIGHT: /* The following keycodes do not map clearly into a GTK keycode, diff --git a/tests/menu/menu.cpp b/tests/menu/menu.cpp index 04140a9452..2ce211e525 100644 --- a/tests/menu/menu.cpp +++ b/tests/menu/menu.cpp @@ -693,12 +693,12 @@ namespace { WXK_EXECUTE, "WXK_EXECUTE", false }, { WXK_SNAPSHOT, "WXK_SNAPSHOT", true }, { WXK_HELP, "WXK_HELP", false }, - { WXK_NUMLOCK, "WXK_NUMLOCK", false }, + { WXK_NUMLOCK, "WXK_NUMLOCK", true }, { WXK_SCROLL, "WXK_SCROLL", true }, { WXK_NUMPAD_INSERT, "WXK_NUMPAD_INSERT", false }, { WXK_NUMPAD_DELETE, "WXK_NUMPAD_DELETE", false }, { WXK_NUMPAD_SPACE, "WXK_NUMPAD_SPACE", false }, - { WXK_NUMPAD_TAB, "WXK_NUMPAD_TAB", false }, + { WXK_NUMPAD_TAB, "WXK_NUMPAD_TAB", true }, { WXK_NUMPAD_ENTER, "WXK_NUMPAD_ENTER", false }, { WXK_NUMPAD_F1, "WXK_NUMPAD_F1", false }, { WXK_NUMPAD_F2, "WXK_NUMPAD_F2", false }, @@ -730,8 +730,8 @@ namespace { WXK_NUMPAD7, "WXK_NUMPAD7", false }, { WXK_NUMPAD8, "WXK_NUMPAD8", false }, { WXK_NUMPAD9, "WXK_NUMPAD9", false }, - { WXK_WINDOWS_LEFT, "WXK_WINDOWS_LEFT", false }, - { WXK_WINDOWS_RIGHT, "WXK_WINDOWS_RIGHT", false }, + { WXK_WINDOWS_LEFT, "WXK_WINDOWS_LEFT", true }, + { WXK_WINDOWS_RIGHT, "WXK_WINDOWS_RIGHT", true }, { WXK_WINDOWS_MENU, "WXK_WINDOWS_MENU", false }, { WXK_COMMAND, "WXK_COMMAND", true } }; @@ -767,7 +767,7 @@ TEST_CASE( "wxMenuItemAccelEntry", "[menu][accelentry]" ) continue; INFO( wxString::Format( "Keycode: %s", key.name ) ); - wxAcceleratorEntry accelEntry( wxACCEL_NORMAL, key.keycode, wxID_ANY, item ); + wxAcceleratorEntry accelEntry( wxACCEL_CTRL, key.keycode, wxID_ANY, item ); item->SetAccel( &accelEntry ); wxString labelText = item->GetItemLabel();