X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fplugin_pin_dialog.cc;h=11efbcfb9065d7d323826c80fa54b32e2b7dc69e;hb=1e97c09eed646adb030fd198d9ced9530bae20cb;hp=8d0e713a05fdea9714605fc22c13d01356faf184;hpb=b302f702655919b5e96c33128484c4726613bc8f;p=ardour.git diff --git a/gtk2_ardour/plugin_pin_dialog.cc b/gtk2_ardour/plugin_pin_dialog.cc index 8d0e713a05..11efbcfb90 100644 --- a/gtk2_ardour/plugin_pin_dialog.cc +++ b/gtk2_ardour/plugin_pin_dialog.cc @@ -1970,10 +1970,18 @@ PluginPinDialog::PluginPinDialog (boost::shared_ptr pi) PluginPinDialog::PluginPinDialog (boost::shared_ptr r) : ArdourWindow (string_compose (_("Pin Configuration: %1"), r->name ())) , _route (r) + , _height_mapped (false) { vbox = manage (new VBox ()); - add (*vbox); + vbox->signal_size_allocate().connect (sigc::mem_fun (*this, &PluginPinDialog::map_height)); + scroller = manage (new ScrolledWindow); + scroller->set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC); + scroller->set_shadow_type (Gtk::SHADOW_NONE); + scroller->show (); vbox->show (); + scroller->add (*vbox); + add (*scroller); + _route->foreach_processor (sigc::mem_fun (*this, &PluginPinDialog::add_processor)); @@ -1994,15 +2002,26 @@ PluginPinDialog::set_session (ARDOUR::Session *s) } } +void +PluginPinDialog::map_height (Gtk::Allocation&) +{ + if (!_height_mapped) { + scroller->set_size_request (-1, std::min (600, 2 + vbox->get_height())); + _height_mapped = true; + } +} + void PluginPinDialog::route_processors_changed (ARDOUR::RouteProcessorChange) { ppw.clear (); - remove (); + _height_mapped = false; + scroller->remove (); vbox = manage (new VBox ()); - add (*vbox); - vbox->show (); + vbox->signal_size_allocate().connect (sigc::mem_fun (*this, &PluginPinDialog::map_height)); + scroller->add (*vbox); _route->foreach_processor (sigc::mem_fun (*this, &PluginPinDialog::add_processor)); + vbox->show (); } void @@ -2034,7 +2053,7 @@ PluginPinDialog::add_processor (boost::weak_ptr p) hbox->pack_start (*manage (new HSeparator ())); hbox->pack_start (*manage (new Label (proc->display_name ()))); hbox->pack_start (*manage (new HSeparator ())); - vbox->pack_start (*hbox); + vbox->pack_start (*hbox, false, false); hbox->show_all (); } }