diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc index 555d273d74..9b4ebf0c4b 100644 --- a/gtk2_ardour/processor_box.cc +++ b/gtk2_ardour/processor_box.cc @@ -103,6 +103,7 @@ static const uint32_t midi_port_color = 0x960909FF; //Red ProcessorEntry::ProcessorEntry (ProcessorBox* parent, boost::shared_ptr p, Width w) : _button (ArdourButton::led_default_elements) , _position (PreFader) + , _selectable(true) , _parent (parent) , _processor (p) , _width (w) @@ -1743,6 +1744,7 @@ ProcessorBox::add_processor_to_display (boost::weak_ptr p) } boost::shared_ptr plugin_insert = boost::dynamic_pointer_cast (processor); + ProcessorEntry* e = 0; if (plugin_insert) { e = new PluginInsertProcessorEntry (this, plugin_insert, _width); @@ -1750,6 +1752,13 @@ ProcessorBox::add_processor_to_display (boost::weak_ptr p) e = new ProcessorEntry (this, processor, _width); } + boost::shared_ptr send = boost::dynamic_pointer_cast (processor); + boost::shared_ptr ext = boost::dynamic_pointer_cast (processor); + + //faders and meters are not deletable, copy/paste-able, so they shouldn't be selectable + if (!send && !plugin_insert && !ext) + e->set_selectable(false); + /* Set up this entry's state from the GUIObjectState */ XMLNode* proc = entry_gui_object_state (e); if (proc) { diff --git a/gtk2_ardour/processor_box.h b/gtk2_ardour/processor_box.h index 021e557d36..713c7d9ac8 100644 --- a/gtk2_ardour/processor_box.h +++ b/gtk2_ardour/processor_box.h @@ -119,6 +119,9 @@ public: std::string drag_text () const; void set_visual_state (Gtkmm2ext::VisualState, bool); + bool is_selectable() const {return _selectable;} + void set_selectable(bool s) { _selectable = s; } + enum Position { PreFader, Fader, @@ -149,6 +152,7 @@ protected: virtual void setup_visuals (); private: + bool _selectable; void led_clicked(); void processor_active_changed (); void processor_property_changed (const PBD::PropertyChange&); diff --git a/libs/gtkmm2ext/gtkmm2ext/dndvbox.h b/libs/gtkmm2ext/gtkmm2ext/dndvbox.h index 157cd59bef..9ea93262fe 100644 --- a/libs/gtkmm2ext/gtkmm2ext/dndvbox.h +++ b/libs/gtkmm2ext/gtkmm2ext/dndvbox.h @@ -41,6 +41,9 @@ public: /** Set the child's visual state */ virtual void set_visual_state (VisualState, bool onoff) = 0; + + /** @return True if the child can be selected in the list ( if you don't want it to copy/paste/drag then turn this off ) */ + virtual bool is_selectable () const = 0; }; /** A VBox whose contents can be dragged and dropped */ @@ -565,6 +568,8 @@ private: void add_to_selection (T* child) { + if ( !child->is_selectable() ) + return; _selection.push_back (child); setup_child_state (child); }