diff --git a/radiant/eventmanager/EventManager.cpp b/radiant/eventmanager/EventManager.cpp index 863e8511ac..4cec7e2634 100644 --- a/radiant/eventmanager/EventManager.cpp +++ b/radiant/eventmanager/EventManager.cpp @@ -365,21 +365,22 @@ void EventManager::unregisterMenuItem(const std::string& eventName, const ui::IM Accelerator& EventManager::connectAccelerator(int keyCode, unsigned int modifierFlags, const std::string& command) { auto result = _accelerators.emplace(command, std::make_shared(keyCode, modifierFlags)); + Accelerator& accel = *result.first->second; // There might be an event to associate auto event = findEvent(command); if (!event->empty()) { - // Command found, connect it to the accelerator by passing its pointer - //event->connectAccelerator(accelerator); - result.first->second->setEvent(event); + accel.setEvent(event); } else { - result.first->second->setStatement(command); + accel.setStatement(command); } + setMenuItemAccelerator(command, accel.getString(true)); + return *result.first->second; #if 0 else @@ -405,6 +406,9 @@ void EventManager::disconnectAccelerator(const std::string& command) if (existing != _accelerators.end()) { + // Clear menu item accelerator string + setMenuItemAccelerator(command, std::string()); + if (existing->second->getEvent()) { existing->second->getEvent()->disconnectAccelerators(); @@ -443,6 +447,16 @@ void EventManager::disconnectAccelerator(const std::string& command) #endif } +void EventManager::setMenuItemAccelerator(const std::string& command, const std::string& acceleratorStr) +{ + auto foundMenuItem = _menuItems.find(command); + + if (foundMenuItem != _menuItems.end()) + { + foundMenuItem->second.item->setAccelerator(acceleratorStr); + } +} + void EventManager::disableEvent(const std::string& eventName) { findEvent(eventName)->setEnabled(false); diff --git a/radiant/eventmanager/EventManager.h b/radiant/eventmanager/EventManager.h index 5e45bb2a7f..ecb6f873a9 100644 --- a/radiant/eventmanager/EventManager.h +++ b/radiant/eventmanager/EventManager.h @@ -116,6 +116,8 @@ class EventManager : void loadAcceleratorFromList(const xml::NodeList& shortcutList); + void setMenuItemAccelerator(const std::string& command, const std::string& acceleratorStr); + bool isModifier(wxKeyEvent& ev); };