+ case StreamItem:
+ if (internal_editing()) {
+ _drags->set (new RegionCreateDrag (this, item, clicked_axisview), event);
+ return true;
+ } else {
+ _drags->set (new RubberbandSelectDrag (this, item), event);
+ }
+ break;
+
+ case AutomationTrackItem:
+ /* rubberband drag to select automation points */
+ _drags->set (new RubberbandSelectDrag (this, item), event);
+ break;
+
+ case SelectionItem:
+ {
+ if (join_object_range_button.get_active()) {
+ /* we're in "smart" joined mode, and we've clicked on a Selection */
+ double const y = event->button.y + vertical_adjustment.get_value() - canvas_timebars_vsize;
+ pair<TimeAxisView*, int> tvp = trackview_by_y_position (y);
+ if (tvp.first) {
+ /* if we're over an automation track, start a drag of its data */
+ AutomationTimeAxisView* atv = dynamic_cast<AutomationTimeAxisView*> (tvp.first);
+ if (atv) {
+ _drags->set (new AutomationRangeDrag (this, atv->base_item(), selection->time), event);
+ }
+
+ /* 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;
+ }
+
+#ifdef WITH_CMT
+ case ImageFrameHandleStartItem:
+ imageframe_start_handle_op(item, event) ;
+ return(true) ;
+ break ;
+ case ImageFrameHandleEndItem:
+ imageframe_end_handle_op(item, event) ;
+ return(true) ;
+ break ;
+ case MarkerViewHandleStartItem:
+ markerview_item_start_handle_op(item, event) ;
+ return(true) ;
+ break ;
+ case MarkerViewHandleEndItem:
+ markerview_item_end_handle_op(item, event) ;
+ return(true) ;
+ break ;
+ case MarkerViewItem:
+ start_markerview_grab(item, event) ;
+ break ;
+ case ImageFrameItem:
+ start_imageframe_grab(item, event) ;
+ break ;
+#endif
+
+ case MarkerBarItem:
+