From 4659569333377689dd6647d515187385a54c10cc Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sat, 17 Aug 2019 19:17:40 +0200 Subject: [PATCH 1/3] Primary fix issue #318 (unable to remove key binding) For a backward compatible solution, a key binding target of '' still means "take default". For "nothing", a new pseudo-key "none" was defined. For scripting, this value is available as constant "Action#NoShortCut". --- src/lay/lay/layMainConfigPages.cc | 55 +++++++++---- src/lay/lay/layMainConfigPages.h | 1 + src/laybasic/laybasic/gsiDeclLayMenu.cc | 10 ++- src/laybasic/laybasic/layAbstractMenu.cc | 98 +++++++++++++++--------- src/laybasic/laybasic/layAbstractMenu.h | 37 +++++---- src/laybasic/laybasic/layWidgets.cc | 1 + src/laybasic/laybasic/layWidgets.h | 1 + 7 files changed, 134 insertions(+), 69 deletions(-) diff --git a/src/lay/lay/layMainConfigPages.cc b/src/lay/lay/layMainConfigPages.cc index 25e2bbd4a..281812294 100644 --- a/src/lay/lay/layMainConfigPages.cc +++ b/src/lay/lay/layMainConfigPages.cc @@ -407,6 +407,7 @@ CustomizeMenuConfigPage::CustomizeMenuConfigPage (QWidget *parent) mp_ui->binding_le->setEnabled (false); mp_ui->binding_le->set_clear_button_enabled (true); + connect (mp_ui->binding_le, SIGNAL (clear_pressed ()), this, SLOT (text_cleared ())); connect (mp_ui->binding_le, SIGNAL (textChanged (QString)), this, SLOT (text_changed ())); mp_ui->filter->set_clear_button_enabled (true); @@ -433,7 +434,7 @@ static void get_shortcuts (const lay::AbstractMenu &menu, const std::string &roo } get_shortcuts (menu, *i, bindings, with_defaults); } else if (! menu.is_separator (*i)) { - bindings.insert (std::make_pair (*i, with_defaults ? menu.action (*i).get_default_shortcut () : menu.action (*i).get_shortcut ())); + bindings.insert (std::make_pair (*i, with_defaults ? menu.action (*i).get_default_shortcut () : menu.action (*i).get_effective_shortcut ())); } } } @@ -483,7 +484,8 @@ CustomizeMenuConfigPage::apply (const std::vector::iterator kb = m_current_bindings.begin (); kb != m_current_bindings.end (); ++kb) { std::map::iterator bb = b.find (kb->first); if (bb != b.end ()) { - kb->second = bb->second; + lay::Action a = lay::MainWindow::instance ()->menu ()->action (kb->first); + kb->second = a.get_effective_shortcut_for (bb->second); } else { kb->second.clear (); } @@ -517,13 +519,9 @@ CustomizeMenuConfigPage::apply (const std::vector