X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fardour_dialog.cc;h=3690ee023bbe545fa7cb59016f478f0507ad5adc;hb=d176cbc80476cdc8ca082631efc171ea39116d63;hp=030be0486e4bf3e11a66a0c9917e1dca55cffc29;hpb=fb45ffea71d345ced0cfbb12b9dcd89ecb1e8dbf;p=ardour.git diff --git a/gtk2_ardour/ardour_dialog.cc b/gtk2_ardour/ardour_dialog.cc index 030be0486e..3690ee023b 100644 --- a/gtk2_ardour/ardour_dialog.cc +++ b/gtk2_ardour/ardour_dialog.cc @@ -18,110 +18,114 @@ */ #include +#include #include #include "ardour_dialog.h" -#include "keyboard.h" #include "ardour_ui.h" +#include "keyboard.h" +#include "splash.h" +#include "utils.h" +#include "window_manager.h" + +using namespace std; +using namespace Gtk; +using namespace Gtkmm2ext; + +ArdourDialog::ArdourDialog (string title, bool modal, bool use_seperator) + : Dialog (title, modal, use_seperator) + , proxy (0) + , _splash_pushed (false) +{ + init (); + set_position (Gtk::WIN_POS_MOUSE); +} - -ArdourDialog::ArdourDialog (string name) - : Dialog (name) +ArdourDialog::ArdourDialog (Gtk::Window& parent, string title, bool modal, bool use_seperator) + : Dialog (title, parent, modal, use_seperator) + , _splash_pushed (false) { - session = 0; - kbd_input = false; - running = false; - _run_status = 0; - _within_hiding = false; - hide_on_stop = true; + init (); + set_position (Gtk::WIN_POS_CENTER_ON_PARENT); } ArdourDialog::~ArdourDialog () { + if (_splash_pushed) { + Splash* spl = Splash::instance(); + + if (spl) { + spl->pop_front(); + } + } + WM::Manager::instance().remove (proxy); +} + +bool +ArdourDialog::on_key_press_event (GdkEventKey* ev) +{ + return relay_key_press (ev, this); } bool ArdourDialog::on_enter_notify_event (GdkEventCrossing *ev) { - if (ev->detail != GDK_NOTIFY_INFERIOR) { - // GTK2FIX - //Keyboard::the_keyboard().set_current_dialog (this); - } - return false; + Keyboard::the_keyboard().enter_window (ev, this); + return Dialog::on_enter_notify_event (ev); } bool ArdourDialog::on_leave_notify_event (GdkEventCrossing *ev) { - if (ev->detail != GDK_NOTIFY_INFERIOR) { - // GTK2FIX - //Keyboard::the_keyboard().set_current_dialog (0); - } - return false; + Keyboard::the_keyboard().leave_window (ev, this); + return Dialog::on_leave_notify_event (ev); } void ArdourDialog::on_unmap () { - _within_hiding = true; - _within_hiding = false; + Keyboard::the_keyboard().leave_window (0, this); Dialog::on_unmap (); } void -ArdourDialog::set_hide_on_stop (bool yn) +ArdourDialog::on_show () { - hide_on_stop = yn; -} + Dialog::on_show (); -void -ArdourDialog::stop (int rr) -{ - if (hide_on_stop) { - hide_all (); - } + // never allow the splash screen to obscure any dialog - if (running) { - if (rr == 0) { - response (GTK_RESPONSE_ACCEPT); - } else { - response (GTK_RESPONSE_CANCEL); - } - running = false; + Splash* spl = Splash::instance(); + + if (spl && spl->is_visible()) { + spl->pop_back_for (*this); + _splash_pushed = true; } } -void -ArdourDialog::run () +bool +ArdourDialog::on_delete_event (GdkEventAny*) { - show_all (); - - running = true; - switch (Dialog::run ()) { - case GTK_RESPONSE_ACCEPT: - _run_status = 0; - break; - - case GTK_RESPONSE_DELETE_EVENT: - _run_status = -1; - break; - - default: - _run_status = -1; - } - - hide_all (); + hide (); + return false; } void -ArdourDialog::set_keyboard_input (bool yn) +ArdourDialog::init () { - kbd_input = yn; -} + set_border_width (10); -int -ArdourDialog::run_status () -{ - return _run_status; + set_type_hint (Gdk::WINDOW_TYPE_HINT_DIALOG); + + Gtk::Window* parent = WM::Manager::instance().transient_parent(); + + if (parent) { + set_transient_for (*parent); + } + + ARDOUR_UI::CloseAllDialogs.connect (sigc::bind (sigc::mem_fun (*this, &ArdourDialog::response), RESPONSE_CANCEL)); + + proxy = new WM::ProxyTemporary (get_title(), this); + WM::Manager::instance().register_window (proxy); }