diff options
Diffstat (limited to 'gtk2_ardour/editor_canvas_events.cc')
-rw-r--r-- | gtk2_ardour/editor_canvas_events.cc | 106 |
1 files changed, 68 insertions, 38 deletions
diff --git a/gtk2_ardour/editor_canvas_events.cc b/gtk2_ardour/editor_canvas_events.cc index b2c7554a2a..bdae41f7ba 100644 --- a/gtk2_ardour/editor_canvas_events.cc +++ b/gtk2_ardour/editor_canvas_events.cc @@ -15,16 +15,18 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ #include <cstdlib> #include <cmath> +#include <pbd/stacktrace.h> + #include <ardour/audio_diskstream.h> #include <ardour/audioplaylist.h> #include "editor.h" +#include "keyboard.h" #include "public_editor.h" #include "audio_region_view.h" #include "audio_streamview.h" @@ -71,7 +73,7 @@ Editor::track_canvas_scroll (GdkEventScroll* ev) event.button.y = wy; nframes_t where = event_frame (&event, 0, 0); - temporal_zoom_to_frame (true, where); + temporal_zoom_to_frame (false, where); return true; } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::Shift)) { if (!current_stepping_trackview) { @@ -102,7 +104,7 @@ Editor::track_canvas_scroll (GdkEventScroll* ev) event.button.y = wy; nframes_t where = event_frame (&event, 0, 0); - temporal_zoom_to_frame (false, where); + temporal_zoom_to_frame (true, where); return true; } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::Shift)) { if (!current_stepping_trackview) { @@ -129,43 +131,36 @@ Editor::track_canvas_scroll (GdkEventScroll* ev) } bool -Editor::track_canvas_event (GdkEvent *event, ArdourCanvas::Item* item) +Editor::track_canvas_scroll_event (GdkEventScroll *event) { - gint x, y; - - /* this is the handler for events that are not handled by - items. - */ - - switch (event->type) { - case GDK_MOTION_NOTIFY: - /* keep those motion events coming */ - track_canvas.get_pointer (x, y); - return track_canvas_motion (event); - - case GDK_BUTTON_PRESS: - track_canvas.grab_focus(); - break; - - case GDK_BUTTON_RELEASE: - switch (event->button.button) { - case 4: - case 5: - button_release_handler (item, event, NoItem); - break; - } - break; + track_canvas.grab_focus(); + track_canvas_scroll (event); + return false; +} - case GDK_SCROLL: - track_canvas.grab_focus(); - track_canvas_scroll (&event->scroll); - break; +bool +Editor::track_canvas_button_press_event (GdkEventButton *event) +{ + track_canvas.grab_focus(); + return false; +} - default: - break; +bool +Editor::track_canvas_button_release_event (GdkEventButton *event) +{ + if (drag_info.item) { + end_grab (drag_info.item, (GdkEvent*) event); } + return false; +} - return FALSE; +bool +Editor::track_canvas_motion_notify_event (GdkEventMotion *event) +{ + int x, y; + /* keep those motion events coming */ + track_canvas.get_pointer (x, y); + return false; } bool @@ -214,7 +209,12 @@ Editor::typed_event (ArdourCanvas::Item* item, GdkEvent *event, ItemType type) bool Editor::canvas_region_view_event (GdkEvent *event, ArdourCanvas::Item* item, RegionView *rv) { - gint ret = FALSE; + bool ret = false; + + if (!rv->sensitive ()) { + return false; + } + switch (event->type) { case GDK_BUTTON_PRESS: @@ -290,6 +290,7 @@ bool Editor::canvas_automation_track_event (GdkEvent *event, ArdourCanvas::Item* item, AutomationTimeAxisView *atv) { bool ret = false; + switch (event->type) { case GDK_BUTTON_PRESS: @@ -330,6 +331,10 @@ Editor::canvas_fade_in_event (GdkEvent *event, ArdourCanvas::Item* item, AudioRe { /* we handle only button 3 press/release events */ + if (!rv->sensitive()) { + return false; + } + switch (event->type) { case GDK_BUTTON_PRESS: clicked_regionview = rv; @@ -362,6 +367,10 @@ Editor::canvas_fade_in_handle_event (GdkEvent *event, ArdourCanvas::Item* item, { bool ret = false; + if (!rv->sensitive()) { + return false; + } + switch (event->type) { case GDK_BUTTON_PRESS: case GDK_2BUTTON_PRESS: @@ -401,6 +410,10 @@ Editor::canvas_fade_out_event (GdkEvent *event, ArdourCanvas::Item* item, AudioR { /* we handle only button 3 press/release events */ + if (!rv->sensitive()) { + return false; + } + switch (event->type) { case GDK_BUTTON_PRESS: clicked_regionview = rv; @@ -433,6 +446,10 @@ Editor::canvas_fade_out_handle_event (GdkEvent *event, ArdourCanvas::Item* item, { bool ret = false; + if (!rv->sensitive()) { + return false; + } + switch (event->type) { case GDK_BUTTON_PRESS: case GDK_2BUTTON_PRESS: @@ -499,6 +516,11 @@ Editor::canvas_crossfade_view_event (GdkEvent* event, ArdourCanvas::Item* item, } + /* XXX do not forward double clicks */ + + if (event->type == GDK_2BUTTON_PRESS) { + return false; + } /* proxy for the upper most regionview */ @@ -524,10 +546,10 @@ Editor::canvas_crossfade_view_event (GdkEvent* event, ArdourCanvas::Item* item, RegionView* rv = atv->view()->find_view (rl->front()); - /* proxy */ - delete rl; + /* proxy */ + return canvas_region_view_event (event, rv->get_canvas_group(), rv); } } @@ -703,6 +725,10 @@ Editor::canvas_region_view_name_highlight_event (GdkEvent* event, ArdourCanvas:: { bool ret = false; + if (!rv->sensitive()) { + return false; + } + switch (event->type) { case GDK_BUTTON_PRESS: case GDK_2BUTTON_PRESS: @@ -739,6 +765,10 @@ Editor::canvas_region_view_name_event (GdkEvent *event, ArdourCanvas::Item* item { bool ret = false; + if (!rv->sensitive()) { + return false; + } + switch (event->type) { case GDK_BUTTON_PRESS: case GDK_2BUTTON_PRESS: |