From 94af225eaf3661008e0e08b9aa55f056fe8c8503 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Wed, 18 Nov 2020 16:26:36 +0100 Subject: [PATCH] Fix window parent when using different workspaces This affects only windows opened from the mixer window, in case the mixer is detached and on a different workspace (desktop). Window::init (and Dialog::init) set transient parent early on, and it defaults to the main window (with toolbar). It needs to be unset before presenting the window, in order to show the window on the same workspace as the eventual transient parent. This follows 6dc9134 and f3fbf58. --- gtk2_ardour/loudness_dialog.cc | 3 +++ gtk2_ardour/plugin_pin_dialog.cc | 1 + gtk2_ardour/plugin_ui.cc | 1 + gtk2_ardour/processor_box.cc | 6 +++--- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/gtk2_ardour/loudness_dialog.cc b/gtk2_ardour/loudness_dialog.cc index 0a131522b9..6b8793c3a3 100644 --- a/gtk2_ardour/loudness_dialog.cc +++ b/gtk2_ardour/loudness_dialog.cc @@ -110,6 +110,9 @@ LoudnessDialog::LoudnessDialog (Session* s, AudioRange const& ar, bool as) , _ignore_preset (false) , _ignore_change (false) { + /* Dialog can be displayed from the mixer, override global transient_parent */ + unset_transient_for (); + /* query initial gain */ _gain_out = accurate_coefficient_to_dB (_session->master_volume()->get_value()); diff --git a/gtk2_ardour/plugin_pin_dialog.cc b/gtk2_ardour/plugin_pin_dialog.cc index 2fb8d63dfe..6cd353f5dd 100644 --- a/gtk2_ardour/plugin_pin_dialog.cc +++ b/gtk2_ardour/plugin_pin_dialog.cc @@ -2004,6 +2004,7 @@ PluginPinDialog::PluginPinDialog (boost::shared_ptr pi) { ppw.push_back (PluginPinWidgetPtr(new PluginPinWidget (pi))); add (*ppw.back()); + unset_transient_for (); } diff --git a/gtk2_ardour/plugin_ui.cc b/gtk2_ardour/plugin_ui.cc index 8132db5341..45081c93b2 100644 --- a/gtk2_ardour/plugin_ui.cc +++ b/gtk2_ardour/plugin_ui.cc @@ -189,6 +189,7 @@ PluginUIWindow::PluginUIWindow ( set_border_width (0); set_default_size (w, h); set_resizable (_pluginui->resizable()); + unset_transient_for (); } PluginUIWindow::~PluginUIWindow () diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc index d963cf48d7..10efac724d 100644 --- a/gtk2_ardour/processor_box.cc +++ b/gtk2_ardour/processor_box.cc @@ -4279,11 +4279,12 @@ ProcessorBox::manage_pins (boost::shared_ptr processor) PluginPinWindowProxy* proxy = processor->pinmgr_proxy (); if (proxy) { proxy->get (true); - proxy->present(); Gtk::Window* tlw = dynamic_cast (get_toplevel ()); assert (tlw); proxy->get ()->set_transient_for (*tlw); + + proxy->present(); } } @@ -4568,12 +4569,11 @@ ProcessorWindowProxy::show_the_right_window (bool show_not_toggle) if (_window && fully_visible () && show_not_toggle) { return; } - toggle (); if (_window) { - /* clear any transients if window is toggled externally (ctrl surfaces) */ _window->unset_transient_for (); } + toggle (); }