Plugin selector keyboard focus should now stay in the plugin list. More

sensible defaults for the NSD and accelerators will work in plugin 
windows (plus keyboard will not affect the plugin window itself).


git-svn-id: svn://localhost/ardour2/trunk@783 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Sampo Savolainen 2006-08-10 14:41:53 +00:00
parent 77a13df5bd
commit 00bf20c236
6 changed files with 80 additions and 4 deletions

View file

@ -141,15 +141,17 @@ NewSessionDialog::NewSessionDialog()
advanced_table->attach(*m_control_bus_channel_count, 1, 2, 2, 3, Gtk::AttachOptions(), Gtk::AttachOptions(), 0, 0); advanced_table->attach(*m_control_bus_channel_count, 1, 2, 2, 3, Gtk::AttachOptions(), Gtk::AttachOptions(), 0, 0);
advanced_table->attach(*m_master_bus_channel_count, 1, 2, 1, 2, Gtk::AttachOptions(), Gtk::AttachOptions(), 0, 0); advanced_table->attach(*m_master_bus_channel_count, 1, 2, 1, 2, Gtk::AttachOptions(), Gtk::AttachOptions(), 0, 0);
advanced_table->attach(*m_create_master_bus, 0, 1, 1, 2, Gtk::FILL, Gtk::AttachOptions(), 0, 0); advanced_table->attach(*m_create_master_bus, 0, 1, 1, 2, Gtk::FILL, Gtk::AttachOptions(), 0, 0);
m_connect_inputs->set_flags(Gtk::CAN_FOCUS); m_connect_inputs->set_flags(Gtk::CAN_FOCUS);
m_connect_inputs->set_relief(Gtk::RELIEF_NORMAL); m_connect_inputs->set_relief(Gtk::RELIEF_NORMAL);
m_connect_inputs->set_mode(true); m_connect_inputs->set_mode(true);
m_connect_inputs->set_active(false); m_connect_inputs->set_active(true);
m_connect_inputs->set_border_width(0); m_connect_inputs->set_border_width(0);
m_limit_input_ports->set_flags(Gtk::CAN_FOCUS); m_limit_input_ports->set_flags(Gtk::CAN_FOCUS);
m_limit_input_ports->set_relief(Gtk::RELIEF_NORMAL); m_limit_input_ports->set_relief(Gtk::RELIEF_NORMAL);
m_limit_input_ports->set_mode(true); m_limit_input_ports->set_mode(true);
m_limit_input_ports->set_sensitive(false); m_limit_input_ports->set_sensitive(true);
m_limit_input_ports->set_border_width(0); m_limit_input_ports->set_border_width(0);
m_input_limit_count->set_flags(Gtk::CAN_FOCUS); m_input_limit_count->set_flags(Gtk::CAN_FOCUS);
m_input_limit_count->set_update_policy(Gtk::UPDATE_ALWAYS); m_input_limit_count->set_update_policy(Gtk::UPDATE_ALWAYS);
@ -157,6 +159,7 @@ NewSessionDialog::NewSessionDialog()
m_input_limit_count->set_digits(0); m_input_limit_count->set_digits(0);
m_input_limit_count->set_wrap(false); m_input_limit_count->set_wrap(false);
m_input_limit_count->set_sensitive(false); m_input_limit_count->set_sensitive(false);
input_port_limit_hbox->pack_start(*m_limit_input_ports, Gtk::PACK_SHRINK, 6); input_port_limit_hbox->pack_start(*m_limit_input_ports, Gtk::PACK_SHRINK, 6);
input_port_limit_hbox->pack_start(*m_input_limit_count, Gtk::PACK_EXPAND_PADDING, 0); input_port_limit_hbox->pack_start(*m_input_limit_count, Gtk::PACK_EXPAND_PADDING, 0);
input_port_vbox->pack_start(*m_connect_inputs, Gtk::PACK_SHRINK, 0); input_port_vbox->pack_start(*m_connect_inputs, Gtk::PACK_SHRINK, 0);
@ -177,12 +180,12 @@ NewSessionDialog::NewSessionDialog()
m_connect_outputs->set_flags(Gtk::CAN_FOCUS); m_connect_outputs->set_flags(Gtk::CAN_FOCUS);
m_connect_outputs->set_relief(Gtk::RELIEF_NORMAL); m_connect_outputs->set_relief(Gtk::RELIEF_NORMAL);
m_connect_outputs->set_mode(true); m_connect_outputs->set_mode(true);
m_connect_outputs->set_active(false); m_connect_outputs->set_active(true);
m_connect_outputs->set_border_width(0); m_connect_outputs->set_border_width(0);
m_limit_output_ports->set_flags(Gtk::CAN_FOCUS); m_limit_output_ports->set_flags(Gtk::CAN_FOCUS);
m_limit_output_ports->set_relief(Gtk::RELIEF_NORMAL); m_limit_output_ports->set_relief(Gtk::RELIEF_NORMAL);
m_limit_output_ports->set_mode(true); m_limit_output_ports->set_mode(true);
m_limit_output_ports->set_sensitive(false); m_limit_output_ports->set_sensitive(true);
m_limit_output_ports->set_border_width(0); m_limit_output_ports->set_border_width(0);
m_output_limit_count->set_flags(Gtk::CAN_FOCUS); m_output_limit_count->set_flags(Gtk::CAN_FOCUS);
m_output_limit_count->set_update_policy(Gtk::UPDATE_ALWAYS); m_output_limit_count->set_update_policy(Gtk::UPDATE_ALWAYS);
@ -597,12 +600,24 @@ void
NewSessionDialog::connect_inputs_clicked () NewSessionDialog::connect_inputs_clicked ()
{ {
m_limit_input_ports->set_sensitive(m_connect_inputs->get_active()); m_limit_input_ports->set_sensitive(m_connect_inputs->get_active());
if (m_connect_inputs->get_active() && m_limit_input_ports->get_active()) {
m_input_limit_count->set_sensitive(true);
} else {
m_input_limit_count->set_sensitive(false);
}
} }
void void
NewSessionDialog::connect_outputs_clicked () NewSessionDialog::connect_outputs_clicked ()
{ {
m_limit_output_ports->set_sensitive(m_connect_outputs->get_active()); m_limit_output_ports->set_sensitive(m_connect_outputs->get_active());
if (m_connect_outputs->get_active() && m_limit_output_ports->get_active()) {
m_output_limit_count->set_sensitive(true);
} else {
m_output_limit_count->set_sensitive(false);
}
} }
void void

