13
0

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
This commit is contained in:
Carl Hetherington 2012-05-31 14:39:48 +00:00
parent 5c298dfef3
commit fc77252d51
5 changed files with 38 additions and 7 deletions

View File

@ -281,6 +281,7 @@ Editor::Editor ()
, _region_selection_change_updates_region_list (true)
, _following_mixer_selection (false)
, _control_point_toggled_on_press (false)
{
constructed = false;

View File

@ -2092,6 +2092,9 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void toggle_sound_midi_notes ();
/** Flag for a bit of a hack wrt control point selection; see set_selected_control_point_from_click */
bool _control_point_toggled_on_press;
friend class Drag;
friend class RegionDrag;
friend class RegionMoveDrag;

View File

@ -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 */

View File

@ -861,6 +861,12 @@ Selection::selected (RegionView* rv)
return find (regions.begin(), regions.end(), rv) != regions.end();
}
bool
Selection::selected (ControlPoint* cp)
{
return find (points.begin(), points.end(), cp) != points.end();
}
bool
Selection::empty (bool internal_selection)
{

View File

@ -114,6 +114,7 @@ class Selection : public sigc::trackable, public PBD::ScopedConnectionList
bool selected (TimeAxisView*);
bool selected (RegionView*);
bool selected (Marker*);
bool selected (ControlPoint*);
void set (std::list<Selectable*> const &);
void add (std::list<Selectable*> const &);