X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fardour_dialog.cc;h=fe3a1cc80f6a107cdc0f96d0441e277a6fee3112;hb=30553a267551405712f3b2a3ef1f612630be6477;hp=89b9914120147b4586ca137ad0d73df5ad17c3b7;hpb=207fa93cf948cc2b9d92e50ef15707611a858d6a;p=ardour.git diff --git a/gtk2_ardour/ardour_dialog.cc b/gtk2_ardour/ardour_dialog.cc index 89b9914120..fe3a1cc80f 100644 --- a/gtk2_ardour/ardour_dialog.cc +++ b/gtk2_ardour/ardour_dialog.cc @@ -1,21 +1,24 @@ /* - Copyright (C) 2002 Paul Davis - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -*/ + * Copyright (C) 2005-2006 Taybin Rutkin + * Copyright (C) 2005-2016 Paul Davis + * Copyright (C) 2008-2011 David Robillard + * Copyright (C) 2014-2018 Robin Gareus + * Copyright (C) 2015 Nick Mainsbridge + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ #include #include @@ -37,7 +40,7 @@ using namespace ARDOUR_UI_UTILS; ArdourDialog::ArdourDialog (string title, bool modal, bool use_seperator) : Dialog (title, modal, use_seperator) , proxy (0) - , _splash_pushed (false) + , _splash_pushed (false) { init (); set_position (Gtk::WIN_POS_MOUSE); @@ -45,7 +48,8 @@ ArdourDialog::ArdourDialog (string title, bool modal, bool use_seperator) ArdourDialog::ArdourDialog (Gtk::Window& parent, string title, bool modal, bool use_seperator) : Dialog (title, parent, modal, use_seperator) - , _splash_pushed (false) + , proxy (0) + , _splash_pushed (false) { init (); set_position (Gtk::WIN_POS_CENTER_ON_PARENT); @@ -53,15 +57,43 @@ ArdourDialog::ArdourDialog (Gtk::Window& parent, string title, bool modal, bool ArdourDialog::~ArdourDialog () { - if (_splash_pushed) { - Splash* spl = Splash::instance(); - - if (spl) { - spl->pop_front(); - } - } - Keyboard::the_keyboard().focus_out_window (0, this); - WM::Manager::instance().remove (proxy); + pop_splash (); + Keyboard::the_keyboard().focus_out_window (0, this); + WM::Manager::instance().remove (proxy); + proxy->explicit_delete (); +} + +void +ArdourDialog::on_response (int response_id) +{ + pop_splash (); + hide (); + ARDOUR::GUIIdle (); + Gtk::Dialog::on_response (response_id); +} + +void +ArdourDialog::close_self () +{ + /* Don't call Idle, don't pop splash. + * This is used at exit and session-close and invoked + * via close_all_dialogs. + */ + hide (); + Gtk::Dialog::on_response (RESPONSE_CANCEL); +} + +void +ArdourDialog::pop_splash () +{ + if (_splash_pushed) { + Splash* spl = Splash::instance(); + + if (spl) { + spl->pop_front(); + } + _splash_pushed = false; + } } bool @@ -94,11 +126,13 @@ ArdourDialog::on_show () // never allow the splash screen to obscure any dialog - Splash* spl = Splash::instance(); + if (Splash::exists()) { + Splash* spl = Splash::instance(); - if (spl && spl->is_visible()) { - spl->pop_back_for (*this); - _splash_pushed = true; + if (spl->is_visible()) { + spl->pop_back_for (*this); + _splash_pushed = true; + } } } @@ -122,7 +156,7 @@ ArdourDialog::init () set_transient_for (*parent); } - ARDOUR_UI::CloseAllDialogs.connect (sigc::bind (sigc::mem_fun (*this, &ArdourDialog::response), RESPONSE_CANCEL)); + ARDOUR_UI::CloseAllDialogs.connect (sigc::mem_fun (*this, &ArdourDialog::close_self)); /* send a RESPONSE_CANCEL to self */ proxy = new WM::ProxyTemporary (get_title(), this); WM::Manager::instance().register_window (proxy);