summaryrefslogtreecommitdiff
path: root/gtk2_ardour/processor_box.cc
diff options
context:
space:
mode:
authorJohannes Mueller <github@johannes-mueller.org>2017-08-15 21:05:13 +0200
committerRobin Gareus <robin@gareus.org>2018-06-20 21:06:16 +0200
commitf647ac7daea3d5ae8bfb2903bff67fffcc6197df (patch)
treec7c5b384cfb43b2b8cc52947c279717af6d5821d /gtk2_ardour/processor_box.cc
parent869d48c9a68331547c1f84e3dac12ea444d46376 (diff)
Allow plugin inline displays to shrink
Plugin inline displays were forbidden to shrink as this might cause a deadlock when the shrinkage causes the scrollbar to disappear. display shrink → scrollbar unneeded → scrollbar disappears → more horizontal space -> display grows -> scrollbar appears → less horizontal space -> display shrink and so forth This was formerly avoided by not allowing display shrinkage. The solution proposed here sets the maximum height of the display to the current height, if a scrollbar is present during resizing and has not been present during the last resizing. So if this scrollbar disappears (after resizing it might no longer be needed), the display would have the possibility to grow, but it does not grow vertically as the maximum height is limited to the current height.
Diffstat (limited to 'gtk2_ardour/processor_box.cc')
-rw-r--r--gtk2_ardour/processor_box.cc9
1 files changed, 7 insertions, 2 deletions
diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc
index 504ad10f32..9beb733617 100644
--- a/gtk2_ardour/processor_box.cc
+++ b/gtk2_ardour/processor_box.cc
@@ -1568,6 +1568,7 @@ ProcessorEntry::PluginInlineDisplay::PluginInlineDisplay (ProcessorEntry& e, boo
: PluginDisplay (p, max_height)
, _entry (e)
, _scroll (false)
+ , _given_max_height (max_height)
{
std::string postfix = string_compose(_("\n%1+double-click to toggle inline-display"), Keyboard::tertiary_modifier_name ());
@@ -1639,11 +1640,15 @@ ProcessorEntry::PluginInlineDisplay::update_height_alloc (uint32_t inline_height
}
if (shm != _cur_height) {
- if (_scroll == sc || _cur_height < shm) {
- queue_resize ();
+ queue_resize ();
+ if (!_scroll && sc) {
+ _max_height = shm;
+ } else {
+ _max_height = _given_max_height;
}
_cur_height = shm;
}
+
_scroll = sc;
}