mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-06 06:44:57 +01:00
fix management of undo/redo and _current_editing_context
We cannot switch on a leave event from a widget, because the undo/redo menu items must remain labelled until we are actually in a new editing context. So switch when we switch tabs or when we edit the (MIDI) cue editor
This commit is contained in:
parent
e591bc91f9
commit
8523598664
5 changed files with 12 additions and 29 deletions
|
|
@ -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())) {
|
||||
|
|
|
|||
|
|
@ -65,9 +65,9 @@ sigc::signal<void> EditingContext::DropDownKeys;
|
|||
Gtkmm2ext::Bindings* EditingContext::button_bindings = nullptr;
|
||||
Glib::RefPtr<Gtk::ActionGroup> EditingContext::_midi_actions;
|
||||
Glib::RefPtr<Gtk::ActionGroup> EditingContext::_common_actions;
|
||||
std::stack<EditingContext*> EditingContext::ec_stack;
|
||||
std::vector<std::string> 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
|
||||
|
|
|
|||
|
|
@ -33,8 +33,6 @@
|
|||
#ifndef __ardour_midi_editing_context_h__
|
||||
#define __ardour_midi_editing_context_h__
|
||||
|
||||
#include <stack>
|
||||
|
||||
#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<Gtk::ActionGroup> group, char const* name, char const* label, sigc::slot<void> slot);
|
||||
static void radio_reg_sens (Glib::RefPtr<Gtk::ActionGroup> action_group, Gtk::RadioAction::Group& radio_group, char const* name, char const* label, sigc::slot<void> slot);
|
||||
|
||||
private:
|
||||
static std::stack<EditingContext*> ec_stack;
|
||||
static EditingContext* _current_editing_context;
|
||||
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -787,7 +787,7 @@ Editor::Editor ()
|
|||
|
||||
setup_fade_images ();
|
||||
|
||||
push_editing_context (this);
|
||||
switch_editing_context (this);
|
||||
}
|
||||
|
||||
Editor::~Editor()
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue