diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc index 1ce6a24323..f4e1d1577a 100644 --- a/gtk2_ardour/ardour_ui_dialogs.cc +++ b/gtk2_ardour/ardour_ui_dialogs.cc @@ -718,6 +718,8 @@ ARDOUR_UI::tabs_switch (GtkNotebookPage*, guint page) trigger_page_visibility_button.set_active_state (Gtkmm2ext::Off); } + EditingContext::switch_editing_context (editor); + } else if (mixer && (page == (guint) _tabs.page_num (mixer->contents()))) { if (editor && (editor->tabbed() || editor->tabbed_by_default())) { diff --git a/gtk2_ardour/editing_context.cc b/gtk2_ardour/editing_context.cc index d6b9a61cc6..5f9e8aba23 100644 --- a/gtk2_ardour/editing_context.cc +++ b/gtk2_ardour/editing_context.cc @@ -65,9 +65,9 @@ sigc::signal EditingContext::DropDownKeys; Gtkmm2ext::Bindings* EditingContext::button_bindings = nullptr; Glib::RefPtr EditingContext::_midi_actions; Glib::RefPtr EditingContext::_common_actions; -std::stack EditingContext::ec_stack; std::vector EditingContext::grid_type_strings; MouseCursors* EditingContext::_cursors = nullptr; +EditingContext* EditingContext::_current_editing_context = nullptr; static const gchar *_grid_type_strings[] = { N_("No Grid"), @@ -1982,28 +1982,14 @@ EditingContext::apply_midi_note_edit_op (MidiOperator& op, const RegionSelection EditingContext* EditingContext::current_editing_context() { - if (!ec_stack.empty()) { - return ec_stack.top (); - } - - return nullptr; + return _current_editing_context; } void -EditingContext::push_editing_context (EditingContext* ec) +EditingContext::switch_editing_context (EditingContext* ec) { assert (ec); - ec_stack.push (ec); - ec->history_changed (); -} - -void -EditingContext::pop_editing_context () -{ - ec_stack.pop (); - if (!ec_stack.empty()) { - ec_stack.top()->history_changed (); - } + _current_editing_context = ec; } double diff --git a/gtk2_ardour/editing_context.h b/gtk2_ardour/editing_context.h index 2b5a86e16f..3e8bf7930f 100644 --- a/gtk2_ardour/editing_context.h +++ b/gtk2_ardour/editing_context.h @@ -33,8 +33,6 @@ #ifndef __ardour_midi_editing_context_h__ #define __ardour_midi_editing_context_h__ -#include - #include "pbd/signals.h" #include "temporal/timeline.h" @@ -401,6 +399,9 @@ class EditingContext : public ARDOUR::SessionHandlePtr, public AxisViewProvider virtual void history_changed() = 0; static void update_undo_redo_actions (PBD::UndoHistory const &); + static EditingContext* current_editing_context(); + static void switch_editing_context(EditingContext*); + protected: std::string _name; @@ -573,10 +574,6 @@ class EditingContext : public ARDOUR::SessionHandlePtr, public AxisViewProvider void transform_regions (const RegionSelection& rs); void transpose_regions (const RegionSelection& rs); - static EditingContext* current_editing_context(); - static void push_editing_context (EditingContext*); - static void pop_editing_context (); - /** the adjustment that controls the overall editing vertical scroll position */ friend class EditorSummary; Gtk::Adjustment vertical_adjustment; @@ -670,8 +667,7 @@ class EditingContext : public ARDOUR::SessionHandlePtr, public AxisViewProvider static void toggle_reg_sens (Glib::RefPtr group, char const* name, char const* label, sigc::slot slot); static void radio_reg_sens (Glib::RefPtr action_group, Gtk::RadioAction::Group& radio_group, char const* name, char const* label, sigc::slot slot); - private: - static std::stack ec_stack; + static EditingContext* _current_editing_context; }; diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index b5927a18dd..7702c10f0b 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -787,7 +787,7 @@ Editor::Editor () setup_fade_images (); - push_editing_context (this); + switch_editing_context (this); } Editor::~Editor() diff --git a/gtk2_ardour/midi_cue_editor.cc b/gtk2_ardour/midi_cue_editor.cc index 0707699184..e5608dff05 100644 --- a/gtk2_ardour/midi_cue_editor.cc +++ b/gtk2_ardour/midi_cue_editor.cc @@ -305,14 +305,13 @@ MidiCueEditor::canvas_enter_leave (GdkEventCrossing* ev) if (ev->detail != GDK_NOTIFY_INFERIOR) { _canvas_viewport->canvas()->grab_focus (); ActionManager::set_sensitive (_midi_actions, true); - EditingContext::push_editing_context (this); + EditingContext::switch_editing_context (this); } break; case GDK_LEAVE_NOTIFY: if (ev->detail != GDK_NOTIFY_INFERIOR) { ActionManager::set_sensitive (_midi_actions, false); ARDOUR_UI::instance()->reset_focus (_canvas_viewport); - EditingContext::pop_editing_context (); } default: break;