From a65cd2a1b9d23ab368c310edf1ee75fb8295e718 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 5 Dec 2014 16:54:29 -0500 Subject: [PATCH] Make scroll work on MIDI regions when internal. For some reason, grabbing the magic keyboard focus makes scroll stop working regardless of what MRV::canvas_group_event() returns. I can't figure out any reason to grab the keyboard in this case anyway, so I just removed it. Also simlify MRV event handling code in general. --- gtk2_ardour/automation_region_view.cc | 9 +++- gtk2_ardour/editor_mouse.cc | 2 - gtk2_ardour/midi_region_view.cc | 78 ++++++++------------------- 3 files changed, 30 insertions(+), 59 deletions(-) diff --git a/gtk2_ardour/automation_region_view.cc b/gtk2_ardour/automation_region_view.cc index d44615d79a..871e83eec8 100644 --- a/gtk2_ardour/automation_region_view.cc +++ b/gtk2_ardour/automation_region_view.cc @@ -103,6 +103,11 @@ AutomationRegionView::canvas_group_event (GdkEvent* ev) return false; } + if (!trackview.editor().internal_editing()) { + // not in internal edit mode, so just act like a normal region + return RegionView::canvas_group_event (ev); + } + PublicEditor& e = trackview.editor (); if (ev->type == GDK_BUTTON_PRESS && e.current_mouse_mode() == Editing::MouseObject) { @@ -121,7 +126,7 @@ AutomationRegionView::canvas_group_event (GdkEvent* ev) if (e.drags()->end_grab (ev)) { return true; } else if (e.current_mouse_mode() != Editing::MouseDraw) { - return false; + return RegionView::canvas_group_event (ev); } double x = ev->button.x; @@ -140,7 +145,7 @@ AutomationRegionView::canvas_group_event (GdkEvent* ev) return true; } - return false; + return RegionView::canvas_group_event (ev); } /** @param when Position in frames, where 0 is the start of the region. diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index 52378af473..f7a7855eaa 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -758,7 +758,6 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT } } else { if (Keyboard::modifier_state_equals (event->button.state, Keyboard::RangeSelectModifier)) { - cerr << "extend selection\n"; _drags->set (new SelectionDrag (this, item, SelectionDrag::SelectionExtend), event); } else { _drags->set (new SelectionDrag (this, item, SelectionDrag::CreateSelection), event); @@ -777,7 +776,6 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT default: if (!internal_editing()) { if (Keyboard::modifier_state_equals (event->button.state, Keyboard::RangeSelectModifier)) { - cerr << "extend selection 2\n"; _drags->set (new SelectionDrag (this, item, SelectionDrag::SelectionExtend), event); } else { _drags->set (new SelectionDrag (this, item, SelectionDrag::CreateSelection), event); diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index 19725b375f..532237ad2b 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -333,38 +333,38 @@ MidiRegionView::canvas_group_event(GdkEvent* ev) return false; } + if (!trackview.editor().internal_editing()) { + // not in internal edit mode, so just act like a normal region + return RegionView::canvas_group_event (ev); + } + + const MouseMode m = trackview.editor().current_mouse_mode(); bool r; switch (ev->type) { case GDK_ENTER_NOTIFY: + _last_event_x = ev->crossing.x; + _last_event_y = ev->crossing.y; + enter_notify(&ev->crossing); + // set entered_regionview (among other things) + return RegionView::canvas_group_event (ev); + case GDK_LEAVE_NOTIFY: _last_event_x = ev->crossing.x; _last_event_y = ev->crossing.y; - break; - case GDK_MOTION_NOTIFY: - _last_event_x = ev->motion.x; - _last_event_y = ev->motion.y; - break; - default: - break; - } + leave_notify(&ev->crossing); + // reset entered_regionview (among other things) + return RegionView::canvas_group_event (ev); - if (ev->type == GDK_2BUTTON_PRESS) { + case GDK_2BUTTON_PRESS: // cannot use double-click to exit internal mode if single-click is being used - MouseMode m = trackview.editor().current_mouse_mode(); - - if ((m != MouseObject || !Keyboard::modifier_state_contains (ev->button.state, Keyboard::insert_note_modifier())) && (m != MouseDraw)) { + if ((m != MouseDraw) && + (m != MouseObject || + !Keyboard::modifier_state_contains (ev->button.state, Keyboard::insert_note_modifier()))) { return trackview.editor().toggle_internal_editing_from_double_click (ev); } - } - - if ((!trackview.editor().internal_editing() && trackview.editor().current_mouse_mode() != MouseGain) || - (trackview.editor().current_mouse_mode() == MouseTimeFX)) { - // handle non-internal-edit/non-draw modes elsewhere - return RegionView::canvas_group_event (ev); - } + break; - switch (ev->type) { case GDK_SCROLL: if (scroll (&ev->scroll)) { return true; @@ -386,24 +386,16 @@ MidiRegionView::canvas_group_event(GdkEvent* ev) _note_player = 0; return r; - case GDK_ENTER_NOTIFY: - // set entered_regionview (among other things) - trackview.editor().canvas_region_view_event (ev, group, this); - return enter_notify (&ev->crossing); - - case GDK_LEAVE_NOTIFY: - // reset entered_regionview (among other things) - trackview.editor().canvas_region_view_event (ev, group, this); - return leave_notify (&ev->crossing); - case GDK_MOTION_NOTIFY: + _last_event_x = ev->motion.x; + _last_event_y = ev->motion.y; return motion (&ev->motion); default: break; } - return trackview.editor().canvas_region_view_event (ev, group, this); + return RegionView::canvas_group_event (ev); } bool @@ -417,20 +409,6 @@ MidiRegionView::enter_notify (GdkEventCrossing* ev) create_ghost_note (ev->x, ev->y); } - if (!trackview.editor().internal_editing()) { - Keyboard::magic_widget_drop_focus(); - } else { - Keyboard::magic_widget_grab_focus(); - group->grab_focus(); - } - - // if current operation is non-operational in a midi region, change the cursor to so indicate - if (trackview.editor().current_mouse_mode() == MouseGain) { - Editor* editor = dynamic_cast (&trackview.editor()); - pre_enter_cursor = editor->get_canvas_cursor(); - editor->set_canvas_cursor(editor->cursors()->timebar); - } - return false; } @@ -442,16 +420,6 @@ MidiRegionView::leave_notify (GdkEventCrossing*) trackview.editor().verbose_cursor()->hide (); remove_ghost_note (); - if (trackview.editor().internal_editing()) { - Keyboard::magic_widget_drop_focus(); - } - - if (pre_enter_cursor) { - Editor* editor = dynamic_cast (&trackview.editor()); - editor->set_canvas_cursor(pre_enter_cursor); - pre_enter_cursor = 0; - } - return false; } -- 2.30.2