View file

@ -141,6 +141,7 @@ PluginSelector::PluginSelector (PluginManager *mgr)
set_response_sensitive (RESPONSE_APPLY, false); set_response_sensitive (RESPONSE_APPLY, false);
get_vbox()->pack_start (*table); get_vbox()->pack_start (*table);
// Notebook tab order must be the same in here as in set_correct_focus()
using namespace Gtk::Notebook_Helpers; using namespace Gtk::Notebook_Helpers;
notebook.pages().push_back (TabElem (lscroller, _("LADSPA"))); notebook.pages().push_back (TabElem (lscroller, _("LADSPA")));
@ -161,6 +162,7 @@ PluginSelector::PluginSelector (PluginManager *mgr)
ladspa_display.signal_button_press_event().connect_notify (mem_fun(*this, &PluginSelector::row_clicked)); ladspa_display.signal_button_press_event().connect_notify (mem_fun(*this, &PluginSelector::row_clicked));
ladspa_display.get_selection()->signal_changed().connect (mem_fun(*this, &PluginSelector::ladspa_display_selection_changed)); ladspa_display.get_selection()->signal_changed().connect (mem_fun(*this, &PluginSelector::ladspa_display_selection_changed));
ladspa_display.grab_focus();
#ifdef VST_SUPPORT #ifdef VST_SUPPORT
if (Config->get_use_vst()) { if (Config->get_use_vst()) {
@ -188,6 +190,43 @@ PluginSelector::PluginSelector (PluginManager *mgr)
#ifdef HAVE_COREAUDIO #ifdef HAVE_COREAUDIO
au_refiller (); au_refiller ();
#endif #endif
signal_show().connect (mem_fun (*this, &PluginSelector::set_correct_focus));
}
/**
* Makes sure keyboard focus is always in the plugin list
* of the selected notebook tab.
**/
void
PluginSelector::set_correct_focus()
{
int cp = notebook.get_current_page();
if (cp == 0) {
ladspa_display.grab_focus();
return;
}
#ifdef VST_SUPPORT
if (Config->get_use_vst()) {
cp--;
if (cp == 0) {
vst_display.grab_focus();
return;
}
}
#endif
#ifdef HAVE_COREAUDIO
cp--;
if (cp == 0) {
au_display.grab_focus();
return;
}
#endif;
} }
void void

