Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
assert (tact);
- if (tact->get_active()) {
- m = MouseObject; //Smart mode turned to ON, force editing to Object mode
- }
-
set_mouse_mode(m, true); //call this so the button styles can get updated
}
selection->ClearMidiNoteSelection (); /* EMIT SIGNAL */
break;
case MouseObject:
- selection->clear_objects ();
selection->clear_time ();
selection->clear_tracks ();
selection->ClearMidiNoteSelection (); /* EMIT SIGNAL */
break;
case MouseDraw:
- /* Clear top level objects, but not time or tracks, since that
- woulddestroy the range selection rectangle, which we need to stick
+ /* Clear regions, but not time or tracks, since that
+ would destroy the range selection rectangle, which we need to stick
around for AutomationRangeDrag. */
- selection->clear_objects ();
+ selection->clear_regions ();
+ selection->clear_playlists ();
+ break;
+ case MouseContent:
+ /* This handles internal edit.
+ Clear everything except points and notes.
+ */
+ selection->clear_regions();
+ selection->clear_lines();
+ selection->clear_playlists ();
+
+ selection->clear_time ();
+ selection->clear_tracks ();
+ break;
+
+ case MouseTimeFX:
+ /* We probably want to keep region selection */
+ selection->clear_points ();
+ selection->clear_lines();
+ selection->clear_playlists ();
+
+ selection->clear_time ();
+ selection->clear_tracks ();
+ break;
+
+ case MouseAudition:
+ /*Don't lose lines or points if no action in this mode */
+ selection->clear_regions ();
+ selection->clear_playlists ();
+ selection->clear_time ();
+ selection->clear_tracks ();
break;
+
default:
- /* Clear everything. */
- selection->clear_objects ();
+ /*Clear everything */
+ selection->clear_objects();
selection->clear_time ();
selection->clear_tracks ();
break;
}
} else {
if (eff_mouse_mode != MouseRange) {
- _mouse_changed_selection = set_selected_regionview_from_click (press, op);
+ _mouse_changed_selection |= set_selected_regionview_from_click (press, op);
}
}
break;
case StartCrossFadeItem:
case EndCrossFadeItem:
if (get_smart_mode() || eff_mouse_mode != MouseRange) {
- _mouse_changed_selection = set_selected_regionview_from_click (press, op);
+ _mouse_changed_selection |= set_selected_regionview_from_click (press, op);
} else if (event->type == GDK_BUTTON_PRESS) {
set_selected_track_as_side_effect (op);
}
case ControlPointItem:
set_selected_track_as_side_effect (op);
if (eff_mouse_mode != MouseRange) {
- _mouse_changed_selection = set_selected_control_point_from_click (press, op);
+ _mouse_changed_selection |= set_selected_control_point_from_click (press, op);
}
break;
if (event->button.button == 3) {
selection->clear_tracks ();
set_selected_track_as_side_effect (op);
- _mouse_changed_selection = true;
+
+ /* We won't get a release.*/
+ begin_reversible_selection_op (X_("Button 3 Menu Select"));
+ commit_reversible_selection_op ();
}
break;
}
if ((!press) && _mouse_changed_selection) {
- begin_reversible_selection_op (_("Button Selection"));
+ begin_reversible_selection_op (X_("Button Selection"));
commit_reversible_selection_op ();
_mouse_changed_selection = false;
}
break;
case StreamItem:
- if (dynamic_cast<MidiTimeAxisView*> (clicked_axisview)) {
- _drags->set (new RegionCreateDrag (this, item, clicked_axisview), event);
- return true;
- }
+ //in the past, we created a new midi region here, but perhaps that is best left to the Draw mode
break;
case AutomationTrackItem:
return true;
}
- /* see if we're finishing a drag */
+ bool were_dragging = false;
- bool were_dragging = false;
- if (_drags->active ()) {
- bool const r = _drags->end_grab (event);
- if (r) {
- /* grab dragged, so do nothing else */
- return true;
- }
+ if (!Keyboard::is_context_menu_event (&event->button)) {
- were_dragging = true;
- }
+ /* see if we're finishing a drag */
+
+ if (_drags->active ()) {
+ bool const r = _drags->end_grab (event);
+ if (r) {
+ /* grab dragged, so do nothing else */
+ return true;
+ }
+
+ were_dragging = true;
+ }
- update_region_layering_order_editor ();
+ update_region_layering_order_editor ();
+ }
/* edit events get handled here */
default:
break;
}
- } else {
+ } else if (_session) {
/* make sure we stop */
_session->request_transport_speed (0.0);
}
case SelectionItem:
break;
+ case WaveItem:
+ {
+ if (entered_regionview) {
+ entered_regionview->entered();
+ }
+ }
+ break;
+
default:
break;
}
}
ControlPointDialog d (p);
- ensure_float (d);
if (d.run () != RESPONSE_ACCEPT) {
return;
EditNoteDialog* d = new EditNoteDialog (mrv, s);
d->show_all ();
- ensure_float (*d);
d->signal_response().connect (sigc::bind (sigc::mem_fun (*this, &Editor::note_edit_done), d));
}