summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_ops.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2008-02-23 14:13:25 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2008-02-23 14:13:25 +0000
commit770c39dce16598835ae4c9e970c11fb6edfde348 (patch)
tree13aa3fbe60d405db018ee070cf1f5a54c28edc89 /gtk2_ardour/editor_ops.cc
parent33690d3e728d50335d0a0720020e15db29aa3815 (diff)
fix up meter thread management when JACK client starts/stops/is halted ; put focus in plugin search entry when plugin selector is shown ; add WINDOWS_KEY option to gtk2_ardour/SConscript, controlling what X modifier is used for LEVEL4 modifier/bindings ; fix up Keyboard object to properly support LEVEL4 bindings ; fix Playlist::partition_internal() to avoid acting on regions that should not be operated on given the range provided ; fix up more stuff relating to get_regions_for(), including cut/delete ops on edit range vs. regions
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@3115 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_ops.cc')
-rw-r--r--gtk2_ardour/editor_ops.cc38
1 files changed, 25 insertions, 13 deletions
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index 2843a9d794..951c40cd3c 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -2273,14 +2273,20 @@ Editor::play_from_edit_point_and_return ()
nframes64_t start_frame;
nframes64_t return_frame;
+ start_frame = get_preferred_edit_position (true);
+
+ if (session->transport_rolling()) {
+ /* go to edit point and stop */
+ session->request_locate (start_frame, false);
+ return;
+ }
+
/* don't reset the return frame if its already set */
if ((return_frame = session->requested_return_frame()) < 0) {
return_frame = session->audible_frame();
}
- start_frame = get_preferred_edit_position (true);
-
if (start_frame >= 0) {
session->request_roll_at_and_return (start_frame, return_frame);
}
@@ -2675,8 +2681,8 @@ Editor::separate_regions_between (const TimeSelection& ts)
}
if (tmptracks.empty()) {
- /* no regions selected: use all tracks */
- tmptracks = track_views;
+ /* no regions selected: do nothing */
+ return;
}
} else {
@@ -3084,7 +3090,7 @@ Editor::align (RegionPoint what)
{
RegionSelection rs;
- get_regions_for_action (rs, false);
+ get_regions_for_action (rs);
nframes64_t where = get_preferred_edit_position();
if (!rs.empty()) {
@@ -3103,7 +3109,7 @@ Editor::align_relative (RegionPoint what)
nframes64_t where = get_preferred_edit_position();
RegionSelection rs;
- get_regions_for_action (rs, false);
+ get_regions_for_action (rs);
if (!rs.empty()) {
align_selection_relative (what, where, rs);
@@ -3588,7 +3594,11 @@ Editor::cut_copy (CutCopyOp op)
RegionSelection rs;
- get_regions_for_action (rs);
+ /* we only want to cut regions if some are selected */
+
+ if (!selection->regions.empty()) {
+ get_regions_for_action (rs);
+ }
switch (current_mouse_mode()) {
case MouseObject:
@@ -3597,7 +3607,7 @@ Editor::cut_copy (CutCopyOp op)
begin_reversible_command (opname + _(" objects"));
if (!rs.empty()) {
- cut_copy_regions (op);
+ cut_copy_regions (op, rs);
if (op == Cut) {
selection->clear_regions ();
@@ -3677,7 +3687,7 @@ struct PlaylistMapping {
};
void
-Editor::cut_copy_regions (CutCopyOp op)
+Editor::cut_copy_regions (CutCopyOp op, RegionSelection& rs)
{
/* we can't use a std::map here because the ordering is important, and we can't trivially sort
a map when we want ordered access to both elements. i think.
@@ -3692,9 +3702,6 @@ Editor::cut_copy_regions (CutCopyOp op)
/* get ordering correct before we cut/copy */
- RegionSelection rs;
-
- get_regions_for_action (rs);
rs.sort_by_position_and_track ();
for (RegionSelection::iterator x = rs.begin(); x != rs.end(); ++x) {
@@ -3817,9 +3824,14 @@ void
Editor::cut_copy_ranges (CutCopyOp op)
{
TrackSelection* ts;
+ TrackSelection entered;
if (selection->tracks.empty()) {
- ts = &track_views;
+ if (!entered_track) {
+ return;
+ }
+ entered.push_back (entered_track);
+ ts = &entered;
} else {
ts = &selection->tracks;
}