summaryrefslogtreecommitdiff
path: root/gtk2_ardour/keyeditor.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2007-10-27 20:38:23 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2007-10-27 20:38:23 +0000
commit33cde64ba350219e5642dc0ad05d532e9fa51c83 (patch)
treeedfa55dc0aaf1334e3e795720527ce5f4b45c809 /gtk2_ardour/keyeditor.cc
parent9a00f412535d46aee3d1044f72b6339e979591be (diff)
fixes for keystate handling in the key binding editor (from trunk)
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@2578 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/keyeditor.cc')
-rw-r--r--gtk2_ardour/keyeditor.cc25
1 files changed, 25 insertions, 0 deletions
diff --git a/gtk2_ardour/keyeditor.cc b/gtk2_ardour/keyeditor.cc
index 07aad652af..f3ae77865d 100644
--- a/gtk2_ardour/keyeditor.cc
+++ b/gtk2_ardour/keyeditor.cc
@@ -20,6 +20,9 @@ using namespace Gdk;
KeyEditor::KeyEditor ()
: ArdourDialog (_("Keybinding Editor"), false)
{
+ can_bind = false;
+ last_state = 0;
+
model = TreeStore::create(columns);
view.set_model (model);
@@ -37,7 +40,9 @@ KeyEditor::KeyEditor ()
scroller.add (view);
scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
+
get_vbox()->pack_start (scroller);
+ get_vbox()->set_border_width (12);
scroller.show ();
view.show ();
@@ -63,13 +68,29 @@ KeyEditor::action_selected ()
}
bool
+KeyEditor::on_key_press_event (GdkEventKey* ev)
+{
+ can_bind = true;
+ last_state = ev->state;
+ return false;
+}
+
+bool
KeyEditor::on_key_release_event (GdkEventKey* ev)
{
+ if (!can_bind || ev->state != last_state) {
+ return false;
+ }
+
TreeModel::iterator i = view.get_selection()->get_selected();
if (i != model->children().end()) {
string path = (*i)[columns.path];
+ if (!(*i)[columns.bindable]) {
+ goto out;
+ }
+
bool result = AccelMap::change_entry (path,
ev->keyval,
(ModifierType) ev->state,
@@ -91,6 +112,8 @@ KeyEditor::on_key_release_event (GdkEventKey* ev)
}
+ out:
+ can_bind = false;
return true;
}
@@ -136,6 +159,7 @@ KeyEditor::populate ()
nodes[parts[1]] = rowp;
parent = *(rowp);
parent[columns.action] = parts[1];
+ parent[columns.bindable] = false;
row = *(model->append (parent.children()));
@@ -149,6 +173,7 @@ KeyEditor::populate ()
row[columns.action] = (*l);
row[columns.path] = (*p);
+ row[columns.bindable] = true;
if (*k == ActionManager::unbound_string) {
row[columns.binding] = string();