View Issue Details

IDProjectCategoryView StatusLast Update
0003298ardourbugspublic2011-03-05 00:05
Reporterlincoln Assigned To 
PrioritynormalSeveritytweakReproducibilityalways
Status feedbackResolutionopen 
Target Version3.X 
Summary0003298: Automatic range selection in object mode
DescriptionWhen in the combined object/range mode is selected, clicking on a region in the lower half of the region (i.e. in object mode) automatically creates a range on the whole region. This should not be happening since should be in object mode.
TagsNo tags attached.

Activities

cth103

2010-07-04 23:48

administrator   ~0008388

Last edited: 2010-07-05 00:32

Will have to check with the PT gang on whether this was intended.

lincoln

2010-07-05 00:12

reporter   ~0008389

I have a simple fix for this but putting a patch out is difficult since there are pending patches for region transient stuff still to be applied.

If it is intended then PT is weird and they should fix this too :-)

paul

2010-11-05 13:46

administrator   ~0009357

lincoln - i believe your region transient stuff is now in svn. can we see your patch?

2010-11-06 15:49

 

auto-range-creating-on-selection-fix.patch (5,057 bytes)   
Index: gtk2_ardour/editor_mouse.cc
===================================================================
--- gtk2_ardour/editor_mouse.cc	(revision 7976)
+++ gtk2_ardour/editor_mouse.cc	(working copy)
@@ -363,7 +363,7 @@
 
 	instant_save ();
         
