X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fkeyeditor.cc;h=28cd8b8508f0edc2bbae6d82abdf6c5943927db4;hb=8505c16057a074531a99728e730408151d7aafa4;hp=e9a0ed85a486ff1033a4fcaecf84b02098aa5023;hpb=d324f67cce4530b4c57665210615ecdcaf46d979;p=ardour.git diff --git a/gtk2_ardour/keyeditor.cc b/gtk2_ardour/keyeditor.cc index e9a0ed85a4..28cd8b8508 100644 --- a/gtk2_ardour/keyeditor.cc +++ b/gtk2_ardour/keyeditor.cc @@ -55,8 +55,7 @@ KeyEditor::KeyEditor () , unbind_box (BUTTONBOX_END) { - can_bind = false; - last_state = 0; + last_keyval = 0; model = TreeStore::create(columns); @@ -103,7 +102,7 @@ KeyEditor::KeyEditor () reset_button.show (); reset_label.show (); reset_button.signal_clicked().connect (sigc::mem_fun (*this, &KeyEditor::reset)); - vpacker.pack_start (reset_box); + vpacker.pack_start (reset_box, false, false); add (vpacker); @@ -182,15 +181,16 @@ KeyEditor::action_selected () bool KeyEditor::on_key_press_event (GdkEventKey* ev) { - can_bind = true; - last_state = ev->state; - return false; + if (!ev->is_modifier) { + last_keyval = ev->keyval; + } + return ArdourWindow::on_key_press_event (ev); } bool KeyEditor::on_key_release_event (GdkEventKey* ev) { - if (ARDOUR::Profile->get_sae() || !can_bind || ev->state != last_state) { + if (ARDOUR::Profile->get_sae() || last_keyval == 0) { return false; } @@ -203,22 +203,25 @@ KeyEditor::on_key_release_event (GdkEventKey* ev) goto out; } - Gtkmm2ext::possibly_translate_keyval_to_make_legal_accelerator (ev->keyval); + GdkModifierType mod = (GdkModifierType)(Keyboard::RelevantModifierKeyMask & ev->state); + Gtkmm2ext::possibly_translate_keyval_to_make_legal_accelerator (ev->keyval); + Gtkmm2ext::possibly_translate_mod_to_make_legal_accelerator (mod); bool result = AccelMap::change_entry (path, - ev->keyval, - ModifierType (Keyboard::RelevantModifierKeyMask & ev->state), + last_keyval, + Gdk::ModifierType(mod), true); if (result) { AccelKey key; (*i)[columns.binding] = ActionManager::get_key_representation (path, key); + unbind_button.set_sensitive (true); } } out: - can_bind = false; + last_keyval = 0; return true; } @@ -310,4 +313,7 @@ void KeyEditor::reset () { Keyboard::the_keyboard().reset_bindings (); + populate (); + view.get_selection()->unselect_all (); + populate (); }