X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=gtk2_ardour%2Fplugin_ui.cc;h=84c95cf16e4fd5007635a4c948bb3d45212325a7;hb=da8eec7a8311295ee91308eca9fae2146385c512;hp=9d569ad42b6d5ae17b3e5c95e7791e7df5eacae3;hpb=f5c4c8a2931f383c76212ea1cfdb6f85f43bb72f;p=ardour.git diff --git a/gtk2_ardour/plugin_ui.cc b/gtk2_ardour/plugin_ui.cc index 9d569ad42b..84c95cf16e 100644 --- a/gtk2_ardour/plugin_ui.cc +++ b/gtk2_ardour/plugin_ui.cc @@ -76,10 +76,10 @@ using namespace Gtk; PluginUIWindow::PluginUIWindow (Gtk::Window* win, boost::shared_ptr insert, bool scrollable) : parent (win) + , was_visible (false) + , _keyboard_focused (false) { bool have_gui = false; - non_gtk_gui = false; - was_visible = false; Label* label = manage (new Label()); label->set_markup ("THIS IS THE PLUGIN UI"); @@ -120,6 +120,7 @@ PluginUIWindow::PluginUIWindow (Gtk::Window* win, boost::shared_ptrKeyboardFocused.connect (sigc::mem_fun (*this, &PluginUIWindow::keyboard_focused)); add (*pu); /* @@ -238,7 +239,7 @@ PluginUIWindow::on_hide () } void -PluginUIWindow::set_title(const Glib::ustring& title) +PluginUIWindow::set_title(const std::string& title) { //cout << "PluginUIWindow::set_title(\"" << title << "\"" << endl; Gtk::Window::set_title(title); @@ -266,11 +267,11 @@ PluginUIWindow::create_vst_editor(boost::shared_ptr) VSTPluginUI* vpu = new VSTPluginUI (insert, vp); _pluginui = vpu; + _pluginui->KeyboardFocused.connect (sigc::mem_fun (*this, &PluginUIWindow::keyboard_focused)); add (*vpu); vpu->package (*this); } - non_gtk_gui = true; return true; #endif } @@ -287,8 +288,8 @@ PluginUIWindow::create_audiounit_editor (boost::shared_ptr) #else VBox* box; _pluginui = create_au_gui (insert, &box); + _pluginui->KeyboardFocused.connect (sigc::mem_fun (*this, &PluginUIWindow::keyboard_focused)); add (*box); - non_gtk_gui = true; extern sigc::signal ApplicationActivationChanged; ApplicationActivationChanged.connect (sigc::mem_fun (*this, &PluginUIWindow::app_activated)); @@ -341,21 +342,56 @@ PluginUIWindow::create_lv2_editor(boost::shared_ptr insert) lpu->package (*this); } - non_gtk_gui = false; return true; #endif } +void +PluginUIWindow::keyboard_focused (bool yn) +{ + _keyboard_focused = yn; +} + bool PluginUIWindow::on_key_press_event (GdkEventKey* event) { - return relay_key_press (event, this); + if (_keyboard_focused) { + if (_pluginui) { + if (_pluginui->non_gtk_gui()) { + _pluginui->forward_key_event (event); + } else { + return relay_key_press (event, this); + } + } + return true; + } else { + if (_pluginui->non_gtk_gui()) { + /* pass editor window as the window for the event + to be handled in, not this one, because there are + no widgets in this window that we want to have + key focus. + */ + return relay_key_press (event, &PublicEditor::instance()); + } else { + return relay_key_press (event, this); + } + } } bool -PluginUIWindow::on_key_release_event (GdkEventKey *) +PluginUIWindow::on_key_release_event (GdkEventKey *event) { - return true; + if (_keyboard_focused) { + if (_pluginui) { + if (_pluginui->non_gtk_gui()) { + _pluginui->forward_key_event (event); + } + return true; + } + return false; + } else { + return true; + } } void @@ -539,12 +575,14 @@ PlugUIBase::focus_toggled (GdkEventButton*) focus_button.add (*focus_out_image); focus_out_image->show (); ARDOUR_UI::instance()->set_tip (focus_button, string_compose (_("Click to allow the plugin to receive keyboard events that %1 would normally use as a shortcut"), PROGRAM_NAME)); + KeyboardFocused (false); } else { Keyboard::the_keyboard().magic_widget_grab_focus(); focus_button.remove (); focus_button.add (*focus_in_image); focus_in_image->show (); ARDOUR_UI::instance()->set_tip (focus_button, string_compose (_("Click to allow normal use of %1 keyboard shortcuts"), PROGRAM_NAME)); + KeyboardFocused (true); } return true;