diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2008-10-29 07:35:40 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2008-10-29 07:35:40 +0000 |
commit | deeef0a263d24b5ddbe38a601f89ec99a8f19823 (patch) | |
tree | 68b27a834f9eafc5f79098da99ca29f508f13700 /gtk2_ardour/plugin_ui.cc | |
parent | 01c2be0bab9209d74542888ad6e2e9fc27d19cf7 (diff) |
step 2 of keyboard focus work for plugin windows
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@4026 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/plugin_ui.cc')
-rw-r--r-- | gtk2_ardour/plugin_ui.cc | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/gtk2_ardour/plugin_ui.cc b/gtk2_ardour/plugin_ui.cc index 4918523af3..eae9e190eb 100644 --- a/gtk2_ardour/plugin_ui.cc +++ b/gtk2_ardour/plugin_ui.cc @@ -170,6 +170,22 @@ PluginUIWindow::on_leave_notify_event (GdkEventCrossing *ev) return false; } +bool +PluginUIWindow::on_focus_in_event (GdkEventFocus *ev) +{ + Window::on_focus_in_event (ev); + //Keyboard::the_keyboard().magic_widget_grab_focus (); + return false; +} + +bool +PluginUIWindow::on_focus_out_event (GdkEventFocus *ev) +{ + Window::on_focus_out_event (ev); + //Keyboard::the_keyboard().magic_widget_drop_focus (); + return false; +} + void PluginUIWindow::on_show () { @@ -330,6 +346,17 @@ PlugUIBase::PlugUIBase (boost::shared_ptr<PluginInsert> pi) bypass_button.set_name ("PluginBypassButton"); bypass_button.signal_toggled().connect (mem_fun(*this, &PlugUIBase::bypass_toggled)); + + focus_button.signal_button_release_event().connect (mem_fun(*this, &PlugUIBase::focus_toggled)); + focus_button.add_events (Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK); + + /* these images are not managed, so that we can remove them at will */ + + focus_out_image = new Image (get_icon (X_("computer_keyboard"))); + focus_in_image = new Image (get_icon (X_("computer_keyboard_active"))); + + focus_button.add (*focus_out_image); + ARDOUR_UI::instance()->set_tip (&focus_button, _("Click to focus all keyboard events on this plugin window"), ""); } void @@ -391,6 +418,26 @@ PlugUIBase::bypass_toggled () } } +bool +PlugUIBase::focus_toggled (GdkEventButton* ev) +{ + if (Keyboard::the_keyboard().some_magic_widget_has_focus()) { + Keyboard::the_keyboard().magic_widget_drop_focus(); + focus_button.remove (); + focus_button.add (*focus_out_image); + focus_out_image->show (); + ARDOUR_UI::instance()->set_tip (&focus_button, _("Click to focus all keyboard events on this plugin window"), ""); + } 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, _("Click to remove keyboard focus from this plugin window"), ""); + } + + return true; +} + void PlugUIBase::update_presets () { |