summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2014-12-16 23:02:28 -0500
committerDavid Robillard <d@drobilla.net>2014-12-18 20:23:34 -0500
commit66870ddf09001000025e60011ec1874241b0fef5 (patch)
tree28715e649f1ecd210d79a89da8a9c649ec4d110e /gtk2_ardour
parent60313085209a6213a7388e0b1070c10e83fe2a10 (diff)
Restore snap when switching to/from internal.
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/editor.cc31
-rw-r--r--gtk2_ardour/editor.h5
-rw-r--r--gtk2_ardour/editor_mouse.cc14
3 files changed, 49 insertions, 1 deletions
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index 7f3cd2216e..f544993e03 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -670,6 +670,11 @@ Editor::Editor ()
set_snap_mode (_snap_mode);
previous_mouse_mode = MouseObject;
set_mouse_mode (MouseObject, true);
+ pre_internal_mouse_mode = MouseObject;
+ pre_internal_snap_type = _snap_type;
+ pre_internal_snap_mode = _snap_mode;
+ internal_snap_type = _snap_type;
+ internal_snap_mode = _snap_mode;
set_edit_point_preference (EditAtMouse, true);
_playlist_selector = new PlaylistSelector();
@@ -2087,6 +2092,12 @@ Editor::set_snap_mode (SnapMode mode)
{
string str = snap_mode_strings[(int)mode];
+ if (internal_editing()) {
+ internal_snap_mode = mode;
+ } else {
+ pre_internal_snap_mode = mode;
+ }
+
_snap_mode = mode;
if (str != snap_mode_selector.get_text ()) {
@@ -2238,6 +2249,22 @@ Editor::set_state (const XMLNode& node, int /*version*/)
snap_mode_selection_done((SnapMode) string_2_enum (prop->value(), _snap_mode));
}
+ if ((prop = node.property ("internal-snap-to"))) {
+ internal_snap_type = (SnapType) string_2_enum (prop->value(), internal_snap_type);
+ }
+
+ if ((prop = node.property ("internal-snap-mode"))) {
+ internal_snap_mode = (SnapMode) string_2_enum (prop->value(), internal_snap_mode);
+ }
+
+ if ((prop = node.property ("pre-internal-snap-to"))) {
+ pre_internal_snap_type = (SnapType) string_2_enum (prop->value(), pre_internal_snap_type);
+ }
+
+ if ((prop = node.property ("pre-internal-snap-mode"))) {
+ pre_internal_snap_mode = (SnapMode) string_2_enum (prop->value(), pre_internal_snap_mode);
+ }
+
if ((prop = node.property ("mouse-mode"))) {
MouseMode m = str2mousemode(prop->value());
set_mouse_mode (m, true);
@@ -2429,6 +2456,10 @@ Editor::get_state ()
node->add_property ("zoom", buf);
node->add_property ("snap-to", enum_2_string (_snap_type));
node->add_property ("snap-mode", enum_2_string (_snap_mode));
+ node->add_property ("internal-snap-to", enum_2_string (internal_snap_type));
+ node->add_property ("internal-snap-mode", enum_2_string (internal_snap_mode));
+ node->add_property ("pre-internal-snap-to", enum_2_string (pre_internal_snap_type));
+ node->add_property ("pre-internal-snap-mode", enum_2_string (pre_internal_snap_mode));
node->add_property ("edit-point", enum_2_string (_edit_point));
snprintf (buf, sizeof(buf), "%d", _visible_track_count);
node->add_property ("visible-track-count", buf);
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index b37ee700d4..7d8ab924c9 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -545,6 +545,11 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
Editing::MouseMode mouse_mode;
Editing::MouseMode previous_mouse_mode;
+ Editing::MouseMode pre_internal_mouse_mode;
+ Editing::SnapType pre_internal_snap_type;
+ Editing::SnapMode pre_internal_snap_mode;
+ Editing::SnapType internal_snap_type;
+ Editing::SnapMode internal_snap_mode;
Editing::MouseMode effective_mouse_mode () const;
enum JoinObjectRangeState {
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc
index 99f0775106..7a264e35de 100644
--- a/gtk2_ardour/editor_mouse.cc
+++ b/gtk2_ardour/editor_mouse.cc
@@ -293,16 +293,28 @@ Editor::mouse_mode_toggled (MouseMode m)
}
if (mouse_mode == m) {
- /* switch "in to" the same mode, act like a toggle and switch back to previous mode */
+ /* switch to the same mode, act like a toggle and switch back to previous mode */
Glib::RefPtr<Action> pact = get_mouse_mode_action(previous_mouse_mode);
Glib::RefPtr<ToggleAction> ptact = Glib::RefPtr<ToggleAction>::cast_dynamic(pact);
ptact->set_active(true);
return;
}
+ const bool was_internal = internal_editing();
+
previous_mouse_mode = mouse_mode;
mouse_mode = m;
+ if (!was_internal && internal_editing()) {
+ /* switched to internal, switch to internal snap settings */
+ set_snap_to(internal_snap_type);
+ set_snap_mode(internal_snap_mode);
+ } else if (was_internal && !internal_editing()) {
+ /* switched out of internal, switch to non-internal snap settings */
+ set_snap_to(pre_internal_snap_type);
+ set_snap_mode(pre_internal_snap_mode);
+ }
+
instant_save ();
/* this should generate a new enter event which will