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 | |
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')
-rw-r--r-- | gtk2_ardour/ardour2_ui_dark.rc.in | 2 | ||||
-rw-r--r-- | gtk2_ardour/ardour2_ui_light.rc.in | 2 | ||||
-rw-r--r-- | gtk2_ardour/au_pluginui.mm | 9 | ||||
-rw-r--r-- | gtk2_ardour/generic_pluginui.cc | 1 | ||||
-rw-r--r-- | gtk2_ardour/icons/computer_keyboard.png | bin | 0 -> 1536 bytes | |||
-rw-r--r-- | gtk2_ardour/icons/computer_keyboard_active.png | bin | 0 -> 1686 bytes | |||
-rw-r--r-- | gtk2_ardour/keyboard.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/plugin_ui.cc | 47 | ||||
-rw-r--r-- | gtk2_ardour/plugin_ui.h | 8 |
9 files changed, 67 insertions, 4 deletions
diff --git a/gtk2_ardour/ardour2_ui_dark.rc.in b/gtk2_ardour/ardour2_ui_dark.rc.in index 0f171058af..34c6942e21 100644 --- a/gtk2_ardour/ardour2_ui_dark.rc.in +++ b/gtk2_ardour/ardour2_ui_dark.rc.in @@ -1476,6 +1476,8 @@ widget "*HWMonitorButton" style:highest "red_when_active" widget "*HWMonitorButton*" style:highest "red_when_active" widget "*BypassButton" style:highest "red_when_active" widget "*BypassButton*" style:highest "red_when_active" +widget "*FocusButton" style:highest "red_when_active" +widget "*FocusButton*" style:highest "red_when_active" widget "*TransportSoloAlert" style:highest "flashing_alert" widget "*TransportSoloAlert.*" style:highest "flashing_alert" widget "*TransportAuditioningAlert" style:highest "flashing_alert" diff --git a/gtk2_ardour/ardour2_ui_light.rc.in b/gtk2_ardour/ardour2_ui_light.rc.in index 72e30d6471..d9d0907de7 100644 --- a/gtk2_ardour/ardour2_ui_light.rc.in +++ b/gtk2_ardour/ardour2_ui_light.rc.in @@ -1479,6 +1479,8 @@ widget "*HWMonitorButton" style:highest "red_when_active" widget "*HWMonitorButton*" style:highest "red_when_active" widget "*BypassButton" style:highest "red_when_active" widget "*BypassButton*" style:highest "red_when_active" +widget "*FocusButton" style:highest "red_when_active" +widget "*FocusButton*" style:highest "red_when_active" widget "*TransportSoloAlert" style:highest "flashing_alert" widget "*TransportSoloAlert.*" style:highest "flashing_alert" widget "*TransportAuditioningAlert" style:highest "flashing_alert" diff --git a/gtk2_ardour/au_pluginui.mm b/gtk2_ardour/au_pluginui.mm index c6eeb03563..fcaeced301 100644 --- a/gtk2_ardour/au_pluginui.mm +++ b/gtk2_ardour/au_pluginui.mm @@ -67,6 +67,7 @@ AUPluginUI::AUPluginUI (boost::shared_ptr<PluginInsert> insert) top_box.set_spacing (6); top_box.set_border_width (6); + top_box.pack_end (focus_button, false, true); top_box.pack_end (bypass_button, false, true); top_box.pack_end (automation_mode_selector, false, false); top_box.pack_end (automation_mode_label, false, false); @@ -624,16 +625,16 @@ create_au_gui (boost::shared_ptr<PluginInsert> plugin_insert, VBox** box) bool AUPluginUI::on_focus_in_event (GdkEventFocus* ev) { - cerr << "au plugin focus in\n"; - Keyboard::magic_widget_grab_focus (); + //cerr << "au plugin focus in\n"; + //Keyboard::magic_widget_grab_focus (); return false; } bool AUPluginUI::on_focus_out_event (GdkEventFocus* ev) { - cerr << "au plugin focus out\n"; - Keyboard::magic_widget_drop_focus (); + //cerr << "au plugin focus out\n"; + //Keyboard::magic_widget_drop_focus (); return false; } diff --git a/gtk2_ardour/generic_pluginui.cc b/gtk2_ardour/generic_pluginui.cc index dfff196a5f..7944fd0d28 100644 --- a/gtk2_ardour/generic_pluginui.cc +++ b/gtk2_ardour/generic_pluginui.cc @@ -86,6 +86,7 @@ GenericPluginUI::GenericPluginUI (boost::shared_ptr<PluginInsert> pi, bool scrol constraint_hbox->set_spacing (5); constraint_hbox->pack_start (*smaller_hbox, true, false); + constraint_hbox->pack_end (focus_button, false, false); constraint_hbox->pack_end (bypass_button, false, false); settings_box.pack_end (*constraint_hbox, false, false); diff --git a/gtk2_ardour/icons/computer_keyboard.png b/gtk2_ardour/icons/computer_keyboard.png Binary files differnew file mode 100644 index 0000000000..9da0109378 --- /dev/null +++ b/gtk2_ardour/icons/computer_keyboard.png diff --git a/gtk2_ardour/icons/computer_keyboard_active.png b/gtk2_ardour/icons/computer_keyboard_active.png Binary files differnew file mode 100644 index 0000000000..64b704d2ea --- /dev/null +++ b/gtk2_ardour/icons/computer_keyboard_active.png diff --git a/gtk2_ardour/keyboard.cc b/gtk2_ardour/keyboard.cc index 2e2ca5e553..a1adc5e9ba 100644 --- a/gtk2_ardour/keyboard.cc +++ b/gtk2_ardour/keyboard.cc @@ -89,12 +89,14 @@ void Keyboard::magic_widget_grab_focus () { _some_magic_widget_has_focus = true; + cerr << "Grabbed magic widget docus\n"; } void Keyboard::magic_widget_drop_focus () { _some_magic_widget_has_focus = false; + cerr << "Dropped magic widget docus\n"; } bool 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 () { diff --git a/gtk2_ardour/plugin_ui.h b/gtk2_ardour/plugin_ui.h index 4f0d92c21c..2bf55b2e0d 100644 --- a/gtk2_ardour/plugin_ui.h +++ b/gtk2_ardour/plugin_ui.h @@ -34,6 +34,7 @@ #include <gtkmm/scrolledwindow.h> #include <gtkmm/label.h> #include <gtkmm/menu.h> +#include <gtkmm/image.h> #include <gtkmm/adjustment.h> #include <gtkmm/togglebutton.h> #include <gtkmm/socket.h> @@ -85,10 +86,15 @@ class PlugUIBase : public virtual sigc::trackable Gtk::ComboBoxText preset_combo; Gtk::Button save_button; Gtk::ToggleButton bypass_button; + Gtk::EventBox focus_button; + + Gtk::Image* focus_out_image; + Gtk::Image* focus_in_image; void setting_selected(); void save_plugin_setting (void); void bypass_toggled(); + bool focus_toggled(GdkEventButton*); void redirect_active_changed (ARDOUR::Redirect* r, void* src); }; @@ -212,6 +218,8 @@ class PluginUIWindow : public Gtk::Window bool on_enter_notify_event (GdkEventCrossing*); bool on_leave_notify_event (GdkEventCrossing*); + bool on_focus_in_event (GdkEventFocus*); + bool on_focus_out_event (GdkEventFocus*); bool on_key_press_event (GdkEventKey*); bool on_key_release_event (GdkEventKey*); void on_show (); |