From: Paul Davis Date: Thu, 16 Feb 2017 09:29:04 +0000 (+0100) Subject: improve logic for region action sensitivity settings X-Git-Tag: 5.7~145 X-Git-Url: https://main.carlh.net/gitweb/?a=commitdiff_plain;h=4d05af8e7148dc14178e5fc7c4b980247ccc8f40;p=ardour.git improve logic for region action sensitivity settings --- diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc index c4657ed917..063cf3998e 100644 --- a/gtk2_ardour/editor_selection.cc +++ b/gtk2_ardour/editor_selection.cc @@ -1100,6 +1100,9 @@ Editor::sensitize_the_right_region_actions (bool because_canvas_crossing) bool have_edit_point = false; RegionSelection rs; + // std::cerr << "STRRA: crossing ? " << because_canvas_crossing << " within ? " << within_track_canvas + // << std::endl; + if (!selection->regions.empty()) { have_selection = true; rs = selection->regions; @@ -1112,27 +1115,39 @@ Editor::sensitize_the_right_region_actions (bool because_canvas_crossing) if (rs.empty() && !selection->tracks.empty()) { - /* no selected regions, but some selected tracks. what we do - * here depends on the context in which we are called + /* no selected regions, but some selected tracks. */ - if (because_canvas_crossing) { - if (!within_track_canvas && _edit_point == EditAtMouse) { + if (_edit_point == EditAtMouse) { + if (!within_track_canvas) { + /* pointer is not in canvas, so edit point is meaningless */ have_edit_point = false; } else { - RegionSelection at_edit_point; - framepos_t const where = get_preferred_edit_position (Editing::EDIT_IGNORE_NONE, false, !within_track_canvas); - get_regions_at (at_edit_point, where, selection->tracks); - if (!at_edit_point.empty()) { - have_edit_point = true; - } - if (rs.empty()) { - rs.insert (rs.end(), at_edit_point.begin(), at_edit_point.end()); - } + /* inside canvas. we don't know where the edit + point will be when an action is invoked, but + assume it could intersect with a region. + */ + have_edit_point = true; + } + } else { + RegionSelection at_edit_point; + framepos_t const where = get_preferred_edit_position (Editing::EDIT_IGNORE_NONE, false, !within_track_canvas); + get_regions_at (at_edit_point, where, selection->tracks); + if (!at_edit_point.empty()) { + have_edit_point = true; + } + if (rs.empty()) { + rs.insert (rs.end(), at_edit_point.begin(), at_edit_point.end()); } } } + //std::cerr << "\tfinal have selection: " << have_selection + // << " have entered " << have_entered + // << " have edit point " << have_edit_point + // << " EP = " << enum_2_string (_edit_point) + // << std::endl; + typedef std::map RegionActionMap; _ignore_region_action = true;