summaryrefslogtreecommitdiff
path: root/gtk2_ardour/plugin_ui.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2008-10-29 07:35:40 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2008-10-29 07:35:40 +0000
commitdeeef0a263d24b5ddbe38a601f89ec99a8f19823 (patch)
tree68b27a834f9eafc5f79098da99ca29f508f13700 /gtk2_ardour/plugin_ui.cc
parent01c2be0bab9209d74542888ad6e2e9fc27d19cf7 (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.cc47
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 ()
{