From 1e2bdeb0144df4dd724d018036d78482f3f45386 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Tue, 20 Dec 2016 12:20:15 +0100 Subject: [PATCH] Limit max height of PinDialog -- fixes #7177 --- gtk2_ardour/plugin_pin_dialog.cc | 29 ++++++++++++++++++++++++----- gtk2_ardour/plugin_pin_dialog.h | 3 +++ 2 files changed, 27 insertions(+), 5 deletions(-) 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 (); } } diff --git a/gtk2_ardour/plugin_pin_dialog.h b/gtk2_ardour/plugin_pin_dialog.h index 4028607ab6..33047c6ee7 100644 --- a/gtk2_ardour/plugin_pin_dialog.h +++ b/gtk2_ardour/plugin_pin_dialog.h @@ -227,6 +227,7 @@ public: void set_session (ARDOUR::Session *); private: + Gtk::ScrolledWindow* scroller; Gtk::VBox *vbox; typedef boost::shared_ptr PluginPinWidgetPtr; typedef std::vector PluginPinWidgetList; @@ -234,10 +235,12 @@ private: void route_going_away (); void route_processors_changed (ARDOUR::RouteProcessorChange); void add_processor (boost::weak_ptr); + void map_height (Gtk::Allocation&); boost::shared_ptr _route; PluginPinWidgetList ppw; PBD::ScopedConnectionList _route_connections; + bool _height_mapped; }; #endif