diff --git a/gtk2_ardour/ardour_dialog.cc b/gtk2_ardour/ardour_dialog.cc index 87b48d986a..cd7d0fbd55 100644 --- a/gtk2_ardour/ardour_dialog.cc +++ b/gtk2_ardour/ardour_dialog.cc @@ -23,6 +23,7 @@ #include #include "ardour_dialog.h" +#include "ardour_ui.h" #include "keyboard.h" #include "splash.h" @@ -30,8 +31,6 @@ using namespace std; using namespace Gtk; using namespace Gtkmm2ext; -sigc::signal ArdourDialog::CloseAllDialogs; - ArdourDialog::ArdourDialog (string title, bool modal, bool use_seperator) : Dialog (title, modal, use_seperator) , _splash_pushed (false) @@ -98,9 +97,7 @@ ArdourDialog::on_show () void ArdourDialog::init () { - set_type_hint(Gdk::WINDOW_TYPE_HINT_DIALOG); set_border_width (10); - CloseAllDialogs.connect ( - sigc::bind (sigc::mem_fun (*this, &ArdourDialog::response), - RESPONSE_CANCEL)); + // set_type_hint (Gdk::WINDOW_TYPE_HINT_DIALOG); + ARDOUR_UI::CloseAllDialogs.connect (sigc::bind (sigc::mem_fun (*this, &ArdourDialog::response), RESPONSE_CANCEL)); } diff --git a/gtk2_ardour/ardour_dialog.h b/gtk2_ardour/ardour_dialog.h index 1008f63000..041b62e1cd 100644 --- a/gtk2_ardour/ardour_dialog.h +++ b/gtk2_ardour/ardour_dialog.h @@ -43,8 +43,6 @@ class ArdourDialog : public Gtk::Dialog, public ARDOUR::SessionHandlePtr void on_unmap (); void on_show (); - static void close_all_dialogs () { CloseAllDialogs(); } - private: bool _splash_pushed; void init (); diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index c138fb1567..a5c8cee44c 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -136,6 +136,7 @@ sigc::signal ARDOUR_UI::Blink; sigc::signal ARDOUR_UI::RapidScreenUpdate; sigc::signal ARDOUR_UI::SuperRapidScreenUpdate; sigc::signal ARDOUR_UI::Clock; +sigc::signal ARDOUR_UI::CloseAllDialogs; ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir) @@ -886,7 +887,7 @@ If you still wish to quit, please use the\n\n\ _session = 0; } - ArdourDialog::close_all_dialogs (); + close_all_dialogs (); engine->stop (true); quit (); } diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index a326669ec3..a695f7b8bd 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -189,6 +189,9 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr */ static sigc::signal Clock; + static void close_all_dialogs () { CloseAllDialogs(); } + static sigc::signal CloseAllDialogs; + XMLNode* editor_settings() const; XMLNode* mixer_settings () const; XMLNode* keyboard_settings () const; diff --git a/gtk2_ardour/ardour_window.cc b/gtk2_ardour/ardour_window.cc index 6330ecd6ac..f16032dc74 100644 --- a/gtk2_ardour/ardour_window.cc +++ b/gtk2_ardour/ardour_window.cc @@ -23,6 +23,7 @@ #include #include "ardour_window.h" +#include "ardour_ui.h" #include "keyboard.h" using namespace std; @@ -83,8 +84,12 @@ ArdourWindow::init () (a) utility & dialog windows are considered to be part of the same level (b) they will float above normal windows without any particular effort + (c) present()-ing them will make a utility float over a dialog or + vice versa. */ set_type_hint (Gdk::WINDOW_TYPE_HINT_UTILITY); + + ARDOUR_UI::CloseAllDialogs.connect (sigc::mem_fun (*this, &ArdourWindow::hide)); }