summaryrefslogtreecommitdiff
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
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.
-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;