diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index e9960b3938..c4e99ce1fd 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -1055,6 +1055,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD bool motion_handler (ArdourCanvas::Item*, GdkEvent*, bool from_autoscroll = false); bool enter_handler (ArdourCanvas::Item*, GdkEvent*, ItemType); bool leave_handler (ArdourCanvas::Item*, GdkEvent*, ItemType); + bool key_press_handler (ArdourCanvas::Item*, GdkEvent*, ItemType); + bool key_release_handler (ArdourCanvas::Item*, GdkEvent*, ItemType); Gtkmm2ext::Bindings* button_bindings; XMLNode* button_settings () const; diff --git a/gtk2_ardour/editor_canvas_events.cc b/gtk2_ardour/editor_canvas_events.cc index 5dbc94a897..014c925f7d 100644 --- a/gtk2_ardour/editor_canvas_events.cc +++ b/gtk2_ardour/editor_canvas_events.cc @@ -212,6 +212,14 @@ Editor::typed_event (ArdourCanvas::Item* item, GdkEvent *event, ItemType type) ret = leave_handler (item, event, type); break; + case GDK_KEY_PRESS: + ret = key_press_handler (item, event, type); + break; + + case GDK_KEY_RELEASE: + ret = key_release_handler (item, event, type); + break; + default: break; } @@ -1074,3 +1082,45 @@ Editor::track_canvas_drag_motion (Glib::RefPtr const & /*c*/, return true; } + +bool +Editor::key_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType type) +{ + return false; +} + +bool +Editor::key_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType type) +{ + + bool handled = false; + + switch (type) { + case TempoMarkerItem: + switch (event->key.keyval) { + case GDK_Delete: + remove_tempo_marker (item); + handled = true; + break; + default: + break; + } + break; + + case MeterMarkerItem: + switch (event->key.keyval) { + case GDK_Delete: + remove_meter_marker (item); + handled = true; + break; + default: + break; + } + break; + + default: + break; + } + + return handled; +}