summaryrefslogtreecommitdiff
path: root/gtk2_ardour/automation_region_view.cc
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2014-11-15 03:48:40 -0500
committerDavid Robillard <d@drobilla.net>2014-11-15 03:48:40 -0500
commit163dc756e5d1f10481d3eefa245df061f4cf6be8 (patch)
treedaebb51b5fb189fd88720d5bf707c991afa22b5e /gtk2_ardour/automation_region_view.cc
parentde1ebcc1490e083c18af7c6cccaf956a30038161 (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.cc16
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;