summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_canvas_events.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour/editor_canvas_events.cc')
-rw-r--r--gtk2_ardour/editor_canvas_events.cc106
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: