Enable some key release event forwarding
authorRobin Gareus <robin@gareus.org>
Fri, 22 Nov 2019 21:12:48 +0000 (22:12 +0100)
committerRobin Gareus <robin@gareus.org>
Fri, 22 Nov 2019 21:12:48 +0000 (22:12 +0100)
This is needed for the virtual MIDI keyboard to trigger note-off events

gtk2_ardour/ardour_window.cc
gtk2_ardour/ardour_window.h
gtk2_ardour/meterbridge.cc
gtk2_ardour/plugin_ui.cc

index 5e0443f7e6fc474c8c8bacc6d17ddac3e558d76d..27e0247c34094cea8d15eca57e1192ff1ddd6df6 100644 (file)
@@ -71,6 +71,20 @@ ArdourWindow::on_key_press_event (GdkEventKey* ev)
        return handled;
 }
 
+bool
+ArdourWindow::on_key_release_event (GdkEventKey* ev)
+{
+       bool handled = Gtk::Window::on_key_press_event (ev);
+
+       if (!handled) {
+               if (!get_modal()) {
+                       handled = relay_key_press (ev, this);
+               }
+       }
+
+       return handled;
+}
+
 bool
 ArdourWindow::on_focus_in_event (GdkEventFocus *ev)
 {
index f306618e2496673522aecc80763b9b0c234dfcae..2102eaae9e5d9da0ff457c78fec56ad859cf11cf 100644 (file)
@@ -47,6 +47,7 @@ protected:
        bool on_focus_out_event (GdkEventFocus*);
        bool on_delete_event (GdkEventAny *);
        bool on_key_press_event (GdkEventKey*);
+       bool on_key_release_event (GdkEventKey*);
        void on_unmap ();
 
 private:
index c40a90280dd52dc4b90f7d3fcb9bc7af1bbdb507..ec1bf70b88b77e53f0b33e1305c77a74a9a59abb 100644 (file)
@@ -275,8 +275,7 @@ Meterbridge::on_key_release_event (GdkEventKey* ev)
        if (gtk_window_propagate_key_event (GTK_WINDOW(gobj()), ev)) {
                return true;
        }
-       /* don't forward releases */
-       return true;
+       return relay_key_press (ev, this);
 }
 
 bool
index 60ec17ff660915de6801652dc3c06cbd5a71e0d0..b4a22c6f902f08c35c3615a78cb3601e80807cd6 100644 (file)
@@ -439,13 +439,13 @@ PluginUIWindow::on_key_release_event (GdkEventKey *event)
                if (_pluginui) {
                        if (_pluginui->non_gtk_gui()) {
                                _pluginui->forward_key_event (event);
+                               return true;
                        }
                }
        } else {
                gtk_window_propagate_key_event (GTK_WINDOW(gobj()), event);
        }
-       /* don't forward releases */
-       return true;
+       return relay_key_press (event, this);
 }
 
 void