diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 36ae62d6b4..cd56e0ef99 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -906,6 +906,8 @@ class Editor : public PublicEditor void align_relative (ARDOUR::RegionPoint); void naturalize (); + void reset_focus (); + void cut (); void copy (); void paste (float times); diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc index 065c82c141..138fa8510e 100644 --- a/gtk2_ardour/editor_actions.cc +++ b/gtk2_ardour/editor_actions.cc @@ -1086,3 +1086,9 @@ Editor::parameter_changed (const char* parameter_name) #undef PARAM_IS } + +void +Editor::reset_focus () +{ + track_canvas.grab_focus(); +} diff --git a/gtk2_ardour/gain_meter.cc b/gtk2_ardour/gain_meter.cc index 06b1195a18..6a1a41418d 100644 --- a/gtk2_ardour/gain_meter.cc +++ b/gtk2_ardour/gain_meter.cc @@ -40,6 +40,7 @@ #include "logmeter.h" #include "gui_thread.h" #include "keyboard.h" +#include "public_editor.h" #include #include @@ -563,7 +564,11 @@ GainMeter::gain_activated () f = min (f, 6.0f); - _io->set_gain (dB_to_coefficient (f), this); + _io->set_gain (dB_to_coefficient(f), this); + + if (gain_display.has_focus()) { + PublicEditor::instance().reset_focus(); + } } } diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h index f672ea180d..dcc9a3b3ab 100644 --- a/gtk2_ardour/public_editor.h +++ b/gtk2_ardour/public_editor.h @@ -144,6 +144,8 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulThingWithGoingAway Glib::RefPtr editor_actions; + virtual void reset_focus() = 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;