diff options
author | David Robillard <d@drobilla.net> | 2014-11-15 03:48:40 -0500 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2014-11-15 03:48:40 -0500 |
commit | 163dc756e5d1f10481d3eefa245df061f4cf6be8 (patch) | |
tree | daebb51b5fb189fd88720d5bf707c991afa22b5e /gtk2_ardour/automation_region_view.cc | |
parent | de1ebcc1490e083c18af7c6cccaf956a30038161 (diff) |
Fix selection in automation regions (MIDI controllers).
We shouldn't have to manually drive the drag here, but if the ARV handler
returns false, the event doesn't propagate correctly for some reason and the
drag is not driven by the Editor.
Diffstat (limited to 'gtk2_ardour/automation_region_view.cc')
-rw-r--r-- | gtk2_ardour/automation_region_view.cc | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/gtk2_ardour/automation_region_view.cc b/gtk2_ardour/automation_region_view.cc index 0415e8c55e..46c93244e3 100644 --- a/gtk2_ardour/automation_region_view.cc +++ b/gtk2_ardour/automation_region_view.cc @@ -103,11 +103,20 @@ AutomationRegionView::canvas_group_event (GdkEvent* ev) /* XXX: icky dcast to Editor */ e.drags()->set (new EditorRubberbandSelectDrag (dynamic_cast<Editor*> (&e), group), ev); + e.drags()->start_grab (ev); + return true; - } else if (ev->type == GDK_BUTTON_RELEASE) { + } else if (ev->type == GDK_MOTION_NOTIFY && e.drags()->active()) { + /* we probably shouldn't have to handle this here, but... */ + e.drags()->motion_handler(ev, false); + return true; - if (trackview.editor().drags()->active() && trackview.editor().drags()->end_grab (ev)) { + } else if (ev->type == GDK_BUTTON_RELEASE) { + if (e.drags()->end_grab (ev)) { return true; + } else if (e.current_mouse_mode() != Editing::MouseObject && + e.current_mouse_mode() == Editing::MouseDraw) { + return false; } double x = ev->button.x; @@ -122,7 +131,8 @@ AutomationRegionView::canvas_group_event (GdkEvent* ev) /* guard points only if primary modifier is used */ bool with_guard_points = Gtkmm2ext::Keyboard::modifier_state_equals (ev->button.state, Gtkmm2ext::Keyboard::PrimaryModifier); - add_automation_event (ev, trackview.editor().pixel_to_sample (x) - _region->position() + _region->start(), y, with_guard_points); + add_automation_event (ev, e.pixel_to_sample (x) - _region->position() + _region->start(), y, with_guard_points); + return true; } return false; |