View file

@ -147,6 +147,8 @@ class PluginSelector : public ArdourDialog
void btn_apply_clicked(); void btn_apply_clicked();
void use_plugin (ARDOUR::PluginInfoPtr); void use_plugin (ARDOUR::PluginInfoPtr);
void cleanup (); void cleanup ();
void set_correct_focus();
}; };
#endif // __ardour_plugin_selector_h__ #endif // __ardour_plugin_selector_h__

View file

@ -27,6 +27,7 @@
#include <pbd/xml++.h> #include <pbd/xml++.h>
#include <pbd/failed_constructor.h> #include <pbd/failed_constructor.h>
#include <gtkmm/widget.h>
#include <gtkmm2ext/click_box.h> #include <gtkmm2ext/click_box.h>
#include <gtkmm2ext/fastmeter.h> #include <gtkmm2ext/fastmeter.h>
#include <gtkmm2ext/barcontroller.h> #include <gtkmm2ext/barcontroller.h>
@ -51,6 +52,7 @@
#include "plugin_ui.h" #include "plugin_ui.h"
#include "utils.h" #include "utils.h"
#include "gui_thread.h" #include "gui_thread.h"
#include "public_editor.h"
#include "i18n.h" #include "i18n.h"
@ -111,11 +113,23 @@ PluginUIWindow::PluginUIWindow (AudioEngine &engine, boost::shared_ptr<PluginIns
if (h > 600) h = 600; if (h > 600) h = 600;
set_default_size (450, h); set_default_size (450, h);
} }
} }
PluginUIWindow::~PluginUIWindow () PluginUIWindow::~PluginUIWindow ()
{ {
} }
bool
PluginUIWindow::on_key_press_event (GdkEventKey* event)
{
return PublicEditor::instance().on_key_press_event(event);
}
bool
PluginUIWindow::on_key_release_event (GdkEventKey* event)
{
return PublicEditor::instance().on_key_release_event(event);
}
void void
PluginUIWindow::plugin_going_away (ARDOUR::Redirect* ignored) PluginUIWindow::plugin_going_away (ARDOUR::Redirect* ignored)

View file

@ -204,6 +204,9 @@ class PluginUIWindow : public ArdourDialog
void resize_preferred(); void resize_preferred();
virtual bool on_key_press_event (GdkEventKey*);
virtual bool on_key_release_event (GdkEventKey*);
private: private:
PlugUIBase* _pluginui; PlugUIBase* _pluginui;
void plugin_going_away (ARDOUR::Redirect*); void plugin_going_away (ARDOUR::Redirect*);

View file

@ -31,6 +31,7 @@ namespace Gtk {
class Editor; class Editor;
class TimeAxisViewItem; class TimeAxisViewItem;
class TimeAxisView; class TimeAxisView;
class PluginUIWindow;
class PluginSelector; class PluginSelector;
class PlaylistSelector; class PlaylistSelector;
class XMLNode; class XMLNode;
@ -171,6 +172,8 @@ class PublicEditor : public Gtk::Window, public Stateful {
virtual bool canvas_markerview_end_handle_event(GdkEvent* event, ArdourCanvas::Item*,MarkerView*) = 0; virtual bool canvas_markerview_end_handle_event(GdkEvent* event, ArdourCanvas::Item*,MarkerView*) = 0;
static PublicEditor* _instance; static PublicEditor* _instance;
friend class PluginUIWindow;
}; };
#endif // __gtk_ardour_public_editor_h__ #endif // __gtk_ardour_public_editor_h__