From daae25753e00a3e270928b83bd5adc2618ef6f46 Mon Sep 17 00:00:00 2001 From: Ian McInerney Date: Sat, 3 Aug 2019 19:45:16 +0200 Subject: [PATCH 01/14] Allow the use of the display name when creating accelerator keys --- src/common/accelcmn.cpp | 76 ++++++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 39 deletions(-) diff --git a/src/common/accelcmn.cpp b/src/common/accelcmn.cpp index f391501751..98c979669a 100644 --- a/src/common/accelcmn.cpp +++ b/src/common/accelcmn.cpp @@ -38,8 +38,6 @@ wxAcceleratorTable wxNullAcceleratorTable; // wxAcceleratorEntry implementation // ============================================================================ -wxGCC_WARNING_SUPPRESS(missing-field-initializers) - static const struct wxKeyName { wxKeyCode code; @@ -47,42 +45,42 @@ static const struct wxKeyName const char *display_name; } wxKeyNames[] = { - { WXK_DELETE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Delete") }, - { WXK_DELETE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Del") }, + { WXK_DELETE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Delete"), /*Display is the same as key name*/ 0 }, + { WXK_DELETE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Del"), /*Display is the same as key name*/ 0 }, { WXK_BACK, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Back"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Backspace") }, - { WXK_INSERT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Insert") }, - { WXK_INSERT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Ins") }, - { WXK_RETURN, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Enter") }, - { WXK_RETURN, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Return") }, + { WXK_INSERT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Insert"), /*Display is the same as key name*/ 0 }, + { WXK_INSERT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Ins"), /*Display is the same as key name*/ 0 }, + { WXK_RETURN, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Enter"), /*Display is the same as key name*/ 0 }, + { WXK_RETURN, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Return"), /*Display is the same as key name*/ 0 }, { WXK_PAGEUP, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("PageUp"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Page Up") }, { WXK_PAGEDOWN, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("PageDown"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Page Down") }, - { WXK_PAGEUP, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("PgUp") }, - { WXK_PAGEDOWN, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("PgDn") }, + { WXK_PAGEUP, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("PgUp"), /*Display is the same as key name*/ 0 }, + { WXK_PAGEDOWN, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("PgDn"), /*Display is the same as key name*/ 0 }, { WXK_LEFT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Left"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Left") }, { WXK_RIGHT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Right"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Right") }, { WXK_UP, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Up"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Up") }, { WXK_DOWN, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Down"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Down") }, - { WXK_HOME, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Home") }, - { WXK_END, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("End") }, - { WXK_SPACE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Space") }, - { WXK_TAB, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Tab") }, - { WXK_ESCAPE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Esc") }, - { WXK_ESCAPE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Escape") }, - { WXK_CANCEL, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Cancel") }, - { WXK_CLEAR, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Clear") }, - { WXK_MENU, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Menu") }, - { WXK_PAUSE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Pause") }, - { WXK_CAPITAL, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Capital") }, - { WXK_SELECT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Select") }, - { WXK_PRINT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Print") }, - { WXK_EXECUTE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Execute") }, - { WXK_SNAPSHOT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Snapshot") }, - { WXK_HELP, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Help") }, - { WXK_ADD, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Add") }, - { WXK_SEPARATOR, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Separator") }, - { WXK_SUBTRACT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Subtract") }, - { WXK_DECIMAL, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Decimal") }, - { WXK_DIVIDE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Divide") }, + { WXK_HOME, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Home"), /*Display is the same as key name*/ 0 }, + { WXK_END, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("End"), /*Display is the same as key name*/ 0 }, + { WXK_SPACE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Space"), /*Display is the same as key name*/ 0 }, + { WXK_TAB, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Tab"), /*Display is the same as key name*/ 0 }, + { WXK_ESCAPE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Esc"), /*Display is the same as key name*/ 0 }, + { WXK_ESCAPE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Escape"), /*Display is the same as key name*/ 0 }, + { WXK_CANCEL, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Cancel"), /*Display is the same as key name*/ 0 }, + { WXK_CLEAR, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Clear"), /*Display is the same as key name*/ 0 }, + { WXK_MENU, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Menu"), /*Display is the same as key name*/ 0 }, + { WXK_PAUSE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Pause"), /*Display is the same as key name*/ 0 }, + { WXK_CAPITAL, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Capital"), /*Display is the same as key name*/ 0 }, + { WXK_SELECT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Select"), /*Display is the same as key name*/ 0 }, + { WXK_PRINT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Print"), /*Display is the same as key name*/ 0 }, + { WXK_EXECUTE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Execute"), /*Display is the same as key name*/ 0 }, + { WXK_SNAPSHOT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Snapshot"), /*Display is the same as key name*/ 0 }, + { WXK_HELP, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Help"), /*Display is the same as key name*/ 0 }, + { WXK_ADD, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Add"), /*Display is the same as key name*/ 0 }, + { WXK_SEPARATOR, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Separator"), /*Display is the same as key name*/ 0 }, + { WXK_SUBTRACT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Subtract"), /*Display is the same as key name*/ 0 }, + { WXK_DECIMAL, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Decimal"), /*Display is the same as key name*/ 0 }, + { WXK_DIVIDE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Divide"), /*Display is the same as key name*/ 0 }, { WXK_NUMLOCK, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num_lock"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num Lock") }, { WXK_SCROLL, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Scroll_lock"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Scroll Lock") }, { WXK_NUMPAD_SPACE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("KP_Space"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num Space") }, @@ -95,8 +93,8 @@ static const struct wxKeyName { WXK_NUMPAD_DOWN, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("KP_Down"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num Down") }, { WXK_NUMPAD_PAGEUP, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("KP_PageUp"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num Page Up") }, { WXK_NUMPAD_PAGEDOWN, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("KP_PageDown"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num Page Down") }, - { WXK_NUMPAD_PAGEUP, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("KP_Prior") }, - { WXK_NUMPAD_PAGEDOWN, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("KP_Next") }, + { WXK_NUMPAD_PAGEUP, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("KP_Prior"), /*Display is the same as key name*/ 0 }, + { WXK_NUMPAD_PAGEDOWN, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("KP_Next"), /*Display is the same as key name*/ 0 }, { WXK_NUMPAD_END, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("KP_End"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num End") }, { WXK_NUMPAD_BEGIN, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("KP_Begin"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num Begin") }, { WXK_NUMPAD_INSERT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("KP_Insert"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num Insert") }, @@ -108,13 +106,12 @@ static const struct wxKeyName { WXK_NUMPAD_SUBTRACT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("KP_Subtract"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num -") }, { WXK_NUMPAD_DECIMAL, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("KP_Decimal"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num .") }, { WXK_NUMPAD_DIVIDE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("KP_Divide"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num /") }, - { WXK_WINDOWS_LEFT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Windows_Left") }, - { WXK_WINDOWS_RIGHT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Windows_Right") }, - { WXK_WINDOWS_MENU, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Windows_Menu") }, - { WXK_COMMAND, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Command") }, + { WXK_WINDOWS_LEFT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Windows_Left"), /*Display is the same as key name*/ 0 }, + { WXK_WINDOWS_RIGHT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Windows_Right"), /*Display is the same as key name*/ 0 }, + { WXK_WINDOWS_MENU, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Windows_Menu"), /*Display is the same as key name*/ 0 }, + { WXK_COMMAND, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Command"), /*Display is the same as key name*/ 0 }, }; -wxGCC_WARNING_RESTORE(missing-field-initializers) // return true if the 2 strings refer to the same accel // @@ -253,7 +250,8 @@ wxAcceleratorEntry::ParseAccel(const wxString& text, int *flagsOut, int *keyOut) for ( size_t n = 0; n < WXSIZEOF(wxKeyNames); n++ ) { const wxKeyName& kn = wxKeyNames[n]; - if ( CompareAccelString(current, kn.name) ) + if ( CompareAccelString(current, kn.name) + || ( kn.display_name && CompareAccelString(current, kn.display_name) ) ) { keyCode = kn.code; break; From bdc301946fedf746f45151ca70d1dae5398c7b3d Mon Sep 17 00:00:00 2001 From: Ian McInerney Date: Sun, 4 Aug 2019 12:54:13 +0200 Subject: [PATCH 02/14] Upgrade accelerator entry unit tests * Convert to the Catch framework * Add a test for proper display name parsing --- tests/menu/accelentry.cpp | 100 ++++++++++++++++++++------------------ 1 file changed, 54 insertions(+), 46 deletions(-) diff --git a/tests/menu/accelentry.cpp b/tests/menu/accelentry.cpp index 1ef27b7135..1b7b6837be 100644 --- a/tests/menu/accelentry.cpp +++ b/tests/menu/accelentry.cpp @@ -20,73 +20,81 @@ #endif // WX_PRECOMP #include "wx/accel.h" -#include "wx/scopedptr.h" - -class AccelEntryTestCase : public CppUnit::TestCase -{ -public: - AccelEntryTestCase() {} - -private: - CPPUNIT_TEST_SUITE( AccelEntryTestCase ); - CPPUNIT_TEST( Create ); - CPPUNIT_TEST( ToFromString ); - CPPUNIT_TEST_SUITE_END(); - - void Create(); - void ToFromString(); - - wxDECLARE_NO_COPY_CLASS(AccelEntryTestCase); -}; - -// register in the unnamed registry so that these tests are run by default -CPPUNIT_TEST_SUITE_REGISTRATION( AccelEntryTestCase ); - -// also include in its own registry so that these tests can be run alone -CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( AccelEntryTestCase, "AccelEntryTestCase" ); namespace { void CheckAccelEntry(const wxAcceleratorEntry& accel, int keycode, int flags) { - CPPUNIT_ASSERT_EQUAL( keycode, accel.GetKeyCode() ); - CPPUNIT_ASSERT_EQUAL( flags, accel.GetFlags() ); + REQUIRE( keycode == accel.GetKeyCode() ); + REQUIRE( flags == accel.GetFlags() ); } } // anonymous namespace -void AccelEntryTestCase::Create() + +/* + * Test the creation of accelerator keys using the Create function + */ +TEST_CASE( "wxAcceleratorEntry::Create", "[accelentry]" ) { - wxScopedPtr - pa(wxAcceleratorEntry::Create("Foo\tCtrl+Z")); - CPPUNIT_ASSERT( pa ); - CPPUNIT_ASSERT( pa->IsOk() ); + wxAcceleratorEntry* pa; - CheckAccelEntry(*pa, 'Z', wxACCEL_CTRL); + SECTION( "Correct behavior" ) + { + pa = wxAcceleratorEntry::Create("Foo\tCtrl+Z"); + REQUIRE( pa ); + REQUIRE( pa->IsOk() ); + CheckAccelEntry(*pa, 'Z', wxACCEL_CTRL); + } - // There must be a TAB in the string passed to Create() - pa.reset(wxAcceleratorEntry::Create("Shift-Q")); - CPPUNIT_ASSERT( !pa ); + SECTION( "Tab missing" ) + { + pa = wxAcceleratorEntry::Create("Shift-Q"); - pa.reset(wxAcceleratorEntry::Create("Bar\tShift-Q")); - CPPUNIT_ASSERT( pa ); - CPPUNIT_ASSERT( pa->IsOk() ); - CheckAccelEntry(*pa, 'Q', wxACCEL_SHIFT); + REQUIRE( !pa ); + } + SECTION( "No accelerator key specified" ) + { + pa = wxAcceleratorEntry::Create("bloordyblop"); - pa.reset(wxAcceleratorEntry::Create("bloordyblop")); - CPPUNIT_ASSERT( !pa ); + REQUIRE( !pa ); + } + + SECTION( "Display name parsing" ) + { + pa = wxAcceleratorEntry::Create("Test\tBackSpace"); + + REQUIRE( pa ); + REQUIRE( pa->IsOk() ); + CheckAccelEntry(*pa, WXK_BACK, wxACCEL_NORMAL); + } } -void AccelEntryTestCase::ToFromString() + +/* + * Test the creation of accelerator keys from strings and also the + * creation of strings from an accelerator key + */ +TEST_CASE( "wxAcceleratorEntry::StringTests", "[accelentry]" ) { wxAcceleratorEntry a(wxACCEL_ALT, 'X'); - CPPUNIT_ASSERT_EQUAL( "Alt+X", a.ToString() ); - CPPUNIT_ASSERT( a.FromString("Alt+Shift+F1") ); - CheckAccelEntry(a, WXK_F1, wxACCEL_ALT | wxACCEL_SHIFT); + SECTION( "Create string from key" ) + { + REQUIRE( "Alt+X" == a.ToString() ); + } - CPPUNIT_ASSERT( !a.FromString("bloordyblop") ); + SECTION( "Create from valid string" ) + { + REQUIRE( a.FromString("Alt+Shift+F1") ); + CheckAccelEntry(a, WXK_F1, wxACCEL_ALT | wxACCEL_SHIFT); + } + + SECTION( "Create from invalid string" ) + { + REQUIRE( !a.FromString("bloordyblop") ); + } } From 2cb96c16ff72a25ef3ee4d8be2d659488bbd3522 Mon Sep 17 00:00:00 2001 From: Ian McInerney Date: Sun, 4 Aug 2019 16:02:36 +0200 Subject: [PATCH 03/14] Add unit test for menu accelerator assignment --- tests/menu/menu.cpp | 165 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 165 insertions(+) diff --git a/tests/menu/menu.cpp b/tests/menu/menu.cpp index c31a338e93..b5177d07b4 100644 --- a/tests/menu/menu.cpp +++ b/tests/menu/menu.cpp @@ -608,3 +608,168 @@ void MenuTestCase::Events() src ); #endif // wxUSE_UIACTIONSIMULATOR } + +namespace +{ + void verifyAccelAssigned( wxString labelText, int keycode ) + { + wxAcceleratorEntry* entry = wxAcceleratorEntry::Create( labelText ); + + REQUIRE( entry ); + REQUIRE( entry->GetKeyCode() == keycode ); + } + + struct key + { + int keycode; + wxString name; + bool skip; + }; + std::vector modKeys = + { + { wxACCEL_NORMAL, "Normal", false }, + { wxACCEL_CTRL, "Ctrl", false }, + { wxACCEL_SHIFT, "Shift", false }, + { wxACCEL_ALT, "Alt", false } + }; + std::vector specialKeys = + { + { WXK_F1, "WXK_F1", false }, + { WXK_F2, "WXK_F2", false }, + { WXK_F3, "WXK_F3", false }, + { WXK_F4, "WXK_F4", false }, + { WXK_F5, "WXK_F5", false }, + { WXK_F6, "WXK_F6", false }, + { WXK_F7, "WXK_F7", false }, + { WXK_F8, "WXK_F8", false }, + { WXK_F9, "WXK_F9", false }, + { WXK_F10, "WXK_F10", false }, + { WXK_F11, "WXK_F11", false }, + { WXK_F12, "WXK_F12", false }, + { WXK_F13, "WXK_F13", false }, + { WXK_F14, "WXK_F14", false }, + { WXK_F15, "WXK_F15", false }, + { WXK_F16, "WXK_F16", false }, + { WXK_F17, "WXK_F17", false }, + { WXK_F18, "WXK_F18", false }, + { WXK_F19, "WXK_F19", false }, + { WXK_F20, "WXK_F20", false }, + { WXK_F21, "WXK_F21", false }, + { WXK_F22, "WXK_F22", false }, + { WXK_F23, "WXK_F23", false }, + { WXK_F24, "WXK_F24", false }, + { WXK_INSERT, "WXK_INSERT", false }, + { WXK_DELETE, "WXK_DELETE", false }, + { WXK_UP, "WXK_UP", false }, + { WXK_DOWN, "WXK_DOWN", false }, + { WXK_PAGEUP, "WXK_PAGEUP", false }, + { WXK_PAGEDOWN, "WXK_PAGEDOWN", false }, + { WXK_LEFT, "WXK_LEFT", false }, + { WXK_RIGHT, "WXK_RIGHT", false }, + { WXK_HOME, "WXK_HOME", false }, + { WXK_END, "WXK_END", false }, + { WXK_RETURN, "WXK_RETURN", false }, + { WXK_BACK, "WXK_BACK", false }, + { WXK_TAB, "WXK_TAB", false }, + { WXK_ESCAPE, "WXK_ESCAPE", false }, + { WXK_SPACE, "WXK_SPACE", false }, + { WXK_MULTIPLY, "WXK_MULTIPLY", false }, + { WXK_ADD, "WXK_ADD", true }, + { WXK_SEPARATOR, "WXK_SEPARATOR", true }, + { WXK_SUBTRACT, "WXK_SUBTRACT", true }, + { WXK_DECIMAL, "WXK_DECIMAL", true }, + { WXK_DIVIDE, "WXK_DIVIDE", true }, + { WXK_CANCEL, "WXK_CANCEL", false }, + { WXK_CLEAR, "WXK_CLEAR", false }, + { WXK_MENU, "WXK_MENU", false }, + { WXK_PAUSE, "WXK_PAUSE", false }, + { WXK_CAPITAL, "WXK_CAPITAL", true }, + { WXK_SELECT, "WXK_SELECT", false }, + { WXK_PRINT, "WXK_PRINT", false }, + { WXK_EXECUTE, "WXK_EXECUTE", false }, + { WXK_SNAPSHOT, "WXK_SNAPSHOT", true }, + { WXK_HELP, "WXK_HELP", false }, + { WXK_NUMLOCK, "WXK_NUMLOCK", false }, + { WXK_SCROLL, "WXK_SCROLL", false }, + { 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_ENTER, "WXK_NUMPAD_ENTER", false }, + { WXK_NUMPAD_F1, "WXK_NUMPAD_F1", false }, + { WXK_NUMPAD_F2, "WXK_NUMPAD_F2", false }, + { WXK_NUMPAD_F3, "WXK_NUMPAD_F3", false }, + { WXK_NUMPAD_F4, "WXK_NUMPAD_F4", false }, + { WXK_NUMPAD_HOME, "WXK_NUMPAD_HOME", false }, + { WXK_NUMPAD_LEFT, "WXK_NUMPAD_LEFT", false }, + { WXK_NUMPAD_UP, "WXK_NUMPAD_UP", false }, + { WXK_NUMPAD_RIGHT, "WXK_NUMPAD_RIGHT", false }, + { WXK_NUMPAD_DOWN, "WXK_NUMPAD_DOWN", false }, + { WXK_NUMPAD_PAGEUP, "WXK_NUMPAD_PAGEUP", false }, + { WXK_NUMPAD_PAGEDOWN, "WXK_NUMPAD_PAGEDOWN", false }, + { WXK_NUMPAD_END, "WXK_NUMPAD_END", false }, + { WXK_NUMPAD_BEGIN, "WXK_NUMPAD_BEGIN", false }, + { WXK_NUMPAD_EQUAL, "WXK_NUMPAD_EQUAL", false }, + { WXK_NUMPAD_MULTIPLY, "WXK_NUMPAD_MULTIPLY", false }, + { WXK_NUMPAD_ADD, "WXK_NUMPAD_ADD", false }, + { WXK_NUMPAD_SEPARATOR, "WXK_NUMPAD_SEPARATOR", false }, + { WXK_NUMPAD_SUBTRACT, "WXK_NUMPAD_SUBTRACT", false }, + { WXK_NUMPAD_DECIMAL, "WXK_NUMPAD_DECIMAL", false }, + { WXK_NUMPAD_DIVIDE, "WXK_NUMPAD_DIVIDE", false }, + { WXK_NUMPAD0, "WXK_NUMPAD0", false }, + { WXK_NUMPAD1, "WXK_NUMPAD1", false }, + { WXK_NUMPAD2, "WXK_NUMPAD2", false }, + { WXK_NUMPAD3, "WXK_NUMPAD3", false }, + { WXK_NUMPAD4, "WXK_NUMPAD4", false }, + { WXK_NUMPAD5, "WXK_NUMPAD5", false }, + { WXK_NUMPAD6, "WXK_NUMPAD6", false }, + { 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_MENU, "WXK_WINDOWS_MENU", false }, + { WXK_COMMAND, "WXK_COMMAND", true } + }; +} + +TEST_CASE( "wxMenuItemAccelEntry", "[menu][accelentry]" ) +{ + wxMenu* menu = new wxMenu; + + menu->Append( wxID_ANY, "Test" ); + wxMenuItem* item = menu->FindItemByPosition( 0 ); + + SECTION( "Modifier keys" ) + { + for( auto key : modKeys ) + { + INFO( wxString::Format( "Modifier: %s", key.name ) ); + wxAcceleratorEntry accelEntry( key.keycode, 'A' , wxID_ANY, item ); + item->SetAccel( &accelEntry ); + + wxString labelText = item->GetItemLabel(); + INFO( wxString::Format( "Label text: %s", labelText ) ); + + verifyAccelAssigned( labelText, 'A' ); + } + } + + SECTION( "Special keys" ) + { + for( auto key : specialKeys ) + { + if( key.skip ) + continue; + + INFO( wxString::Format( "Keycode: %s", key.name ) ); + wxAcceleratorEntry accelEntry( wxACCEL_NORMAL, key.keycode, wxID_ANY, item ); + item->SetAccel( &accelEntry ); + + wxString labelText = item->GetItemLabel(); + INFO( wxString::Format( "Label text: %s", labelText ) ); + + verifyAccelAssigned( labelText, key.keycode ); + } + } +} From 17e8e9c015b4ea4f0933c381d35498cdff46b61d Mon Sep 17 00:00:00 2001 From: Ian McInerney Date: Sun, 4 Aug 2019 18:48:50 +0200 Subject: [PATCH 04/14] Fix several accelerator key issues from unit tests * Bad parsing of "Num " keys * No parsing of NUMPAD_F keys * Missing multiply key * No case preservation on non-modifier accelerators * No parsing of F13-24 keys --- src/common/accelcmn.cpp | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/common/accelcmn.cpp b/src/common/accelcmn.cpp index 98c979669a..62a3d58c8a 100644 --- a/src/common/accelcmn.cpp +++ b/src/common/accelcmn.cpp @@ -80,6 +80,7 @@ static const struct wxKeyName { WXK_SEPARATOR, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Separator"), /*Display is the same as key name*/ 0 }, { WXK_SUBTRACT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Subtract"), /*Display is the same as key name*/ 0 }, { WXK_DECIMAL, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Decimal"), /*Display is the same as key name*/ 0 }, + { WXK_MULTIPLY, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Multiply"), /*Display is the same as key name*/ 0 }, { WXK_DIVIDE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Divide"), /*Display is the same as key name*/ 0 }, { WXK_NUMLOCK, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num_lock"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num Lock") }, { WXK_SCROLL, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Scroll_lock"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Scroll Lock") }, @@ -179,7 +180,8 @@ wxAcceleratorEntry::ParseAccel(const wxString& text, int *flagsOut, int *keyOut) wxString current; for ( size_t n = (size_t)posTab; n < label.length(); n++ ) { - if ( (label[n] == '+') || (label[n] == '-') ) + bool skip = false; + if ( !skip && ( (label[n] == '+') || (label[n] == '-') ) ) { if ( CompareAccelString(current, wxTRANSLATE("ctrl")) ) accelFlags |= wxACCEL_CTRL; @@ -189,6 +191,16 @@ wxAcceleratorEntry::ParseAccel(const wxString& text, int *flagsOut, int *keyOut) accelFlags |= wxACCEL_SHIFT; else if ( CompareAccelString(current, wxTRANSLATE("rawctrl")) ) accelFlags |= wxACCEL_RAW_CTRL; + else if ( CompareAccelString(current, wxTRANSLATE("num ")) ) + { + // This isn't really a modifier, but is part of the name of keys + // that have a =/- in them (e.g. num + and num -) + // So we want to skip the processing if we see it + skip = true; + current += label[n]; + + continue; + } else // not a recognized modifier name { // we may have "Ctrl-+", for example, but we still want to @@ -213,7 +225,8 @@ wxAcceleratorEntry::ParseAccel(const wxString& text, int *flagsOut, int *keyOut) } else // not special character { - current += (wxChar) wxTolower(label[n]); + // Preserve case of the key (see comment below) + current += label[n]; } } @@ -244,7 +257,7 @@ wxAcceleratorEntry::ParseAccel(const wxString& text, int *flagsOut, int *keyOut) default: keyCode = IsNumberedAccelKey(current, wxTRANSLATE("F"), - WXK_F1, 1, 12); + WXK_F1, 1, 24); if ( !keyCode ) { for ( size_t n = 0; n < WXSIZEOF(wxKeyNames); n++ ) @@ -259,6 +272,9 @@ wxAcceleratorEntry::ParseAccel(const wxString& text, int *flagsOut, int *keyOut) } } + if ( !keyCode ) + keyCode = IsNumberedAccelKey(current, wxTRANSLATE("KP_F"), + WXK_NUMPAD_F1, 1, 4); if ( !keyCode ) keyCode = IsNumberedAccelKey(current, wxTRANSLATE("KP_"), WXK_NUMPAD0, 0, 9); @@ -338,9 +354,12 @@ wxString wxAcceleratorEntry::AsPossiblyLocalizedString(bool localized) const const int code = GetKeyCode(); - if ( code >= WXK_F1 && code <= WXK_F12 ) + if ( code >= WXK_F1 && code <= WXK_F24 ) text << PossiblyLocalize(wxTRANSLATE("F"), localized) << code - WXK_F1 + 1; + else if ( code >= WXK_NUMPAD_F1 && code <= WXK_NUMPAD_F4 ) + text << PossiblyLocalize(wxTRANSLATE("KP_F"), localized) + << code - WXK_NUMPAD_F1 + 1; else if ( code >= WXK_NUMPAD0 && code <= WXK_NUMPAD9 ) text << PossiblyLocalize(wxTRANSLATE("KP_"), localized) << code - WXK_NUMPAD0; From 891053792fa9c1c69ec9bdda57d4f1577614994c Mon Sep 17 00:00:00 2001 From: Ian McInerney Date: Sun, 4 Aug 2019 18:53:01 +0200 Subject: [PATCH 05/14] Cleanup the GTK accelerator key creation * Remove the accelerator text if the key is not created * Fix naming of some GTK keycodes --- src/gtk/menu.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/gtk/menu.cpp b/src/gtk/menu.cpp index 6aac109556..5e8d521887 100644 --- a/src/gtk/menu.cpp +++ b/src/gtk/menu.cpp @@ -671,6 +671,11 @@ void wxMenuItem::SetGtkLabel() m_menuItem, "activate", GetRootParentMenu(m_parentMenu)->m_accel, accel_key, accel_mods, GTK_ACCEL_VISIBLE); } + else + { + // Remove the accelerator since it couldn't be made + m_text = m_text.BeforeFirst( wxT( '\t' ) ); + } #endif // wxUSE_ACCEL } @@ -1066,7 +1071,7 @@ static wxString GetGtkHotKey( const wxMenuItem& item ) // TODO: we should use gdk_keyval_name() (a.k.a. // XKeysymToString) here as well as hardcoding the keysym // names this might be not portable - case WXK_INSERT: + case WXK_INSERT: hotkey << wxT("Insert" ); break; case WXK_DELETE: @@ -1106,13 +1111,13 @@ static wxString GetGtkHotKey( const wxMenuItem& item ) hotkey << wxT("Tab" ); break; case WXK_ESCAPE: - hotkey << wxT("Esc" ); + hotkey << wxT("Escape" ); break; case WXK_SPACE: hotkey << wxT("space" ); break; case WXK_MULTIPLY: - hotkey << wxT("Multiply" ); + hotkey << wxT("multiply" ); break; case WXK_ADD: hotkey << wxT("Add" ); From f3edad276149fd4a6e45f0edc6f1be49dde9b8c4 Mon Sep 17 00:00:00 2001 From: Ian McInerney Date: Sun, 4 Aug 2019 21:17:10 +0200 Subject: [PATCH 06/14] Remove invalid GTK accelerator keys --- src/gtk/menu.cpp | 110 ++++++++++++++++++-------------------------- tests/menu/menu.cpp | 8 +++- 2 files changed, 51 insertions(+), 67 deletions(-) diff --git a/src/gtk/menu.cpp b/src/gtk/menu.cpp index 5e8d521887..3445ced6ca 100644 --- a/src/gtk/menu.cpp +++ b/src/gtk/menu.cpp @@ -1041,30 +1041,11 @@ static wxString GetGtkHotKey( const wxMenuItem& item ) int code = accel->GetKeyCode(); switch ( code ) { - case WXK_F1: - case WXK_F2: - case WXK_F3: - case WXK_F4: - case WXK_F5: - case WXK_F6: - case WXK_F7: - case WXK_F8: - case WXK_F9: - case WXK_F10: - case WXK_F11: - case WXK_F12: - case WXK_F13: - case WXK_F14: - case WXK_F15: - case WXK_F16: - case WXK_F17: - case WXK_F18: - case WXK_F19: - case WXK_F20: - case WXK_F21: - case WXK_F22: - case WXK_F23: - case WXK_F24: + case WXK_F1: case WXK_F2: case WXK_F3: case WXK_F4: case WXK_F5: + case WXK_F6: case WXK_F7: case WXK_F8: case WXK_F9: case WXK_F10: + case WXK_F11: case WXK_F12: case WXK_F13: case WXK_F14: case WXK_F15: + case WXK_F16: case WXK_F17: case WXK_F18: case WXK_F19: case WXK_F20: + case WXK_F21: case WXK_F22: case WXK_F23: case WXK_F24: hotkey += wxString::Format(wxT("F%d"), code - WXK_F1 + 1); break; @@ -1107,9 +1088,6 @@ static wxString GetGtkHotKey( const wxMenuItem& item ) case WXK_BACK: hotkey << wxT("BackSpace" ); break; - case WXK_TAB: - hotkey << wxT("Tab" ); - break; case WXK_ESCAPE: hotkey << wxT("Escape" ); break; @@ -1119,21 +1097,6 @@ static wxString GetGtkHotKey( const wxMenuItem& item ) case WXK_MULTIPLY: hotkey << wxT("multiply" ); break; - case WXK_ADD: - hotkey << wxT("Add" ); - break; - case WXK_SEPARATOR: - hotkey << wxT("Separator" ); - break; - case WXK_SUBTRACT: - hotkey << wxT("Subtract" ); - break; - case WXK_DECIMAL: - hotkey << wxT("Decimal" ); - break; - case WXK_DIVIDE: - hotkey << wxT("Divide" ); - break; case WXK_CANCEL: hotkey << wxT("Cancel" ); break; @@ -1146,9 +1109,6 @@ static wxString GetGtkHotKey( const wxMenuItem& item ) case WXK_PAUSE: hotkey << wxT("Pause" ); break; - case WXK_CAPITAL: - hotkey << wxT("Capital" ); - break; case WXK_SELECT: hotkey << wxT("Select" ); break; @@ -1158,18 +1118,12 @@ static wxString GetGtkHotKey( const wxMenuItem& item ) case WXK_EXECUTE: hotkey << wxT("Execute" ); break; - case WXK_SNAPSHOT: - hotkey << wxT("Snapshot" ); - break; case WXK_HELP: hotkey << wxT("Help" ); break; case WXK_NUMLOCK: hotkey << wxT("Num_Lock" ); break; - case WXK_SCROLL: - hotkey << wxT("Scroll_Lock" ); - break; case WXK_NUMPAD_INSERT: hotkey << wxT("KP_Insert" ); break; @@ -1239,7 +1193,8 @@ static wxString GetGtkHotKey( const wxMenuItem& item ) break; case WXK_NUMPAD0: case WXK_NUMPAD1: case WXK_NUMPAD2: case WXK_NUMPAD3: case WXK_NUMPAD4: case WXK_NUMPAD5: - case WXK_NUMPAD6: case WXK_NUMPAD7: case WXK_NUMPAD8: case WXK_NUMPAD9: + case WXK_NUMPAD6: case WXK_NUMPAD7: case WXK_NUMPAD8: + case WXK_NUMPAD9: hotkey += wxString::Format(wxT("KP_%d"), code - WXK_NUMPAD0); break; case WXK_WINDOWS_LEFT: @@ -1251,20 +1206,45 @@ static wxString GetGtkHotKey( const wxMenuItem& item ) case WXK_WINDOWS_MENU: hotkey << wxT("Menu" ); break; - case WXK_COMMAND: - hotkey << wxT("Command" ); + + /* + The following keycodes have been shown not to work as accelerator + keys on GTK (see https://trac.wxwidgets.org/ticket/10049) + */ + 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: + + /* + The following keycodes do not map clearly into a GTK keycode, + so they are not included in the accelerator mapping: + */ + case WXK_ADD: + case WXK_SEPARATOR: + case WXK_SUBTRACT: + case WXK_DECIMAL: + case WXK_DIVIDE: + case WXK_SNAPSHOT: + + /* + The following special codes do not map into GTK keycodes, + see gdk/keynames.txt + */ + case WXK_SPECIAL1: case WXK_SPECIAL2: case WXK_SPECIAL3: + case WXK_SPECIAL4: case WXK_SPECIAL5: case WXK_SPECIAL6: + case WXK_SPECIAL7: case WXK_SPECIAL8: case WXK_SPECIAL9: + case WXK_SPECIAL10: case WXK_SPECIAL11: case WXK_SPECIAL12: + case WXK_SPECIAL13: case WXK_SPECIAL14: case WXK_SPECIAL15: + case WXK_SPECIAL16: case WXK_SPECIAL17: case WXK_SPECIAL18: + case WXK_SPECIAL19: case WXK_SPECIAL20: + wxFAIL_MSG( wxT("Unsupported keyboard accelerator key") ); break; - /* These probably wouldn't work as there is no SpecialX in gdk/keynames.txt - case WXK_SPECIAL1: case WXK_SPECIAL2: case WXK_SPECIAL3: case WXK_SPECIAL4: - case WXK_SPECIAL5: case WXK_SPECIAL6: case WXK_SPECIAL7: case WXK_SPECIAL8: - case WXK_SPECIAL9: case WXK_SPECIAL10: case WXK_SPECIAL11: case WXK_SPECIAL12: - case WXK_SPECIAL13: case WXK_SPECIAL14: case WXK_SPECIAL15: case WXK_SPECIAL16: - case WXK_SPECIAL17: case WXK_SPECIAL18: case WXK_SPECIAL19: case WXK_SPECIAL20: - hotkey += wxString::Format(wxT("Special%d"), code - WXK_SPECIAL1 + 1); - break; - */ - // if there are any other keys wxAcceleratorEntry::Create() may - // return, we should process them here + + // if there are any other keys wxAcceleratorEntry::Create() may + // return, we should process them here default: if ( code < 127 ) diff --git a/tests/menu/menu.cpp b/tests/menu/menu.cpp index b5177d07b4..04140a9452 100644 --- a/tests/menu/menu.cpp +++ b/tests/menu/menu.cpp @@ -632,6 +632,10 @@ namespace { wxACCEL_SHIFT, "Shift", false }, { wxACCEL_ALT, "Alt", false } }; + /* + The keys marked as skip below are not supported as accelerator + keys on GTK. + */ std::vector specialKeys = { { WXK_F1, "WXK_F1", false }, @@ -670,7 +674,7 @@ namespace { WXK_END, "WXK_END", false }, { WXK_RETURN, "WXK_RETURN", false }, { WXK_BACK, "WXK_BACK", false }, - { WXK_TAB, "WXK_TAB", false }, + { WXK_TAB, "WXK_TAB", true }, { WXK_ESCAPE, "WXK_ESCAPE", false }, { WXK_SPACE, "WXK_SPACE", false }, { WXK_MULTIPLY, "WXK_MULTIPLY", false }, @@ -690,7 +694,7 @@ namespace { WXK_SNAPSHOT, "WXK_SNAPSHOT", true }, { WXK_HELP, "WXK_HELP", false }, { WXK_NUMLOCK, "WXK_NUMLOCK", false }, - { WXK_SCROLL, "WXK_SCROLL", false }, + { 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 }, From 4d582eda574989ce1c2dbb27a59a19a6b7f7c3e4 Mon Sep 17 00:00:00 2001 From: Ian McInerney Date: Sun, 4 Aug 2019 21:25:49 +0200 Subject: [PATCH 07/14] Updated documentation to reflect invalid GTK keycodes --- interface/wx/menuitem.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/interface/wx/menuitem.h b/interface/wx/menuitem.h index b03ff5ae65..f1e49ae77d 100644 --- a/interface/wx/menuitem.h +++ b/interface/wx/menuitem.h @@ -501,6 +501,23 @@ public: @c Shift+/ do not, so avoid using accelerators of this form in portable code. + @note In wxGTk, the left/right/up/down arrow keys do not work as + accelerator keys for a menu item unless a modifier key is used. + Additionally, the following keycodes are not supported as menu + accelerator keys: + - WXK_COMMAND + - WXK_SCROLL + - WXK_CAPITAL + - WXK_TAB + - WXK_SHIFT + - WXK_ALT + - WXK_ADD + - WXK_SEPARATOR + - WXK_SUBTRACT + - WXK_DECIMAL + - WXK_DIVIDE + - WXK_SNAPSHOT + @see GetItemLabel(), GetItemLabelText() */ virtual void SetItemLabel(const wxString& label); From a8af0c27af923a4db1254897d5d759c421ad79bb Mon Sep 17 00:00:00 2001 From: Ian McInerney Date: Sun, 4 Aug 2019 21:44:42 +0200 Subject: [PATCH 08/14] Add validity check before doing accelerator key creation --- src/gtk/menu.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gtk/menu.cpp b/src/gtk/menu.cpp index 3445ced6ca..bc121ecf3c 100644 --- a/src/gtk/menu.cpp +++ b/src/gtk/menu.cpp @@ -665,7 +665,7 @@ void wxMenuItem::SetGtkLabel() guint accel_key; GdkModifierType accel_mods; wxGetGtkAccel(this, &accel_key, &accel_mods); - if (accel_key) + if ( accel_key && gtk_accelerator_valid( accel_key, accel_mods ) ) { gtk_widget_add_accelerator( m_menuItem, "activate", GetRootParentMenu(m_parentMenu)->m_accel, @@ -673,7 +673,7 @@ void wxMenuItem::SetGtkLabel() } else { - // Remove the accelerator since it couldn't be made + // Remove the accelerator since it couldn't be made or is invalid m_text = m_text.BeforeFirst( wxT( '\t' ) ); } #endif // wxUSE_ACCEL From 1eea919f138d68d9a5686d374817f3b2563011e5 Mon Sep 17 00:00:00 2001 From: Ian McInerney Date: Sun, 4 Aug 2019 21:46:27 +0200 Subject: [PATCH 09/14] Mark more keys as being invalid for GTK accelerator keys --- src/gtk/menu.cpp | 80 +++++++++++++++++++++++++++------------------ tests/menu/menu.cpp | 10 +++--- 2 files changed, 54 insertions(+), 36 deletions(-) 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(); From d82351ffa38e3a428ef0bcc46b734c3492912c53 Mon Sep 17 00:00:00 2001 From: Ian McInerney Date: Sun, 4 Aug 2019 21:49:33 +0200 Subject: [PATCH 10/14] Add invalid keys to documentation --- interface/wx/menuitem.h | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/interface/wx/menuitem.h b/interface/wx/menuitem.h index f1e49ae77d..16fe5c282a 100644 --- a/interface/wx/menuitem.h +++ b/interface/wx/menuitem.h @@ -505,12 +505,16 @@ public: accelerator keys for a menu item unless a modifier key is used. Additionally, the following keycodes are not supported as menu accelerator keys: - - WXK_COMMAND - - WXK_SCROLL - - WXK_CAPITAL - - WXK_TAB + - WXK_COMMAND/WXK_CONTROL - WXK_SHIFT - WXK_ALT + - WXK_SCROLL + - WXK_CAPITAL + - WXK_NUMLOCK + - WXK_NUMPAD_TAB + - WXK_TAB + - WXK_WINDOWS_LEFT + - WXK_WINDOWS_RIGHT - WXK_ADD - WXK_SEPARATOR - WXK_SUBTRACT From ef596283761c563ccf31fbdbcde0c8427cd36d2b Mon Sep 17 00:00:00 2001 From: Ian McInerney Date: Mon, 5 Aug 2019 01:16:16 +0200 Subject: [PATCH 11/14] Fix CI errors in the unit tests --- tests/menu/menu.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/tests/menu/menu.cpp b/tests/menu/menu.cpp index 2ce211e525..81596c9117 100644 --- a/tests/menu/menu.cpp +++ b/tests/menu/menu.cpp @@ -746,10 +746,12 @@ TEST_CASE( "wxMenuItemAccelEntry", "[menu][accelentry]" ) SECTION( "Modifier keys" ) { - for( auto key : modKeys ) + std::vector::iterator k; + + for( k = modKeys.begin(); k < modKeys.end(); k++ ) { - INFO( wxString::Format( "Modifier: %s", key.name ) ); - wxAcceleratorEntry accelEntry( key.keycode, 'A' , wxID_ANY, item ); + INFO( wxString::Format( "Modifier: %s", k->name ) ); + wxAcceleratorEntry accelEntry( k->keycode, 'A' , wxID_ANY, item ); item->SetAccel( &accelEntry ); wxString labelText = item->GetItemLabel(); @@ -761,19 +763,21 @@ TEST_CASE( "wxMenuItemAccelEntry", "[menu][accelentry]" ) SECTION( "Special keys" ) { - for( auto key : specialKeys ) + std::vector::iterator k; + + for( k = specialKeys.begin(); k < specialKeys.end(); k++ ) { - if( key.skip ) + if( k->skip ) continue; - INFO( wxString::Format( "Keycode: %s", key.name ) ); - wxAcceleratorEntry accelEntry( wxACCEL_CTRL, key.keycode, wxID_ANY, item ); + INFO( wxString::Format( "Keycode: %s", k->name ) ); + wxAcceleratorEntry accelEntry( wxACCEL_CTRL, k->keycode, wxID_ANY, item ); item->SetAccel( &accelEntry ); wxString labelText = item->GetItemLabel(); INFO( wxString::Format( "Label text: %s", labelText ) ); - verifyAccelAssigned( labelText, key.keycode ); + verifyAccelAssigned( labelText, k->keycode ); } } } From 942fd47ae81125ef5802ee8f0841f1ec18c1e3ea Mon Sep 17 00:00:00 2001 From: Ian McInerney Date: Mon, 5 Aug 2019 01:18:50 +0200 Subject: [PATCH 12/14] Minor formatting fix --- tests/menu/accelentry.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/menu/accelentry.cpp b/tests/menu/accelentry.cpp index 1b7b6837be..2ea3686a95 100644 --- a/tests/menu/accelentry.cpp +++ b/tests/menu/accelentry.cpp @@ -95,6 +95,6 @@ TEST_CASE( "wxAcceleratorEntry::StringTests", "[accelentry]" ) SECTION( "Create from invalid string" ) { - REQUIRE( !a.FromString("bloordyblop") ); + REQUIRE( !a.FromString("bloordyblop") ); } } From 585302a69b860298eb1ae53d92566312322e038d Mon Sep 17 00:00:00 2001 From: Ian McInerney Date: Mon, 5 Aug 2019 09:14:03 +0200 Subject: [PATCH 13/14] Convert new menu unit test to C++98 style --- tests/menu/menu.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/tests/menu/menu.cpp b/tests/menu/menu.cpp index 81596c9117..3b99aa4be8 100644 --- a/tests/menu/menu.cpp +++ b/tests/menu/menu.cpp @@ -625,7 +625,7 @@ namespace wxString name; bool skip; }; - std::vector modKeys = + key modKeys[] = { { wxACCEL_NORMAL, "Normal", false }, { wxACCEL_CTRL, "Ctrl", false }, @@ -636,7 +636,7 @@ namespace The keys marked as skip below are not supported as accelerator keys on GTK. */ - std::vector specialKeys = + key specialKeys[] = { { WXK_F1, "WXK_F1", false }, { WXK_F2, "WXK_F2", false }, @@ -746,12 +746,12 @@ TEST_CASE( "wxMenuItemAccelEntry", "[menu][accelentry]" ) SECTION( "Modifier keys" ) { - std::vector::iterator k; - - for( k = modKeys.begin(); k < modKeys.end(); k++ ) + for( int i = 0; i < WXSIZEOF(modKeys); i++ ) { - INFO( wxString::Format( "Modifier: %s", k->name ) ); - wxAcceleratorEntry accelEntry( k->keycode, 'A' , wxID_ANY, item ); + const key& k = modKeys[i]; + + INFO( wxString::Format( "Modifier: %s", k.name ) ); + wxAcceleratorEntry accelEntry( k.keycode, 'A' , wxID_ANY, item ); item->SetAccel( &accelEntry ); wxString labelText = item->GetItemLabel(); @@ -763,21 +763,21 @@ TEST_CASE( "wxMenuItemAccelEntry", "[menu][accelentry]" ) SECTION( "Special keys" ) { - std::vector::iterator k; - - for( k = specialKeys.begin(); k < specialKeys.end(); k++ ) + for( int i = 0; i < WXSIZEOF(specialKeys); i++ ) { - if( k->skip ) + const key& k = specialKeys[i]; + + if( k.skip ) continue; - INFO( wxString::Format( "Keycode: %s", k->name ) ); - wxAcceleratorEntry accelEntry( wxACCEL_CTRL, k->keycode, wxID_ANY, item ); + INFO( wxString::Format( "Keycode: %s", k.name ) ); + wxAcceleratorEntry accelEntry( wxACCEL_CTRL, k.keycode, wxID_ANY, item ); item->SetAccel( &accelEntry ); wxString labelText = item->GetItemLabel(); INFO( wxString::Format( "Label text: %s", labelText ) ); - verifyAccelAssigned( labelText, k->keycode ); + verifyAccelAssigned( labelText, k.keycode ); } } } From ff1eb1afcc158bc8944c17ff1968df7ec3512c2d Mon Sep 17 00:00:00 2001 From: Ian McInerney Date: Mon, 5 Aug 2019 20:51:46 +0200 Subject: [PATCH 14/14] Fix comments from review --- src/common/accelcmn.cpp | 72 +++++------ src/gtk/menu.cpp | 18 +-- tests/menu/accelentry.cpp | 22 ++-- tests/menu/menu.cpp | 254 +++++++++++++++++++------------------- 4 files changed, 184 insertions(+), 182 deletions(-) diff --git a/src/common/accelcmn.cpp b/src/common/accelcmn.cpp index 62a3d58c8a..820985df26 100644 --- a/src/common/accelcmn.cpp +++ b/src/common/accelcmn.cpp @@ -45,43 +45,43 @@ static const struct wxKeyName const char *display_name; } wxKeyNames[] = { - { WXK_DELETE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Delete"), /*Display is the same as key name*/ 0 }, - { WXK_DELETE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Del"), /*Display is the same as key name*/ 0 }, + { WXK_DELETE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Delete") }, + { WXK_DELETE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Del") }, { WXK_BACK, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Back"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Backspace") }, - { WXK_INSERT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Insert"), /*Display is the same as key name*/ 0 }, - { WXK_INSERT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Ins"), /*Display is the same as key name*/ 0 }, - { WXK_RETURN, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Enter"), /*Display is the same as key name*/ 0 }, - { WXK_RETURN, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Return"), /*Display is the same as key name*/ 0 }, + { WXK_INSERT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Insert") }, + { WXK_INSERT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Ins") }, + { WXK_RETURN, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Enter") }, + { WXK_RETURN, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Return") }, { WXK_PAGEUP, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("PageUp"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Page Up") }, { WXK_PAGEDOWN, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("PageDown"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Page Down") }, - { WXK_PAGEUP, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("PgUp"), /*Display is the same as key name*/ 0 }, - { WXK_PAGEDOWN, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("PgDn"), /*Display is the same as key name*/ 0 }, + { WXK_PAGEUP, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("PgUp") }, + { WXK_PAGEDOWN, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("PgDn") }, { WXK_LEFT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Left"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Left") }, { WXK_RIGHT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Right"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Right") }, { WXK_UP, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Up"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Up") }, { WXK_DOWN, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Down"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Down") }, - { WXK_HOME, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Home"), /*Display is the same as key name*/ 0 }, - { WXK_END, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("End"), /*Display is the same as key name*/ 0 }, - { WXK_SPACE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Space"), /*Display is the same as key name*/ 0 }, - { WXK_TAB, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Tab"), /*Display is the same as key name*/ 0 }, - { WXK_ESCAPE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Esc"), /*Display is the same as key name*/ 0 }, - { WXK_ESCAPE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Escape"), /*Display is the same as key name*/ 0 }, - { WXK_CANCEL, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Cancel"), /*Display is the same as key name*/ 0 }, - { WXK_CLEAR, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Clear"), /*Display is the same as key name*/ 0 }, - { WXK_MENU, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Menu"), /*Display is the same as key name*/ 0 }, - { WXK_PAUSE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Pause"), /*Display is the same as key name*/ 0 }, - { WXK_CAPITAL, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Capital"), /*Display is the same as key name*/ 0 }, - { WXK_SELECT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Select"), /*Display is the same as key name*/ 0 }, - { WXK_PRINT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Print"), /*Display is the same as key name*/ 0 }, - { WXK_EXECUTE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Execute"), /*Display is the same as key name*/ 0 }, - { WXK_SNAPSHOT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Snapshot"), /*Display is the same as key name*/ 0 }, - { WXK_HELP, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Help"), /*Display is the same as key name*/ 0 }, - { WXK_ADD, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Add"), /*Display is the same as key name*/ 0 }, - { WXK_SEPARATOR, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Separator"), /*Display is the same as key name*/ 0 }, - { WXK_SUBTRACT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Subtract"), /*Display is the same as key name*/ 0 }, - { WXK_DECIMAL, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Decimal"), /*Display is the same as key name*/ 0 }, - { WXK_MULTIPLY, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Multiply"), /*Display is the same as key name*/ 0 }, - { WXK_DIVIDE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Divide"), /*Display is the same as key name*/ 0 }, + { WXK_HOME, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Home") }, + { WXK_END, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("End") }, + { WXK_SPACE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Space") }, + { WXK_TAB, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Tab") }, + { WXK_ESCAPE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Esc") }, + { WXK_ESCAPE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Escape") }, + { WXK_CANCEL, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Cancel") }, + { WXK_CLEAR, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Clear") }, + { WXK_MENU, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Menu") }, + { WXK_PAUSE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Pause") }, + { WXK_CAPITAL, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Capital") }, + { WXK_SELECT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Select") }, + { WXK_PRINT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Print") }, + { WXK_EXECUTE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Execute") }, + { WXK_SNAPSHOT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Snapshot") }, + { WXK_HELP, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Help") }, + { WXK_ADD, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Add") }, + { WXK_SEPARATOR, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Separator") }, + { WXK_SUBTRACT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Subtract") }, + { WXK_DECIMAL, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Decimal") }, + { WXK_MULTIPLY, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Multiply") }, + { WXK_DIVIDE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Divide") }, { WXK_NUMLOCK, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num_lock"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num Lock") }, { WXK_SCROLL, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Scroll_lock"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Scroll Lock") }, { WXK_NUMPAD_SPACE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("KP_Space"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num Space") }, @@ -94,8 +94,8 @@ static const struct wxKeyName { WXK_NUMPAD_DOWN, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("KP_Down"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num Down") }, { WXK_NUMPAD_PAGEUP, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("KP_PageUp"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num Page Up") }, { WXK_NUMPAD_PAGEDOWN, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("KP_PageDown"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num Page Down") }, - { WXK_NUMPAD_PAGEUP, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("KP_Prior"), /*Display is the same as key name*/ 0 }, - { WXK_NUMPAD_PAGEDOWN, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("KP_Next"), /*Display is the same as key name*/ 0 }, + { WXK_NUMPAD_PAGEUP, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("KP_Prior") }, + { WXK_NUMPAD_PAGEDOWN, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("KP_Next") }, { WXK_NUMPAD_END, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("KP_End"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num End") }, { WXK_NUMPAD_BEGIN, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("KP_Begin"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num Begin") }, { WXK_NUMPAD_INSERT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("KP_Insert"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num Insert") }, @@ -107,10 +107,10 @@ static const struct wxKeyName { WXK_NUMPAD_SUBTRACT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("KP_Subtract"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num -") }, { WXK_NUMPAD_DECIMAL, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("KP_Decimal"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num .") }, { WXK_NUMPAD_DIVIDE, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("KP_Divide"), /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Num /") }, - { WXK_WINDOWS_LEFT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Windows_Left"), /*Display is the same as key name*/ 0 }, - { WXK_WINDOWS_RIGHT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Windows_Right"), /*Display is the same as key name*/ 0 }, - { WXK_WINDOWS_MENU, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Windows_Menu"), /*Display is the same as key name*/ 0 }, - { WXK_COMMAND, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Command"), /*Display is the same as key name*/ 0 }, + { WXK_WINDOWS_LEFT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Windows_Left") }, + { WXK_WINDOWS_RIGHT, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Windows_Right") }, + { WXK_WINDOWS_MENU, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Windows_Menu") }, + { WXK_COMMAND, /*TRANSLATORS: Name of keyboard key*/ wxTRANSLATE("Command") }, }; diff --git a/src/gtk/menu.cpp b/src/gtk/menu.cpp index d0f884e031..67c2d902ca 100644 --- a/src/gtk/menu.cpp +++ b/src/gtk/menu.cpp @@ -674,7 +674,7 @@ void wxMenuItem::SetGtkLabel() else { // Remove the accelerator since it couldn't be made or is invalid - m_text = m_text.BeforeFirst( wxT( '\t' ) ); + m_text = m_text.BeforeFirst( wxS( '\t' ) ); } #endif // wxUSE_ACCEL } @@ -1059,25 +1059,25 @@ static wxString GetGtkHotKey( const wxMenuItem& item ) hotkey << wxT("Delete" ); break; case WXK_UP: - if( flags ) + if ( flags ) hotkey << wxT("Up" ); else wxFAIL_MSG( wxT("The Up key must have modifiers to be an accelerator key") ); break; case WXK_DOWN: - if( flags ) + 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 ) + 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 ) + if ( flags ) hotkey << wxT("Right" ); else wxFAIL_MSG( wxT("The Right key must have modifiers to be an accelerator key") ); @@ -1153,25 +1153,25 @@ static wxString GetGtkHotKey( const wxMenuItem& item ) hotkey << wxT("KP_Home" ); break; case WXK_NUMPAD_UP: - if( flags ) + 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: - if( flags ) + 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 ) + 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 ) + if ( flags ) hotkey << wxT("KP_Right" ); else wxFAIL_MSG( wxT("The KP_Right key must have modifiers to be an accelerator key") ); diff --git a/tests/menu/accelentry.cpp b/tests/menu/accelentry.cpp index 2ea3686a95..a6b9fe2103 100644 --- a/tests/menu/accelentry.cpp +++ b/tests/menu/accelentry.cpp @@ -26,8 +26,8 @@ namespace void CheckAccelEntry(const wxAcceleratorEntry& accel, int keycode, int flags) { - REQUIRE( keycode == accel.GetKeyCode() ); - REQUIRE( flags == accel.GetFlags() ); + CHECK( keycode == accel.GetKeyCode() ); + CHECK( flags == accel.GetFlags() ); } } // anonymous namespace @@ -44,8 +44,8 @@ TEST_CASE( "wxAcceleratorEntry::Create", "[accelentry]" ) { pa = wxAcceleratorEntry::Create("Foo\tCtrl+Z"); - REQUIRE( pa ); - REQUIRE( pa->IsOk() ); + CHECK( pa ); + CHECK( pa->IsOk() ); CheckAccelEntry(*pa, 'Z', wxACCEL_CTRL); } @@ -53,22 +53,22 @@ TEST_CASE( "wxAcceleratorEntry::Create", "[accelentry]" ) { pa = wxAcceleratorEntry::Create("Shift-Q"); - REQUIRE( !pa ); + CHECK( !pa ); } SECTION( "No accelerator key specified" ) { pa = wxAcceleratorEntry::Create("bloordyblop"); - REQUIRE( !pa ); + CHECK( !pa ); } SECTION( "Display name parsing" ) { pa = wxAcceleratorEntry::Create("Test\tBackSpace"); - REQUIRE( pa ); - REQUIRE( pa->IsOk() ); + CHECK( pa ); + CHECK( pa->IsOk() ); CheckAccelEntry(*pa, WXK_BACK, wxACCEL_NORMAL); } } @@ -84,17 +84,17 @@ TEST_CASE( "wxAcceleratorEntry::StringTests", "[accelentry]" ) SECTION( "Create string from key" ) { - REQUIRE( "Alt+X" == a.ToString() ); + CHECK( "Alt+X" == a.ToString() ); } SECTION( "Create from valid string" ) { - REQUIRE( a.FromString("Alt+Shift+F1") ); + CHECK( a.FromString("Alt+Shift+F1") ); CheckAccelEntry(a, WXK_F1, wxACCEL_ALT | wxACCEL_SHIFT); } SECTION( "Create from invalid string" ) { - REQUIRE( !a.FromString("bloordyblop") ); + CHECK( !a.FromString("bloordyblop") ); } } diff --git a/tests/menu/menu.cpp b/tests/menu/menu.cpp index 3b99aa4be8..2a76f94c38 100644 --- a/tests/menu/menu.cpp +++ b/tests/menu/menu.cpp @@ -611,130 +611,132 @@ void MenuTestCase::Events() namespace { - void verifyAccelAssigned( wxString labelText, int keycode ) - { - wxAcceleratorEntry* entry = wxAcceleratorEntry::Create( labelText ); - REQUIRE( entry ); - REQUIRE( entry->GetKeyCode() == keycode ); - } +void VerifyAccelAssigned( wxString labelText, int keycode ) +{ + wxAcceleratorEntry* entry = wxAcceleratorEntry::Create( labelText ); + + CHECK( entry ); + CHECK( entry->GetKeyCode() == keycode ); +} + +struct key +{ + int keycode; + wxString name; + bool skip; +}; +key modKeys[] = +{ + { wxACCEL_NORMAL, "Normal", false }, + { wxACCEL_CTRL, "Ctrl", false }, + { wxACCEL_SHIFT, "Shift", false }, + { wxACCEL_ALT, "Alt", false } +}; +/* + The keys marked as skip below are not supported as accelerator + keys on GTK. + */ +key specialKeys[] = +{ + { WXK_F1, "WXK_F1", false }, + { WXK_F2, "WXK_F2", false }, + { WXK_F3, "WXK_F3", false }, + { WXK_F4, "WXK_F4", false }, + { WXK_F5, "WXK_F5", false }, + { WXK_F6, "WXK_F6", false }, + { WXK_F7, "WXK_F7", false }, + { WXK_F8, "WXK_F8", false }, + { WXK_F9, "WXK_F9", false }, + { WXK_F10, "WXK_F10", false }, + { WXK_F11, "WXK_F11", false }, + { WXK_F12, "WXK_F12", false }, + { WXK_F13, "WXK_F13", false }, + { WXK_F14, "WXK_F14", false }, + { WXK_F15, "WXK_F15", false }, + { WXK_F16, "WXK_F16", false }, + { WXK_F17, "WXK_F17", false }, + { WXK_F18, "WXK_F18", false }, + { WXK_F19, "WXK_F19", false }, + { WXK_F20, "WXK_F20", false }, + { WXK_F21, "WXK_F21", false }, + { WXK_F22, "WXK_F22", false }, + { WXK_F23, "WXK_F23", false }, + { WXK_F24, "WXK_F24", false }, + { WXK_INSERT, "WXK_INSERT", false }, + { WXK_DELETE, "WXK_DELETE", false }, + { WXK_UP, "WXK_UP", false }, + { WXK_DOWN, "WXK_DOWN", false }, + { WXK_PAGEUP, "WXK_PAGEUP", false }, + { WXK_PAGEDOWN, "WXK_PAGEDOWN", false }, + { WXK_LEFT, "WXK_LEFT", false }, + { WXK_RIGHT, "WXK_RIGHT", false }, + { WXK_HOME, "WXK_HOME", false }, + { WXK_END, "WXK_END", false }, + { WXK_RETURN, "WXK_RETURN", false }, + { WXK_BACK, "WXK_BACK", false }, + { WXK_TAB, "WXK_TAB", true }, + { WXK_ESCAPE, "WXK_ESCAPE", false }, + { WXK_SPACE, "WXK_SPACE", false }, + { WXK_MULTIPLY, "WXK_MULTIPLY", false }, + { WXK_ADD, "WXK_ADD", true }, + { WXK_SEPARATOR, "WXK_SEPARATOR", true }, + { WXK_SUBTRACT, "WXK_SUBTRACT", true }, + { WXK_DECIMAL, "WXK_DECIMAL", true }, + { WXK_DIVIDE, "WXK_DIVIDE", true }, + { WXK_CANCEL, "WXK_CANCEL", false }, + { WXK_CLEAR, "WXK_CLEAR", false }, + { WXK_MENU, "WXK_MENU", false }, + { WXK_PAUSE, "WXK_PAUSE", false }, + { WXK_CAPITAL, "WXK_CAPITAL", true }, + { WXK_SELECT, "WXK_SELECT", false }, + { WXK_PRINT, "WXK_PRINT", false }, + { WXK_EXECUTE, "WXK_EXECUTE", false }, + { WXK_SNAPSHOT, "WXK_SNAPSHOT", true }, + { WXK_HELP, "WXK_HELP", 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", true }, + { WXK_NUMPAD_ENTER, "WXK_NUMPAD_ENTER", false }, + { WXK_NUMPAD_F1, "WXK_NUMPAD_F1", false }, + { WXK_NUMPAD_F2, "WXK_NUMPAD_F2", false }, + { WXK_NUMPAD_F3, "WXK_NUMPAD_F3", false }, + { WXK_NUMPAD_F4, "WXK_NUMPAD_F4", false }, + { WXK_NUMPAD_HOME, "WXK_NUMPAD_HOME", false }, + { WXK_NUMPAD_LEFT, "WXK_NUMPAD_LEFT", false }, + { WXK_NUMPAD_UP, "WXK_NUMPAD_UP", false }, + { WXK_NUMPAD_RIGHT, "WXK_NUMPAD_RIGHT", false }, + { WXK_NUMPAD_DOWN, "WXK_NUMPAD_DOWN", false }, + { WXK_NUMPAD_PAGEUP, "WXK_NUMPAD_PAGEUP", false }, + { WXK_NUMPAD_PAGEDOWN, "WXK_NUMPAD_PAGEDOWN", false }, + { WXK_NUMPAD_END, "WXK_NUMPAD_END", false }, + { WXK_NUMPAD_BEGIN, "WXK_NUMPAD_BEGIN", false }, + { WXK_NUMPAD_EQUAL, "WXK_NUMPAD_EQUAL", false }, + { WXK_NUMPAD_MULTIPLY, "WXK_NUMPAD_MULTIPLY", false }, + { WXK_NUMPAD_ADD, "WXK_NUMPAD_ADD", false }, + { WXK_NUMPAD_SEPARATOR, "WXK_NUMPAD_SEPARATOR", false }, + { WXK_NUMPAD_SUBTRACT, "WXK_NUMPAD_SUBTRACT", false }, + { WXK_NUMPAD_DECIMAL, "WXK_NUMPAD_DECIMAL", false }, + { WXK_NUMPAD_DIVIDE, "WXK_NUMPAD_DIVIDE", false }, + { WXK_NUMPAD0, "WXK_NUMPAD0", false }, + { WXK_NUMPAD1, "WXK_NUMPAD1", false }, + { WXK_NUMPAD2, "WXK_NUMPAD2", false }, + { WXK_NUMPAD3, "WXK_NUMPAD3", false }, + { WXK_NUMPAD4, "WXK_NUMPAD4", false }, + { WXK_NUMPAD5, "WXK_NUMPAD5", false }, + { WXK_NUMPAD6, "WXK_NUMPAD6", false }, + { WXK_NUMPAD7, "WXK_NUMPAD7", false }, + { WXK_NUMPAD8, "WXK_NUMPAD8", false }, + { WXK_NUMPAD9, "WXK_NUMPAD9", 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 } +}; - struct key - { - int keycode; - wxString name; - bool skip; - }; - key modKeys[] = - { - { wxACCEL_NORMAL, "Normal", false }, - { wxACCEL_CTRL, "Ctrl", false }, - { wxACCEL_SHIFT, "Shift", false }, - { wxACCEL_ALT, "Alt", false } - }; - /* - The keys marked as skip below are not supported as accelerator - keys on GTK. - */ - key specialKeys[] = - { - { WXK_F1, "WXK_F1", false }, - { WXK_F2, "WXK_F2", false }, - { WXK_F3, "WXK_F3", false }, - { WXK_F4, "WXK_F4", false }, - { WXK_F5, "WXK_F5", false }, - { WXK_F6, "WXK_F6", false }, - { WXK_F7, "WXK_F7", false }, - { WXK_F8, "WXK_F8", false }, - { WXK_F9, "WXK_F9", false }, - { WXK_F10, "WXK_F10", false }, - { WXK_F11, "WXK_F11", false }, - { WXK_F12, "WXK_F12", false }, - { WXK_F13, "WXK_F13", false }, - { WXK_F14, "WXK_F14", false }, - { WXK_F15, "WXK_F15", false }, - { WXK_F16, "WXK_F16", false }, - { WXK_F17, "WXK_F17", false }, - { WXK_F18, "WXK_F18", false }, - { WXK_F19, "WXK_F19", false }, - { WXK_F20, "WXK_F20", false }, - { WXK_F21, "WXK_F21", false }, - { WXK_F22, "WXK_F22", false }, - { WXK_F23, "WXK_F23", false }, - { WXK_F24, "WXK_F24", false }, - { WXK_INSERT, "WXK_INSERT", false }, - { WXK_DELETE, "WXK_DELETE", false }, - { WXK_UP, "WXK_UP", false }, - { WXK_DOWN, "WXK_DOWN", false }, - { WXK_PAGEUP, "WXK_PAGEUP", false }, - { WXK_PAGEDOWN, "WXK_PAGEDOWN", false }, - { WXK_LEFT, "WXK_LEFT", false }, - { WXK_RIGHT, "WXK_RIGHT", false }, - { WXK_HOME, "WXK_HOME", false }, - { WXK_END, "WXK_END", false }, - { WXK_RETURN, "WXK_RETURN", false }, - { WXK_BACK, "WXK_BACK", false }, - { WXK_TAB, "WXK_TAB", true }, - { WXK_ESCAPE, "WXK_ESCAPE", false }, - { WXK_SPACE, "WXK_SPACE", false }, - { WXK_MULTIPLY, "WXK_MULTIPLY", false }, - { WXK_ADD, "WXK_ADD", true }, - { WXK_SEPARATOR, "WXK_SEPARATOR", true }, - { WXK_SUBTRACT, "WXK_SUBTRACT", true }, - { WXK_DECIMAL, "WXK_DECIMAL", true }, - { WXK_DIVIDE, "WXK_DIVIDE", true }, - { WXK_CANCEL, "WXK_CANCEL", false }, - { WXK_CLEAR, "WXK_CLEAR", false }, - { WXK_MENU, "WXK_MENU", false }, - { WXK_PAUSE, "WXK_PAUSE", false }, - { WXK_CAPITAL, "WXK_CAPITAL", true }, - { WXK_SELECT, "WXK_SELECT", false }, - { WXK_PRINT, "WXK_PRINT", false }, - { WXK_EXECUTE, "WXK_EXECUTE", false }, - { WXK_SNAPSHOT, "WXK_SNAPSHOT", true }, - { WXK_HELP, "WXK_HELP", 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", true }, - { WXK_NUMPAD_ENTER, "WXK_NUMPAD_ENTER", false }, - { WXK_NUMPAD_F1, "WXK_NUMPAD_F1", false }, - { WXK_NUMPAD_F2, "WXK_NUMPAD_F2", false }, - { WXK_NUMPAD_F3, "WXK_NUMPAD_F3", false }, - { WXK_NUMPAD_F4, "WXK_NUMPAD_F4", false }, - { WXK_NUMPAD_HOME, "WXK_NUMPAD_HOME", false }, - { WXK_NUMPAD_LEFT, "WXK_NUMPAD_LEFT", false }, - { WXK_NUMPAD_UP, "WXK_NUMPAD_UP", false }, - { WXK_NUMPAD_RIGHT, "WXK_NUMPAD_RIGHT", false }, - { WXK_NUMPAD_DOWN, "WXK_NUMPAD_DOWN", false }, - { WXK_NUMPAD_PAGEUP, "WXK_NUMPAD_PAGEUP", false }, - { WXK_NUMPAD_PAGEDOWN, "WXK_NUMPAD_PAGEDOWN", false }, - { WXK_NUMPAD_END, "WXK_NUMPAD_END", false }, - { WXK_NUMPAD_BEGIN, "WXK_NUMPAD_BEGIN", false }, - { WXK_NUMPAD_EQUAL, "WXK_NUMPAD_EQUAL", false }, - { WXK_NUMPAD_MULTIPLY, "WXK_NUMPAD_MULTIPLY", false }, - { WXK_NUMPAD_ADD, "WXK_NUMPAD_ADD", false }, - { WXK_NUMPAD_SEPARATOR, "WXK_NUMPAD_SEPARATOR", false }, - { WXK_NUMPAD_SUBTRACT, "WXK_NUMPAD_SUBTRACT", false }, - { WXK_NUMPAD_DECIMAL, "WXK_NUMPAD_DECIMAL", false }, - { WXK_NUMPAD_DIVIDE, "WXK_NUMPAD_DIVIDE", false }, - { WXK_NUMPAD0, "WXK_NUMPAD0", false }, - { WXK_NUMPAD1, "WXK_NUMPAD1", false }, - { WXK_NUMPAD2, "WXK_NUMPAD2", false }, - { WXK_NUMPAD3, "WXK_NUMPAD3", false }, - { WXK_NUMPAD4, "WXK_NUMPAD4", false }, - { WXK_NUMPAD5, "WXK_NUMPAD5", false }, - { WXK_NUMPAD6, "WXK_NUMPAD6", false }, - { WXK_NUMPAD7, "WXK_NUMPAD7", false }, - { WXK_NUMPAD8, "WXK_NUMPAD8", false }, - { WXK_NUMPAD9, "WXK_NUMPAD9", 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 } - }; } TEST_CASE( "wxMenuItemAccelEntry", "[menu][accelentry]" ) @@ -746,7 +748,7 @@ TEST_CASE( "wxMenuItemAccelEntry", "[menu][accelentry]" ) SECTION( "Modifier keys" ) { - for( int i = 0; i < WXSIZEOF(modKeys); i++ ) + for ( int i = 0; i < WXSIZEOF(modKeys); i++ ) { const key& k = modKeys[i]; @@ -757,13 +759,13 @@ TEST_CASE( "wxMenuItemAccelEntry", "[menu][accelentry]" ) wxString labelText = item->GetItemLabel(); INFO( wxString::Format( "Label text: %s", labelText ) ); - verifyAccelAssigned( labelText, 'A' ); + VerifyAccelAssigned( labelText, 'A' ); } } SECTION( "Special keys" ) { - for( int i = 0; i < WXSIZEOF(specialKeys); i++ ) + for ( int i = 0; i < WXSIZEOF(specialKeys); i++ ) { const key& k = specialKeys[i]; @@ -777,7 +779,7 @@ TEST_CASE( "wxMenuItemAccelEntry", "[menu][accelentry]" ) wxString labelText = item->GetItemLabel(); INFO( wxString::Format( "Label text: %s", labelText ) ); - verifyAccelAssigned( labelText, k.keycode ); + VerifyAccelAssigned( labelText, k.keycode ); } } }