Update Tempo Tapping:
authorRobin Gareus <robin@gareus.org>
Thu, 4 May 2017 14:12:26 +0000 (16:12 +0200)
committerRobin Gareus <robin@gareus.org>
Thu, 4 May 2017 14:13:10 +0000 (16:13 +0200)
* Allow tap with keyboard (Space, Enter)
* Ignore double-clicks (2nd rapid event skewed calculation)

gtk2_ardour/tempo_dialog.cc
gtk2_ardour/tempo_dialog.h

index db21474630f59026c9b716469cd1a7a00696749c..875b23c2f6ee1e67ae45210a5254dc9ba8b35d8d 100644 (file)
@@ -246,7 +246,8 @@ TempoDialog::init (const Timecode::BBT_Time& when, double bpm, double end_bpm, d
        tap_tempo_button.show ();
        get_vbox()->set_spacing (6);
        get_vbox()->pack_end (tap_tempo_button);
-       bpm_spinner.grab_focus ();
+       tap_tempo_button.can_focus ();
+       tap_tempo_button.grab_focus ();
 
        set_name ("MetricDialog");
 
@@ -263,6 +264,7 @@ TempoDialog::init (const Timecode::BBT_Time& when, double bpm, double end_bpm, d
        tempo_type.signal_changed().connect (sigc::mem_fun (*this, &TempoDialog::tempo_type_change));
        lock_style.signal_changed().connect (sigc::mem_fun (*this, &TempoDialog::lock_style_change));
        tap_tempo_button.signal_button_press_event().connect (sigc::mem_fun (*this, &TempoDialog::tap_tempo_button_press), false);
+       tap_tempo_button.signal_key_press_event().connect (sigc::mem_fun (*this, &TempoDialog::tap_tempo_key_press), false);
        tap_tempo_button.signal_focus_out_event().connect (sigc::mem_fun (*this, &TempoDialog::tap_tempo_focus_out));
 
        tempo_type_change();
@@ -412,7 +414,27 @@ TempoDialog::lock_style_change ()
 }
 
 bool
-TempoDialog::tap_tempo_button_press (GdkEventButton *ev)
+TempoDialog::tap_tempo_key_press (GdkEventKey*)
+{
+       tap_tempo ();
+       return false;
+}
+
+bool
+TempoDialog::tap_tempo_button_press (GdkEventButton* ev)
+{
+       if (ev->type == GDK_2BUTTON_PRESS || ev->type == GDK_3BUTTON_PRESS) {
+               return true;
+       }
+       if (ev->button != 1) {
+               return true;
+       }
+       tap_tempo ();
+       return false; // grab focus
+}
+
+void
+TempoDialog::tap_tempo ()
 {
        double t;
 
@@ -446,8 +468,6 @@ TempoDialog::tap_tempo_button_press (GdkEventButton *ev)
        }
        tap_count++;
        last_t = t;
-
-       return true;
 }
 
 bool
index 06c9732fe5b296c85bb52daac3a3cd03c6951882..baa671df43e4a41942be296ab76ccaf9be113368 100644 (file)
@@ -58,9 +58,12 @@ private:
        void pulse_change ();
        void tempo_type_change ();
        void lock_style_change ();
-       bool tap_tempo_button_press (GdkEventButton* );
+       bool tap_tempo_key_press (GdkEventKey*);
+       bool tap_tempo_button_press (GdkEventButton*);
        bool tap_tempo_focus_out (GdkEventFocus* );
 
+       void tap_tempo ();
+
        typedef std::map<std::string,float> NoteTypes;
        NoteTypes note_types;