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.
This commit is contained in:
David Robillard 2014-12-05 16:54:29 -05:00
parent 9266e7524a
commit a65cd2a1b9
3 changed files with 30 additions and 59 deletions

View File

@ -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.

View File

@ -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);

View File

@ -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);
}
}
break;
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);
}
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<Editor *> (&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<Editor *> (&trackview.editor());
editor->set_canvas_cursor(pre_enter_cursor);
pre_enter_cursor = 0;
}
return false;
}