diff options
-rw-r--r-- | gtk2_ardour/ardour.menus | 6 | ||||
-rw-r--r-- | gtk2_ardour/keyeditor.cc | 24 | ||||
-rw-r--r-- | gtk2_ardour/keyeditor.h | 6 | ||||
-rw-r--r-- | gtk2_ardour/processor_box.cc | 1 |
4 files changed, 36 insertions, 1 deletions
diff --git a/gtk2_ardour/ardour.menus b/gtk2_ardour/ardour.menus index 4c8c3d6df9..a24041374b 100644 --- a/gtk2_ardour/ardour.menus +++ b/gtk2_ardour/ardour.menus @@ -298,6 +298,10 @@ <menuitem action='UseSoftwareMonitoring'/> <menuitem action='UseExternalMonitoring'/> </menu> + <menu action='Plugins'> + <menuitem action='DisableAllPlugins'/> + <menuitem action='ABAllPlugins'/> + </menu> <menu action='Metering'> <menu action='MeteringFallOffRate'> <menuitem action='MeterFalloffOff'/> @@ -368,7 +372,7 @@ </menu> </menubar> - <popup name='redirectmenu'> + <popup name='processormenu'> <menuitem action='newplugin'/> <menuitem action='newinsert'/> <menuitem action='newsend'/> diff --git a/gtk2_ardour/keyeditor.cc b/gtk2_ardour/keyeditor.cc index 07aad652af..c9deebbb6a 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,28 @@ KeyEditor::action_selected () } bool +KeyEditor::on_key_press_event (GdkEventKey* ev) +{ + can_bind = true; + last_state = ev->state; +} + +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 +111,8 @@ KeyEditor::on_key_release_event (GdkEventKey* ev) } + out: + can_bind = false; return true; } @@ -136,6 +158,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 +172,7 @@ KeyEditor::populate () row[columns.action] = (*l); row[columns.path] = (*p); + row[columns.bindable] = true; if (*k == ActionManager::unbound_string) { row[columns.binding] = string(); diff --git a/gtk2_ardour/keyeditor.h b/gtk2_ardour/keyeditor.h index b200adabf4..9fd129ca31 100644 --- a/gtk2_ardour/keyeditor.h +++ b/gtk2_ardour/keyeditor.h @@ -18,6 +18,7 @@ class KeyEditor : public ArdourDialog protected: void on_show (); void on_unmap (); + bool on_key_press_event (GdkEventKey*); bool on_key_release_event (GdkEventKey*); private: @@ -26,10 +27,12 @@ class KeyEditor : public ArdourDialog add (action); add (binding); add (path); + add (bindable); } Gtk::TreeModelColumn<Glib::ustring> action; Gtk::TreeModelColumn<std::string> binding; Gtk::TreeModelColumn<std::string> path; + Gtk::TreeModelColumn<bool> bindable; }; Gtk::ScrolledWindow scroller; @@ -37,6 +40,9 @@ class KeyEditor : public ArdourDialog Glib::RefPtr<Gtk::TreeStore> model; KeyEditorColumns columns; + bool can_bind; + guint last_state; + void action_selected (); void populate (); }; diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc index 12e30e59c0..e5ccc827f3 100644 --- a/gtk2_ardour/processor_box.cc +++ b/gtk2_ardour/processor_box.cc @@ -120,6 +120,7 @@ ProcessorBox::ProcessorBox (Placement pcmnt, Session& sess, boost::shared_ptr<Ro processor_display.set_size_request (-1, 40); processor_display.get_column(0)->set_sizing(TREE_VIEW_COLUMN_FIXED); processor_display.get_column(0)->set_fixed_width(48); + processor_display.set_enable_search (false); processor_display.add_object_drag (columns.processor.index(), "redirects"); processor_display.signal_object_drop.connect (mem_fun (*this, &ProcessorBox::object_drop)); |