-        if (!internal_editing()) {
+	if (!internal_editing()) {
                 if (mouse_mode != MouseRange && _join_object_range_state == JOIN_OBJECT_RANGE_NONE) {
                         
                         /* in all modes except range and joined object/range, hide the range selection,
@@ -373,6 +373,7 @@
                         for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
                                 (*i)->set_should_show_selection (true);
                         }
+                        
                         for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
                                 (*i)->hide_selection ();
                         }
@@ -484,7 +485,7 @@
 	if (event->type == GDK_BUTTON_PRESS || event->type == GDK_BUTTON_RELEASE) {
 
 		if ((event->button.state & Keyboard::RelevantModifierKeyMask) && event->button.button != 1) {
-
+  
 			/* almost no selection action on modified button-2 or button-3 events */
 
 			if (item_type != RegionItem && event->button.button != 2) {
@@ -500,33 +501,32 @@
 
 	switch (item_type) {
 	case RegionItem:
+
 		if (mouse_mode != MouseRange || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) {
 			set_selected_regionview_from_click (press, op, true);
 		} else if (event->type == GDK_BUTTON_PRESS) {
 			selection->clear_tracks ();
 			set_selected_track_as_side_effect (op, true);
 		}
-		if (_join_object_range_state == JOIN_OBJECT_RANGE_OBJECT && !selection->regions.empty()) {
-			clicked_selection = select_range_around_region (selection->regions.front());
-		}
 		break;
 
  	case RegionViewNameHighlight:
  	case RegionViewName:
         case LeftFrameHandle:
         case RightFrameHandle:
-		if (mouse_mode != MouseRange || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) {
-			set_selected_regionview_from_click (press, op, true);
+
+		if (mouse_mode != MouseRange || internal_editing() || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) {		
+			set_selected_regionview_from_click (press, op, true);	
 		} else if (event->type == GDK_BUTTON_PRESS) {
-			set_selected_track_as_side_effect (op);
+			set_selected_track_as_side_effect (op);	
 		}
 		break;
 
-
 	case FadeInHandleItem:
 	case FadeInItem:
 	case FadeOutHandleItem:
 	case FadeOutItem:
+
 		if (mouse_mode != MouseRange || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) {
 			set_selected_regionview_from_click (press, op, true);
 		} else if (event->type == GDK_BUTTON_PRESS) {
@@ -535,6 +535,7 @@
 		break;
 
 	case ControlPointItem:
+
 		set_selected_track_as_side_effect (op, true);
 		if (mouse_mode != MouseRange || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) {
 			set_selected_control_point_from_click (op, false);
@@ -818,10 +819,6 @@
 					add_region_drag (item, event, clicked_regionview);
 				}
 				
-				if (_join_object_range_state == JOIN_OBJECT_RANGE_OBJECT && !selection->regions.empty()) {
-					_drags->add (new SelectionDrag (this, clicked_axisview->get_selection_rect (clicked_selection)->rect, SelectionDrag::SelectionMove));
-				}
-
 				_drags->start_grab (event);
 				break;
 
@@ -882,30 +879,6 @@
 						if (atv) {
 							_drags->set (new AutomationRangeDrag (this, atv->base_item(), selection->time), event, up_down_cursor);
 						}
-
-						/* if we're over a track and a region, and in the `object' part of a region,
-						   put a selection around the region and drag both
-						*/
-						RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (tvp.first);
-						if (rtv && _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) {
-							boost::shared_ptr<Track> t = boost::dynamic_pointer_cast<Track> (rtv->route ());
-							if (t) {
-								boost::shared_ptr<Playlist> pl = t->playlist ();
-								if (pl) {
-									
-									boost::shared_ptr<Region> r = pl->top_region_at (event_frame (event));
-									if (r) {
-										RegionView* rv = rtv->view()->find_view (r);
-										clicked_selection = select_range_around_region (rv);
-										_drags->add (new SelectionDrag (this, item, SelectionDrag::SelectionMove));
-										list<RegionView*> rvs;
-										rvs.push_back (rv);
-										_drags->add (new RegionMoveDrag (this, item, rv, rvs, false, false));
-										_drags->start_grab (event);
-									}
-								}
-							}
-						}
 					}
 				}
 				break;
@@ -2609,7 +2582,7 @@
 	double speed = rtv->track()->speed();
 
         playlist->clear_changes ();
-	boost::shared_ptr<Region> new_region (RegionFactory::create (rv->region()));
+	boost::shared_ptr<Region> new_region (RegionFactory::create (rv->region(), true));
         playlist->add_region (new_region, (framepos_t) (pos * speed));
 	_session->add_command (new StatefulDiffCommand (playlist));
 

cth103

2010-11-06 16:30

administrator   ~0009368

I'm reasonably sure that there's a reason for this behaviour, but a PT person would have to confirm.

paul

2011-02-09 15:04

administrator   ~0010064

this is intended behaviour, and seems entirely logical to me. i don't really see what the issue is ...

lincoln

2011-02-13 00:48

reporter   ~0010080

The behaviour seems to have changed slightly. Clicking in the lower half are range covering the region appears momentarily. If you move the region, the range becomes active at the end of the drag.

All this seem very wrong and unexpected to me. If I am in a non range mode then why should ranges be appearing when doing object mode work? Also since the automatic range is spanning the region exactly, what practical use does it have?

paul

2011-02-13 14:11

administrator   ~0010082

You began this bug report with the phrase "When in the combined object/range mode is selected ..."

That's precisely the explanation of this behaviour. You are *not* in "non-range" mode, you're in a combined object/range mode in which the upper and lower half of the region have different semantics for mouse operations. This is a very powerful editing mode that a lot of PT "power users" complained that Ardour/Mixbus did not have.

cth103

2011-03-05 00:05

administrator   ~0010284

Carrying this discussion onwards post 3.0 ...

Issue History

Date Modified Username Field Change
2010-07-01 07:36 lincoln New Issue
2010-07-04 23:48 cth103 cost => 0.00
2010-07-04 23:48 cth103 Note Added: 0008388
2010-07-04 23:48 cth103 Target Version => 3.0-beta1
2010-07-05 00:12 lincoln Note Added: 0008389
2010-07-05 00:32 cth103 Note Edited: 0008388
2010-11-05 13:46 paul Note Added: 0009357
2010-11-06 15:49 lincoln File Added: auto-range-creating-on-selection-fix.patch
2010-11-06 16:30 cth103 Note Added: 0009368
2011-02-09 15:04 paul Note Added: 0010064
2011-02-12 19:59 paul Status new => feedback
2011-02-13 00:48 lincoln Note Added: 0010080
2011-02-13 14:11 paul Note Added: 0010082
2011-03-05 00:05 cth103 Note Added: 0010284
2011-03-05 00:05 cth103 Target Version 3.0-beta1 => 3.X