fix scrolling behaviour in track headers (event was stolen by rulers because event coordinates made it look as if the event happened there)

This commit is contained in:
Paul Davis 2014-06-13 14:27:59 -04:00
parent 31f35ca4bf
commit d9cee7a6d6
6 changed files with 11 additions and 9 deletions

View file

@ -3973,7 +3973,7 @@ Editor::control_layout_scroll (GdkEventScroll* ev)
In the not too distant future this layout is going away anyway and
headers will be on the canvas.
*/
return canvas_scroll_event (ev);
return canvas_scroll_event (ev, false);
}
void

View file

@ -1412,7 +1412,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
/* Canvas event handlers */
bool canvas_scroll_event (GdkEventScroll* event);
bool canvas_scroll_event (GdkEventScroll* event, bool from_canvas);
bool canvas_control_point_event (GdkEvent* event,ArdourCanvas::Item*, ControlPoint*);
bool canvas_line_event (GdkEvent* event,ArdourCanvas::Item*, AutomationLine*);
bool canvas_selection_rect_event (GdkEvent* event,ArdourCanvas::Item*, SelectionRect*);

View file

@ -236,7 +236,7 @@ Editor::initialize_canvas ()
handlers.
*/
_track_canvas->signal_scroll_event().connect (sigc::mem_fun (*this, &Editor::canvas_scroll_event));
_track_canvas->signal_scroll_event().connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_scroll_event), true));
_track_canvas->signal_motion_notify_event().connect (sigc::mem_fun (*this, &Editor::track_canvas_motion_notify_event));
_track_canvas->signal_button_press_event().connect (sigc::mem_fun (*this, &Editor::track_canvas_button_press_event));
_track_canvas->signal_button_release_event().connect (sigc::mem_fun (*this, &Editor::track_canvas_button_release_event));

View file

@ -160,11 +160,13 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
}
bool
Editor::canvas_scroll_event (GdkEventScroll *event)
Editor::canvas_scroll_event (GdkEventScroll *event, bool from_canvas)
{
boost::optional<Rect> rulers = _time_markers_group->bounding_box();
if (rulers && rulers->contains (Duple (event->x, event->y))) {
return canvas_ruler_event ((GdkEvent*) event, timecode_ruler, TimecodeRulerItem);
if (from_canvas) {
boost::optional<Rect> rulers = _time_markers_group->bounding_box();
if (rulers && rulers->contains (Duple (event->x, event->y))) {
return canvas_ruler_event ((GdkEvent*) event, timecode_ruler, TimecodeRulerItem);
}
}
_track_canvas->grab_focus();

View file

@ -320,7 +320,7 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible, publi
virtual void reset_focus () = 0;
virtual bool canvas_scroll_event (GdkEventScroll* event) = 0;
virtual bool canvas_scroll_event (GdkEventScroll* event, bool from_canvas) = 0;
virtual bool canvas_control_point_event (GdkEvent* event, ArdourCanvas::Item*, ControlPoint*) = 0;
virtual bool canvas_line_event (GdkEvent* event, ArdourCanvas::Item*, AutomationLine*) = 0;
virtual bool canvas_selection_rect_event (GdkEvent* event, ArdourCanvas::Item*, SelectionRect*) = 0;

View file

@ -308,7 +308,7 @@ TimeAxisView::controls_ebox_scroll (GdkEventScroll* ev)
In the not too distant future this layout is going away anyway and
headers will be on the canvas.
*/
return _editor.canvas_scroll_event (ev);
return _editor.canvas_scroll_event (ev, false);
}
bool