diff options
author | Carl Hetherington <carl@carlh.net> | 2012-05-31 14:39:48 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2012-05-31 14:39:48 +0000 |
commit | fc77252d5186360c6a00f0f098f43253cd26e4ba (patch) | |
tree | 43f75e98ba28a02484b1ec9b92ee4274a46ce424 /gtk2_ardour/editor_selection.cc | |
parent | 5c298dfef3c10583b92993e3eb16301439b78884 (diff) |
Slightly unpleasant hack to stop control points being
unselected when you ctrl-drag a selected point in order to
do a push drag.
git-svn-id: svn://localhost/ardour2/branches/3.0@12502 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_selection.cc')
-rw-r--r-- | gtk2_ardour/editor_selection.cc | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc index 6e12a03856..eb67fb3631 100644 --- a/gtk2_ardour/editor_selection.cc +++ b/gtk2_ardour/editor_selection.cc @@ -318,19 +318,39 @@ Editor::set_selected_control_point_from_click (bool press, Selection::Operation return false; } - if (!press) { - return true; - } - switch (op) { case Selection::Set: - selection->set (clicked_control_point); + if (press) { + selection->set (clicked_control_point); + } break; case Selection::Add: - selection->add (clicked_control_point); + if (press) { + selection->add (clicked_control_point); + } break; case Selection::Toggle: - selection->toggle (clicked_control_point); + /* This is a bit of a hack; if we Primary-Click-Drag a control + point (for push drag) we want the point we clicked on to be + selected, otherwise we end up confusingly dragging an + unselected point. So here we ensure that the point is selected + after the press, and if we subsequently get a release (meaning no + drag occurred) we set things up so that the toggle has happened. + */ + if (press && !selection->selected (clicked_control_point)) { + /* This is the button press, and the control point is not selected; make it so, + in case this press leads to a drag. Also note that having done this, we don't + need to toggle again on release. + */ + selection->toggle (clicked_control_point); + _control_point_toggled_on_press = true; + } else if (!press && !_control_point_toggled_on_press) { + /* This is the release, and the point wasn't toggled on the press, so do it now */ + selection->toggle (clicked_control_point); + } else { + /* Reset our flag */ + _control_point_toggled_on_press = false; + } break; case Selection::Extend: /* XXX */ |