From 77ebb8371dc992dac6d52a9ff345d3087499a4ba Mon Sep 17 00:00:00 2001 From: YPozdnyakov Date: Thu, 12 Feb 2015 19:59:01 +0200 Subject: [PATCH] [Summary]: Dialog logic restriction. Provided correct behaviour when user opens some dialogs and then calls File->Close (on mac). All earlier opened dialogs will be closed and just SessionDialog will be shown. --- gtk2_ardour/about_dialog.cc | 2 ++ gtk2_ardour/ardour_ui.cc | 35 +++++++++++++++++++++++++++++- gtk2_ardour/ardour_ui.h | 2 ++ gtk2_ardour/editor.cc | 4 ++++ gtk2_ardour/editor_export_audio.cc | 10 +++++++++ gtk2_ardour/editor_ops.cc | 3 +++ gtk2_ardour/public_editor.h | 19 ++++++++++++++++ 7 files changed, 74 insertions(+), 1 deletion(-) diff --git a/gtk2_ardour/about_dialog.cc b/gtk2_ardour/about_dialog.cc index ab0f58dd8b..81a5e38128 100644 --- a/gtk2_ardour/about_dialog.cc +++ b/gtk2_ardour/about_dialog.cc @@ -24,6 +24,7 @@ #include "i18n.h" #include "about_dialog.h" #include "license_dialog.h" +#include "public_editor.h" using namespace Gtk; using namespace Gdk; @@ -88,6 +89,7 @@ About::on_esc_pressed () void About::about_button_pressed (WavesButton*) { + MainMenuDisabled m; LicenseDialog license_dialog; license_dialog.set_position (WIN_POS_CENTER); license_dialog.run (); diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index c5c4b97c52..d8f0b2b29d 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -3713,8 +3713,13 @@ ARDOUR_UI::add_route (Gtk::Window* float_window) _add_tracks_dialog->setup(_add_tracks_dialog->max_tracks_count () - existing_tracks_count); _add_tracks_dialog->set_position (WIN_POS_CENTER); - int r = _add_tracks_dialog->run(); + + // disable Main menu + MainMenuDisabled m; // HOT FIX. (REWORK IT) + + int r = _add_tracks_dialog->run(); + switch (r) { case WavesDialog::RESPONSE_DEFAULT: break; @@ -4915,4 +4920,32 @@ void ARDOUR_UI::hide_application () { Application::instance ()-> hide (); +} + +void +ARDOUR_UI::on_editor_hiding () +{ + // here we should close + // all opening graphical elements + + tracks_control_panel->deiconify (); + tracks_control_panel->hide (); + + key_editor->deiconify (); + key_editor->hide (); + + big_clock_window->deiconify (); + big_clock_window->hide (); + + session_lock_dialog->deiconify ();// HOT FIX. (REWORK IT) + session_lock_dialog->hide ();// HOT FIX. (REWORK IT) + + about->deiconify (); + about->hide (); + + track_color_dialog->deiconify (); + track_color_dialog->hide (); + + marker_inspector_dialog->deiconify (); + marker_inspector_dialog->hide (); } \ No newline at end of file diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index ffe2b46c13..a0faa8d2cf 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -163,6 +163,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr void show_about (); void hide_about (); void open_media_folder (); + + void on_editor_hiding (); void load_from_application_api (const std::string& path); void finish(); diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 062c3f3e9c..3ede43dda0 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -521,6 +521,7 @@ Editor::Editor () _summary = new EditorSummary (this); + this->signal_hide().connect ( sigc::mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::on_editor_hiding)); selection->TimeChanged.connect (sigc::mem_fun(*this, &Editor::time_selection_changed)); selection->TracksChanged.connect (sigc::mem_fun(*this, &Editor::track_selection_changed)); @@ -3336,6 +3337,9 @@ Editor::duplicate_range (bool with_dialog) return; } + // disable Main menu + MainMenuDisabled m; // HOT FIX. (REWORK IT) + if (with_dialog) { WavesNumericEditDialog dialog(""); diff --git a/gtk2_ardour/editor_export_audio.cc b/gtk2_ardour/editor_export_audio.cc index e950084150..0f823564f1 100644 --- a/gtk2_ardour/editor_export_audio.cc +++ b/gtk2_ardour/editor_export_audio.cc @@ -42,6 +42,7 @@ #include "ardour/source_factory.h" #include "ardour/types.h" +#include "actions.h" #include "audio_region_view.h" #include "audio_time_axis.h" #include "editor.h" @@ -63,6 +64,9 @@ using namespace Gtk; void Editor::export_audio () { + // disable Main menu + MainMenuDisabled m; // HOT FIX. (REWORK IT) + if (Config->get_output_auto_connect() & AutoConnectPhysical) { WavesMessageDialog read_only_session_dialog ("", "Not available in Multi Out mode.\nPlease switch to Stereo Out mode.", @@ -79,6 +83,9 @@ Editor::export_audio () void Editor::stem_export () { + // disable Main menu + MainMenuDisabled m; // HOT FIX. (REWORK IT) + WavesStemExportDialog dialog (*this); dialog.set_session (_session); dialog.run(); @@ -124,6 +131,9 @@ Editor::export_region () boost::shared_ptr audio_region = boost::dynamic_pointer_cast(r); boost::shared_ptr midi_region = boost::dynamic_pointer_cast(r); + // disable Main menu + MainMenuDisabled m; // HOT FIX. (REWORK IT) + if (audio_region) { RouteTimeAxisView & rtv (dynamic_cast (selection->regions.front()->get_time_axis_view())); diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index eb0a01d131..eb8a179efe 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -2568,6 +2568,9 @@ Editor::rename_region () WavesEditDialog waves_edit_dialog ("", "Rename region"); waves_edit_dialog.set_entry_text (rs.front()->region()->name()); + // disable Main menu + MainMenuDisabled m; // HOT FIX. (REWORK IT) + int const ret = waves_edit_dialog.run (); if (ret != WavesDialog::RESPONSE_DEFAULT) { diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h index 70a6159a5f..785a0d1f70 100644 --- a/gtk2_ardour/public_editor.h +++ b/gtk2_ardour/public_editor.h @@ -43,6 +43,7 @@ #include "canvas/fwd.h" #include "gtkmm2ext/visibility_tracker.h" +#include "actions.h" #include "editing.h" #include "selection.h" @@ -440,4 +441,22 @@ class DisplaySuspender { } }; +class MainMenuDisabled { +public: + MainMenuDisabled() { + #ifdef __APPLE__ + /* The global menu bar continues to be accessible to applications + with modal dialogs on mac, which means that we need to desensitize + all items in the menu bar. + */ + ActionManager::disable_all_actions (); // HOT FIX. (REWORK IT) + #endif + } + ~MainMenuDisabled () { + #ifdef __APPLE__ + ActionManager::pop_action_state (); // HOT FIX. (REWORK IT) + #endif + } +}; + #endif // __gtk_ardour_public_editor_h__