convert property_foo().set_value(bar) to property_foo() = bar
[ardour.git] / gtk2_ardour / option_editor.cc
index 86b1a0e23293901568c4491974756fde176ed844..803e17d79b0f3d37afdcbed983c5ca503d6fba2b 100644 (file)
@@ -32,7 +32,7 @@
 #include "ardour_ui.h"
 #include "io_selector.h"
 #include "gain_meter.h"
-#include "library_ui.h"
+#include "sfdb_ui.h"
 #include "utils.h"
 #include "editing.h"
 #include "option_editor.h"
@@ -43,6 +43,7 @@ using namespace ARDOUR;
 using namespace Gtk;
 using namespace Editing;
 using namespace Gtkmm2ext;
+using namespace std;
 
 static const gchar *psync_strings[] = {
        N_("Internal"),
@@ -165,7 +166,7 @@ OptionEditor::OptionEditor (ARDOUR_UI& uip, PublicEditor& ed, Mixer_UI& mixui)
        vbox->set_spacing (4);
        vbox->pack_start(notebook);
 
-       delete_event.connect (mem_fun(*this, &OptionEditor::wm_close));
+       signal_delete_event().connect (mem_fun(*this, &OptionEditor::wm_close));
 
        notebook.set_show_tabs (true);
        notebook.set_show_border (true);
@@ -265,19 +266,19 @@ OptionEditor::set_session (Session *s)
        if (!s->smpte_drop_frames) {
                // non-drop frames
                if (s->smpte_frames_per_second == 24.0)
-                       smpte_fps_combo.get_entry ()->set_text (_("24 FPS"));
+                       smpte_fps_combo.set_active_text (_("24 FPS"));
                else if (s->smpte_frames_per_second == 25.0)
-                       smpte_fps_combo.get_entry ()->set_text (_("25 FPS"));
+                       smpte_fps_combo.set_active_text (_("25 FPS"));
                else if (s->smpte_frames_per_second == 30.0)
-                       smpte_fps_combo.get_entry ()->set_text (_("30 FPS"));
+                       smpte_fps_combo.set_active_text (_("30 FPS"));
                else
-                       smpte_fps_combo.get_entry ()->set_text (_("???"));
+                       smpte_fps_combo.set_active_text (_("???"));
        } else {
                // drop frames
                if (floor(s->smpte_frames_per_second) == 29.0)
-                       smpte_fps_combo.get_entry ()->set_text (_("30 FPS drop"));
+                       smpte_fps_combo.set_active_text (_("30 FPS drop"));
                else
-                       smpte_fps_combo.get_entry ()->set_text (_("???"));
+                       smpte_fps_combo.set_active_text (_("???"));
        }
        
        smpte_offset_clock.set_session (s);
@@ -295,7 +296,7 @@ OptionEditor::set_session (Session *s)
 
        /* set up port assignments */
 
-       map<MIDI::Port*,vector<RadioButton*> >::iterator res;
+       std::map<MIDI::Port*,vector<RadioButton*> >::iterator res;
 
        if (session->mtc_port()) {
                if ((res = port_toggle_buttons.find (session->mtc_port())) != port_toggle_buttons.end()) {
@@ -332,8 +333,8 @@ OptionEditor::set_session (Session *s)
        plugins_on_rec_button.set_active (session->get_recording_plugins ());
        verify_remove_last_capture_button.set_active (Config->get_verify_remove_last_capture());
 
-       layer_mode_combo.get_entry()->set_text (layer_mode_strings[session->get_layer_model()]);
-       xfade_model_combo.get_entry()->set_text (xfade_model_strings[session->get_xfade_model()]);
+       layer_mode_combo.set_active_text (layer_mode_strings[session->get_layer_model()]);
+       xfade_model_combo.set_active_text (xfade_model_strings[session->get_xfade_model()]);
 
        short_xfade_adjustment.set_value ((Crossfade::short_xfade_length() / (float) session->frame_rate()) * 1000.0);
 
@@ -353,33 +354,33 @@ OptionEditor::set_session (Session *s)
 
        // meter stuff
        if (session->meter_falloff() == 0.0f) {
-               meter_falloff_combo.get_entry ()->set_text (_("Off"));
+               meter_falloff_combo.set_active_text (_("Off"));
        } else if (session->meter_falloff() <= 0.3f) {
-               meter_falloff_combo.get_entry ()->set_text (_("Slowest"));
+               meter_falloff_combo.set_active_text (_("Slowest"));
        } else if (session->meter_falloff() <= 0.4f) {
-               meter_falloff_combo.get_entry ()->set_text (_("Slow"));
+               meter_falloff_combo.set_active_text (_("Slow"));
        } else if (session->meter_falloff() <= 0.8f) {
-               meter_falloff_combo.get_entry ()->set_text (_("Medium"));
+               meter_falloff_combo.set_active_text (_("Medium"));
        } else if (session->meter_falloff() <= 1.4f) {
-               meter_falloff_combo.get_entry ()->set_text (_("Fast"));
+               meter_falloff_combo.set_active_text (_("Fast"));
        } else if (session->meter_falloff() <= 2.0f) {
-               meter_falloff_combo.get_entry ()->set_text (_("Faster"));
+               meter_falloff_combo.set_active_text (_("Faster"));
        } else {
-               meter_falloff_combo.get_entry ()->set_text (_("Fastest"));
+               meter_falloff_combo.set_active_text (_("Fastest"));
        }
 
        switch ((int) floor (session->meter_hold())) {
        case 0:
-               meter_hold_combo.get_entry ()->set_text (_("Off"));
+               meter_hold_combo.set_active_text (_("Off"));
                break;
        case 40:
-               meter_hold_combo.get_entry ()->set_text (_("Short"));
+               meter_hold_combo.set_active_text (_("Short"));
                break;
        case 100:
-               meter_hold_combo.get_entry ()->set_text (_("Medium"));
+               meter_hold_combo.set_active_text (_("Medium"));
                break;
        case 200:
-               meter_hold_combo.get_entry ()->set_text (_("Long"));
+               meter_hold_combo.set_active_text (_("Long"));
                break;
        }
        
@@ -409,32 +410,29 @@ OptionEditor::setup_path_options()
 
        session_raid_entry.set_name ("OptionsEntry");
 
-       session_raid_entry.activate.connect (mem_fun(*this, &OptionEditor::raid_path_changed));
-
-       session_raid_entry.signal_focus_in_event().connect (mem_fun (Keyboard::the_keyboard(), &Keyboard::focus_in_handler));
-       session_raid_entry.signal_focus_out_event().connect (bind (mem_fun(*this, &OptionEditor::focus_out_event_handler), &OptionEditor::raid_path_changed));
+       session_raid_entry.signal_activate().connect (mem_fun(*this, &OptionEditor::raid_path_changed));
 
        label = manage(new Label(_("session RAID path")));
        label->set_name ("OptionsLabel");
-       path_table.attach (*label, 0, 1, 0, 1, 0, 0);
-       path_table.attach (session_raid_entry, 1, 3, 0, 1, Gtk::FILL|Gtk::EXPAND, 0);
+       path_table.attach (*label, 0, 1, 0, 1, FILL|EXPAND, FILL);
+       path_table.attach (session_raid_entry, 1, 3, 0, 1, Gtk::FILL|Gtk::EXPAND, FILL);
 
        label = manage(new Label(_("Native Format")));
        label->set_name ("OptionsLabel");
-       path_table.attach (*label, 0, 1, 1, 2, 0, 0);
-       path_table.attach (native_format_combo, 1, 3, 1, 2, Gtk::FILL|Gtk::EXPAND, 0);
+       path_table.attach (*label, 0, 1, 1, 2, FILL|EXPAND, FILL);
+       path_table.attach (native_format_combo, 1, 3, 1, 2, Gtk::FILL|Gtk::EXPAND, FILL);
 
        vector<string> nfstrings = internationalize (native_format_strings);
 
        set_popdown_strings (native_format_combo, nfstrings);
-       native_format_combo.get_popwin()->unmap_event.connect (mem_fun(*this, &OptionEditor::native_format_chosen));
+       native_format_combo.signal_changed().connect (mem_fun(*this, &OptionEditor::native_format_chosen));
 
        fixup_combo_size (native_format_combo, nfstrings);
 
        if (Config->get_native_format_is_bwf()) {
-               native_format_combo.get_entry()->set_text (native_format_strings[0]);
+               native_format_combo.set_active_text (native_format_strings[0]);
        } else {
-               native_format_combo.get_entry()->set_text (native_format_strings[1]);
+               native_format_combo.set_active_text (native_format_strings[1]);
        }
        
        path_table.show_all();
@@ -488,7 +486,7 @@ OptionEditor::setup_fade_options ()
        dumb.push_back (lmode_strings[Session::AddHigher]);
        set_popdown_strings (layer_mode_combo, dumb);
 
-       layer_mode_combo.get_popwin()->unmap_event.connect (mem_fun(*this, &OptionEditor::layer_mode_chosen));
+       layer_mode_combo.signal_changed ().connect (mem_fun(*this, &OptionEditor::layer_mode_chosen));
 
        fixup_combo_size (layer_mode_combo, layer_mode_strings);
 
@@ -506,7 +504,7 @@ OptionEditor::setup_fade_options ()
        dumb.push_back (xfade_model_strings[ShortCrossfade]);
        set_popdown_strings (xfade_model_combo, dumb);
 
-       xfade_model_combo.get_popwin()->unmap_event.connect (mem_fun(*this, &OptionEditor::xfade_model_chosen));
+       xfade_model_combo.signal_changed().connect (mem_fun(*this, &OptionEditor::xfade_model_chosen));
 
        fixup_combo_size (xfade_model_combo, xfade_model_strings);
 
@@ -533,7 +531,7 @@ OptionEditor::setup_fade_options ()
        hbox->pack_start (short_xfade_slider, true, true);
        fade_packer.pack_start (*hbox, false, false);
 
-       short_xfade_adjustment.value_changed.connect (mem_fun(*this, &OptionEditor::short_xfade_adjustment_changed));
+       short_xfade_adjustment.signal_value_changed().connect (mem_fun(*this, &OptionEditor::short_xfade_adjustment_changed));
 
        fade_packer.show_all ();
 }
@@ -550,14 +548,14 @@ OptionEditor::short_xfade_adjustment_changed ()
        }
 }
 
-gint
-OptionEditor::layer_mode_chosen (GdkEventAny* ev)
+void
+OptionEditor::layer_mode_chosen ()
 {
        if (!session) {
-               return FALSE;
+               return;
        }
 
-       string which = layer_mode_combo.get_entry()->get_text ();
+       string which = layer_mode_combo.get_active_text ();
 
        if (which == layer_mode_strings[Session::LaterHigher]) {
                session->set_layer_model (Session::LaterHigher);
@@ -566,24 +564,22 @@ OptionEditor::layer_mode_chosen (GdkEventAny* ev)
        } else if (which == layer_mode_strings[Session::AddHigher]) {
                session->set_layer_model (Session::AddHigher);
        }
-       return FALSE;
 }
 
-gint
-OptionEditor::xfade_model_chosen (GdkEventAny* ev)
+void
+OptionEditor::xfade_model_chosen ()
 {
        if (!session) {
-               return FALSE;
+               return;
        }
 
-       string which = xfade_model_combo.get_entry()->get_text ();
+       string which = xfade_model_combo.get_active_text ();
 
        if (which == xfade_model_strings[FullCrossfade]) {
                session->set_xfade_model (FullCrossfade);
        } else if (which == xfade_model_strings[ShortCrossfade]) {
                session->set_xfade_model (ShortCrossfade);
        }
-       return FALSE;
 }
 
 void
@@ -704,7 +700,7 @@ OptionEditor::setup_display_options ()
        dumb.push_back (_("Medium"));
        dumb.push_back (_("Long"));
        set_popdown_strings (meter_hold_combo, dumb);
-       meter_hold_combo.get_popwin()->unmap_event.connect (mem_fun(*this, &OptionEditor::meter_hold_chosen));
+       meter_hold_combo.signal_changed().connect (mem_fun(*this, &OptionEditor::meter_hold_chosen));
        hbox = manage (new HBox);
        hbox->set_border_width (8);
        hbox->set_spacing (8);
@@ -723,7 +719,7 @@ OptionEditor::setup_display_options ()
        dumb.push_back (_("Faster"));
        dumb.push_back (_("Fastest"));
        set_popdown_strings (meter_falloff_combo, dumb);
-       meter_falloff_combo.get_popwin()->unmap_event.connect (mem_fun(*this, &OptionEditor::meter_falloff_chosen));
+       meter_falloff_combo.signal_changed().connect (mem_fun(*this, &OptionEditor::meter_falloff_chosen));
        hbox = manage (new HBox);
        hbox->set_border_width (8);
        hbox->set_spacing (8);
@@ -746,11 +742,11 @@ OptionEditor::setup_display_options ()
        follow_playhead_button.set_active (editor.follow_playhead());
 }
 
-gint
-OptionEditor::meter_hold_chosen (GdkEventAny* ev)
+void
+OptionEditor::meter_hold_chosen ()
 {
        if (session) {
-               string str = meter_hold_combo.get_entry()->get_text();
+               string str = meter_hold_combo.get_active_text();
                
                if (str == _("Off")) {
                        session->set_meter_hold (0);
@@ -762,15 +758,13 @@ OptionEditor::meter_hold_chosen (GdkEventAny* ev)
                        session->set_meter_hold (200);
                }
        }
-
-       return TRUE;
 }
 
-gint
-OptionEditor::meter_falloff_chosen (GdkEventAny* ev)
+void
+OptionEditor::meter_falloff_chosen ()
 {
        if (session) {
-               string str = meter_falloff_combo.get_entry()->get_text();
+               string str = meter_falloff_combo.get_active_text();
                
                if (str == _("Off")) {
                        session->set_meter_falloff (0.0f);
@@ -788,8 +782,6 @@ OptionEditor::meter_falloff_chosen (GdkEventAny* ev)
                        session->set_meter_falloff (2.5f);
                }
        }
-
-       return TRUE;
 }
 
 void
@@ -832,11 +824,8 @@ OptionEditor::setup_sync_options ()
        slave_type_label->set_name("OptionsLabel");
        positional_sync_strings = internationalize (psync_strings);
 
-       slave_type_combo.set_use_arrows_always (true);
-       slave_type_combo.set_value_in_list (true, false);
-       slave_type_combo.get_entry()->set_editable (false);
-       slave_type_combo.get_entry()->set_name ("OptionsEntry");
-       slave_type_combo.get_popwin()->unmap_event.connect (mem_fun(*this, &OptionEditor::slave_type_chosen));
+       slave_type_combo.set_name ("OptionsEntry");
+       slave_type_combo.signal_changed().connect (mem_fun(*this, &OptionEditor::slave_type_chosen));
 
        dumb.clear ();
        dumb.push_back (X_("24 FPS"));
@@ -845,7 +834,7 @@ OptionEditor::setup_sync_options ()
        dumb.push_back (X_("30 FPS non-drop"));
        
        set_popdown_strings (smpte_fps_combo, dumb);
-       smpte_fps_combo.get_popwin()->unmap_event.connect (mem_fun(*this, &OptionEditor::smpte_fps_chosen));
+       smpte_fps_combo.signal_changed().connect (mem_fun(*this, &OptionEditor::smpte_fps_chosen));
        
        smpte_offset_clock.set_mode (AudioClock::SMPTE);
        smpte_offset_clock.ValueChanged.connect (mem_fun(*this, &OptionEditor::smpte_offset_chosen));
@@ -900,7 +889,7 @@ OptionEditor::setup_sync_options ()
 
        jack_time_master_button.set_active (Config->get_jack_time_master());
 
-       send_mtc_button.button_press_event.connect (bind (mem_fun(*this, &OptionEditor::send_mtc_toggled), &send_mtc_button));
+       send_mtc_button.signal_button_press_event().connect (bind (mem_fun(*this, &OptionEditor::send_mtc_toggled), &send_mtc_button));
        jack_time_master_button.signal_clicked().connect (mem_fun(*this, &OptionEditor::jack_time_master_clicked));
        smpte_offset_negative_button.signal_clicked().connect (mem_fun(*this, &OptionEditor::smpte_offset_negative_clicked));
 }
@@ -913,11 +902,11 @@ OptionEditor::smpte_offset_negative_clicked ()
        }
 }
 
-gint
-OptionEditor::smpte_fps_chosen (GdkEventAny* ev)
+void
+OptionEditor::smpte_fps_chosen ()
 {
        if (session) {
-               string str = smpte_fps_combo.get_entry()->get_text();
+               string str = smpte_fps_combo.get_active_text();
                
                if (str == X_("24 FPS")) {
                        session->set_smpte_type (24.0, false);
@@ -929,8 +918,6 @@ OptionEditor::smpte_fps_chosen (GdkEventAny* ev)
                        session->set_smpte_type (30.0, false);
                }
        }
-       
-       return TRUE;
 }
 
 void
@@ -952,9 +939,6 @@ OptionEditor::setup_midi_options ()
        int n;
        ToggleButton* tb;
        RadioButton* rb;
-       RadioButton* first_mtc_button = 0;
-       RadioButton* first_mmc_button = 0;
-       RadioButton* first_midi_button = 0;
 
        Gtk::Table* table = manage (new Table (ports.size() + 4, 9));
 
@@ -979,7 +963,7 @@ OptionEditor::setup_midi_options ()
 
                newpair.first = i->second;
 
-               table->attach (*(manage (new Label (i->first))), 0, 1, n+2, n+3, 0, 0);
+               table->attach (*(manage (new Label (i->first))), 0, 1, n+2, n+3,FILL|EXPAND, FILL );
                tb = manage (new ToggleButton (_("online")));
                tb->set_name ("OptionEditorToggleButton");
 
@@ -994,32 +978,33 @@ OptionEditor::setup_midi_options ()
                }
 
                tb->set_active (!(*i).second->input()->offline());
-               tb->button_press_event.connect (bind (mem_fun(*this, &OptionEditor::port_online_toggled), (*i).second, tb));
+               tb->signal_button_press_event().connect (bind (mem_fun(*this, &OptionEditor::port_online_toggled), (*i).second, tb));
                (*i).second->input()->OfflineStatusChanged.connect (bind (mem_fun(*this, &OptionEditor::map_port_online), (*i).second, tb));
-               table->attach (*tb, 1, 2, n+2, n+3, 0, 0);
+               table->attach (*tb, 1, 2, n+2, n+3, FILL|EXPAND, FILL);
 
                tb = manage (new ToggleButton ());
                tb->set_name ("OptionEditorToggleButton");
-               tb->button_press_event.connect (bind (mem_fun(*this, &OptionEditor::port_trace_in_toggled), (*i).second, tb));
+               tb->signal_button_press_event().connect (bind (mem_fun(*this, &OptionEditor::port_trace_in_toggled), (*i).second, tb));
                tb->set_size_request (10, 10);
-               table->attach (*tb, 2, 3, n+2, n+3, 0, 0);
+               table->attach (*tb, 2, 3, n+2, n+3, FILL|EXPAND, FILL);
 
                tb = manage (new ToggleButton ());
                tb->set_name ("OptionEditorToggleButton");
-               tb->button_press_event.connect (bind (mem_fun(*this, &OptionEditor::port_trace_out_toggled), (*i).second, tb));
+               tb->signal_button_press_event().connect (bind (mem_fun(*this, &OptionEditor::port_trace_out_toggled), (*i).second, tb));
                tb->set_size_request (10, 10);
-               table->attach (*tb, 3, 4, n+2, n+3, 0, 0);
+               table->attach (*tb, 3, 4, n+2, n+3, FILL|EXPAND, FILL);
 
                rb = manage (new RadioButton ());
                newpair.second.push_back (rb);
                rb->set_name ("OptionEditorToggleButton");
                if (n == 0) {
-                       first_mtc_button = rb;
+                       mtc_button_group = rb->get_group();
                } else {
-                       rb->set_group (first_mtc_button->group());
+                       rb->set_group (mtc_button_group);
+
                }
-               table->attach (*rb, 4, 5, n+2, n+3, 0, 0);
-               rb->button_press_event.connect (bind (mem_fun(*this, &OptionEditor::mtc_port_chosen), (*i).second, rb));
+               table->attach (*rb, 4, 5, n+2, n+3, FILL|EXPAND, FILL);
+               rb->signal_button_press_event().connect (bind (mem_fun(*this, &OptionEditor::mtc_port_chosen), (*i).second, rb));
 
                if (Config->get_mtc_port_name() == i->first) {
                        rb->set_active (true);
@@ -1029,12 +1014,12 @@ OptionEditor::setup_midi_options ()
                newpair.second.push_back (rb);
                rb->set_name ("OptionEditorToggleButton");
                if (n == 0) {
-                       first_mmc_button = rb;
+                       mmc_button_group = rb->get_group();
                } else {
-                       rb->set_group (first_mmc_button->group());
+                       rb->set_group (mmc_button_group);
                }
-               table->attach (*rb, 6, 7, n+2, n+3, 0, 0);
-               rb->button_press_event.connect (bind (mem_fun(*this, &OptionEditor::mmc_port_chosen), (*i).second, rb));
+               table->attach (*rb, 6, 7, n+2, n+3, FILL|EXPAND, FILL);
+               rb->signal_button_press_event().connect (bind (mem_fun(*this, &OptionEditor::mmc_port_chosen), (*i).second, rb));
 
                if (Config->get_mmc_port_name() == i->first) {
                        rb->set_active (true);
@@ -1044,12 +1029,12 @@ OptionEditor::setup_midi_options ()
                newpair.second.push_back (rb);
                rb->set_name ("OptionEditorToggleButton");
                if (n == 0) {
-                       first_midi_button = rb;
+                       midi_button_group = rb->get_group();
                } else {
-                       rb->set_group (first_midi_button->group());
+                       rb->set_group (midi_button_group);
                }
-               table->attach (*rb, 8, 9, n+2, n+3, 0, 0);
-               rb->button_press_event.connect (bind (mem_fun(*this, &OptionEditor::midi_port_chosen), (*i).second, rb));
+               table->attach (*rb, 8, 9, n+2, n+3, FILL|EXPAND, FILL);
+               rb->signal_button_press_event().connect (bind (mem_fun(*this, &OptionEditor::midi_port_chosen), (*i).second, rb));
 
                if (Config->get_midi_port_name() == i->first) {
                        rb->set_active (true);
@@ -1097,10 +1082,10 @@ OptionEditor::setup_midi_options ()
 
        midi_packer.pack_start (*mmcbuttonbox, false, false);
 
-       mmc_control_button.toggled.connect (bind (mem_fun(*this, &OptionEditor::mmc_control_toggled), &mmc_control_button));
-       midi_control_button.toggled.connect (bind (mem_fun(*this, &OptionEditor::midi_control_toggled), &midi_control_button));
-       send_mmc_button.toggled.connect (bind (mem_fun(*this, &OptionEditor::send_mmc_toggled), &send_mmc_button));
-       midi_feedback_button.toggled.connect (bind (mem_fun(*this, &OptionEditor::midi_feedback_toggled), &midi_feedback_button));
+       mmc_control_button.signal_toggled().connect (bind (mem_fun(*this, &OptionEditor::mmc_control_toggled), &mmc_control_button));
+       midi_control_button.signal_toggled().connect (bind (mem_fun(*this, &OptionEditor::midi_control_toggled), &midi_control_button));
+       send_mmc_button.signal_toggled().connect (bind (mem_fun(*this, &OptionEditor::send_mmc_toggled), &send_mmc_button));
+       midi_feedback_button.signal_toggled().connect (bind (mem_fun(*this, &OptionEditor::midi_feedback_toggled), &midi_feedback_button));
 }
 
 gint
@@ -1290,24 +1275,18 @@ OptionEditor::raid_path_changed ()
 void
 OptionEditor::click_browse_clicked ()
 {
-       SoundFileSelector& sfdb (ARDOUR_UI::instance()->get_sfdb_window());
-       sigc::connection c = sfdb.Action.connect (mem_fun(*this, &OptionEditor::click_chosen));
+       SoundFileChooser sfdb (_("Choose Click"));
        
-       sfdb.run (_("Use as click"), false, true);
-       c.disconnect ();
+       int result = sfdb.run ();
+
+       if (result == Gtk::RESPONSE_OK) {
+               click_chosen(sfdb.get_filename());
+       }
 }
 
 void
-OptionEditor::click_chosen (vector<string> paths, bool ignore)
+OptionEditor::click_chosen (string path)
 {
-       string path;
-
-       if (!paths.empty()) {
-               path = paths.front();
-       } else {
-               return;
-       }
-
        click_path_entry.set_text (path);
        click_sound_changed ();
 }
@@ -1315,25 +1294,18 @@ OptionEditor::click_chosen (vector<string> paths, bool ignore)
 void
 OptionEditor::click_emphasis_browse_clicked ()
 {
-       SoundFileSelector& sfdb (ARDOUR_UI::instance()->get_sfdb_window());
-       sigc::connection c = sfdb.Action.connect (mem_fun(*this, &OptionEditor::click_emphasis_chosen));
+       SoundFileChooser sfdb (_("Choose Click Emphasis"));
 
-       sfdb.run (_("Use as click emphasis"), false, true);
-       c.disconnect ();
+       int result = sfdb.run ();
 
+       if (result == Gtk::RESPONSE_OK) {
+               click_emphasis_chosen (sfdb.get_filename());
+       }
 }
 
 void
-OptionEditor::click_emphasis_chosen (vector<string> paths, bool ignore)
+OptionEditor::click_emphasis_chosen (std::string path)
 {      
-       string path;
-
-       if (!paths.empty()) {
-               path = paths.front();
-       } else {
-               return;
-       }
-
        click_emphasis_path_entry.set_text (path);
        click_emphasis_sound_changed ();
 }
@@ -1427,7 +1399,6 @@ void
 OptionEditor::just_close_win()
 {
        hide_all();
-       ARDOUR_UI::instance()->allow_focus(false);
 }
 
 void
@@ -1443,16 +1414,16 @@ OptionEditor::session_control_changed (Session::ControlType t)
        case Session::SlaveType:
                switch (session->slave_source()) {
                case Session::None:
-                       slave_type_combo.get_entry()->set_text (positional_sync_strings[Session::None]);
+                       slave_type_combo.set_active_text (positional_sync_strings[Session::None]);
                        break;
                case Session::MTC:
-                       slave_type_combo.get_entry()->set_text (positional_sync_strings[Session::MTC]);
+                       slave_type_combo.set_active_text (positional_sync_strings[Session::MTC]);
                        break;
                case Session::JACK:
-                       slave_type_combo.get_entry()->set_text (positional_sync_strings[Session::JACK]);
+                       slave_type_combo.set_active_text (positional_sync_strings[Session::JACK]);
                        break;
                default:
-                       slave_type_combo.get_entry()->set_text (_("--unknown--"));
+                       slave_type_combo.set_active_text (_("--unknown--"));
                        break;
                }
                
@@ -1483,35 +1454,33 @@ OptionEditor::session_control_changed (Session::ControlType t)
        }
 }
 
-gint
-OptionEditor::native_format_chosen (GdkEventAny *ignored)
+void
+OptionEditor::native_format_chosen ()
 {
        string which;
 
        if (session == 0) {
-               return FALSE;
+               return;
        }
 
-       bool use_bwf = (native_format_combo.get_entry()->get_text() == native_format_strings[0]);
+       bool use_bwf = (native_format_combo.get_active_text() == native_format_strings[0]);
 
        if (use_bwf != Config->get_native_format_is_bwf()) {
                Config->set_native_format_is_bwf (use_bwf);
                session->reset_native_file_format ();
        }
-
-       return TRUE;
 }
 
-gint
-OptionEditor::slave_type_chosen (GdkEventAny *ignored)
+void
+OptionEditor::slave_type_chosen ()
 {
        string which;
 
        if (session == 0) {
-               return FALSE;
+               return;
        }
 
-       which = slave_type_combo.get_entry()->get_text();
+       which = slave_type_combo.get_active_text();
 
        if (which == positional_sync_strings[Session::None]) {
                session->request_slave_source (Session::None);
@@ -1520,7 +1489,6 @@ OptionEditor::slave_type_chosen (GdkEventAny *ignored)
        } else if (which == positional_sync_strings[Session::JACK]) {
                session->request_slave_source (Session::JACK);
        } 
-       return FALSE;
 }
 
 void
@@ -1548,12 +1516,10 @@ OptionEditor::setup_click_editor ()
        click_path_entry.set_name ("OptionsEntry");
        click_emphasis_path_entry.set_name ("OptionsEntry");
        
-       click_path_entry.activate.connect (mem_fun(*this, &OptionEditor::click_sound_changed));
-       click_emphasis_path_entry.activate.connect (mem_fun(*this, &OptionEditor::click_emphasis_sound_changed));
+       click_path_entry.signal_activate().connect (mem_fun(*this, &OptionEditor::click_sound_changed));
+       click_emphasis_path_entry.signal_activate().connect (mem_fun(*this, &OptionEditor::click_emphasis_sound_changed));
 
-       click_path_entry.signal_focus_in_event().connect (mem_fun (Keyboard::the_keyboard(), &Keyboard::focus_in_handler));
        click_path_entry.signal_focus_out_event().connect (bind (mem_fun(*this, &OptionEditor::focus_out_event_handler), &OptionEditor::click_sound_changed));
-       click_emphasis_path_entry.signal_focus_in_event().connect (mem_fun (Keyboard::the_keyboard(), &Keyboard::focus_in_handler));
        click_emphasis_path_entry.signal_focus_out_event().connect (bind (mem_fun(*this, &OptionEditor::focus_out_event_handler), &OptionEditor::click_emphasis_sound_changed));
 
        click_browse_button.set_name ("EditorGTKButton");
@@ -1571,15 +1537,15 @@ OptionEditor::setup_click_editor ()
        
        label = manage(new Label(_("Click audio file")));
        label->set_name ("OptionsLabel");
-       click_table.attach (*label, 0, 1, 0, 1, 0, 0);
-       click_table.attach (click_path_entry, 1, 2, 0, 1, Gtk::FILL|Gtk::EXPAND, 0);
-       click_table.attach (click_browse_button, 2, 3, 0, 1, 0, 0);
+       click_table.attach (*label, 0, 1, 0, 1, FILL|EXPAND, FILL);
+       click_table.attach (click_path_entry, 1, 2, 0, 1, Gtk::FILL|Gtk::EXPAND, FILL);
+       click_table.attach (click_browse_button, 2, 3, 0, 1, FILL|EXPAND, FILL);
        
        label = manage(new Label(_("Click emphasis audiofile")));
        label->set_name ("OptionsLabel");
-       click_table.attach (*label, 0, 1, 1, 2, 0, 0);
-       click_table.attach (click_emphasis_path_entry, 1, 2, 1, 2, Gtk::FILL|Gtk::EXPAND, 0);
-       click_table.attach (click_emphasis_browse_button, 2, 3, 1, 2, 0, 0);
+       click_table.attach (*label, 0, 1, 1, 2, FILL|EXPAND, FILL);
+       click_table.attach (click_emphasis_path_entry, 1, 2, 1, 2, Gtk::FILL|Gtk::EXPAND, FILL);
+       click_table.attach (click_emphasis_browse_button, 2, 3, 1, 2, FILL|EXPAND, FILL);
 
        hpacker->set_spacing (10);
        hpacker->pack_start (*click_io_selector, false, false);
@@ -1634,11 +1600,11 @@ OptionEditor::connect_audition_editor ()
        auditioner_gpm->show_all ();
 }
 
-gint
+bool
 OptionEditor::focus_out_event_handler (GdkEventFocus* ev, void (OptionEditor::*pmf)()) 
 {
        (this->*pmf)();
-       return Keyboard::the_keyboard().focus_out_handler (ev);
+       return false;
 }
 
 void
@@ -1651,30 +1617,31 @@ OptionEditor::setup_misc_options()
        misc_packer.set_spacing (3);
        misc_packer.pack_start (*table, true, true);
 
-       table->attach (hw_monitor_button, 0, 1, 0, 1, Gtk::FILL, 0, 8, 0);
-       table->attach (sw_monitor_button, 0, 1, 1, 2, Gtk::FILL, 0, 8, 0);
-       table->attach (plugins_stop_button, 0, 1, 2, 3, Gtk::FILL, 0, 8, 0);
-       table->attach (plugins_on_rec_button, 0, 1, 3, 4, Gtk::FILL, 0, 8, 0);
-       table->attach (verify_remove_last_capture_button, 0, 1, 4, 5, Gtk::FILL, 0, 8, 0);
+       table->attach (hw_monitor_button, 0, 1, 0, 1, Gtk::FILL, FILL, 8, 0);
+       table->attach (sw_monitor_button, 0, 1, 1, 2, Gtk::FILL, FILL, 8, 0);
+       table->attach (plugins_stop_button, 0, 1, 2, 3, Gtk::FILL, FILL, 8, 0);
+       table->attach (plugins_on_rec_button, 0, 1, 3, 4, Gtk::FILL, FILL, 8, 0);
+       table->attach (verify_remove_last_capture_button, 0, 1, 4, 5, Gtk::FILL, FILL, 8, 0);
 
-       table->attach (stop_rec_on_xrun_button, 1, 2, 0, 1, Gtk::FILL, 0, 8, 0);
-       table->attach (stop_at_end_button, 1, 2, 1, 2, Gtk::FILL, 0, 8, 0);
-       table->attach (debug_keyboard_button, 1, 2, 2, 3, Gtk::FILL, 0, 8, 0);
-       table->attach (speed_quieten_button, 1, 2, 3, 4, Gtk::FILL, 0, 8, 0);
+       table->attach (stop_rec_on_xrun_button, 1, 2, 0, 1, Gtk::FILL, FILL, 8, 0);
+       table->attach (stop_at_end_button, 1, 2, 1, 2, Gtk::FILL, FILL, 8, 0);
+       table->attach (debug_keyboard_button, 1, 2, 2, 3, Gtk::FILL, FILL, 8, 0);
+       table->attach (speed_quieten_button, 1, 2, 3, 4, Gtk::FILL, FILL, 8, 0);
 
        Gtk::VBox* connect_box = manage (new VBox);
        connect_box->set_spacing (3);
        connect_box->set_border_width (8);
 
-       auto_connect_output_manual_button.set_group (auto_connect_output_master_button.get_group());
-       auto_connect_output_physical_button.set_group (auto_connect_output_master_button.get_group());
+       auto_connect_output_button_group = auto_connect_output_master_button.get_group();
+       auto_connect_output_manual_button.set_group (auto_connect_output_button_group);
+       auto_connect_output_physical_button.set_group (auto_connect_output_button_group);
 
        Gtk::HBox* useless_box = manage (new HBox);
        useless_box->pack_start (auto_connect_inputs_button, false, false);
        connect_box->pack_start (*useless_box, false, false);
        connect_box->pack_start (auto_connect_output_master_button, false, false);
        connect_box->pack_start (auto_connect_output_physical_button, false, false);
-       connect_box->pack_start (auto_connect_output_manual_button, false);
+       connect_box->pack_start (auto_connect_output_manual_button, false, false);
 
        misc_packer.pack_start (*connect_box, false, false);
        
@@ -1849,11 +1816,11 @@ OptionEditor::setup_keyboard_options ()
        }
 
        set_popdown_strings (edit_modifier_combo, dumb);
-       edit_modifier_combo.get_popwin()->unmap_event.connect (mem_fun(*this, &OptionEditor::edit_modifier_chosen));
+       edit_modifier_combo.signal_changed().connect (mem_fun(*this, &OptionEditor::edit_modifier_chosen));
 
        for (int x = 0; modifiers[x].name; ++x) {
                if (modifiers[x].modifier == Keyboard::edit_modifier ()) {
-                       edit_modifier_combo.get_entry()->set_text (_(modifiers[x].name));
+                       edit_modifier_combo.set_active_text (_(modifiers[x].name));
                        break;
                }
        }
@@ -1862,25 +1829,25 @@ OptionEditor::setup_keyboard_options ()
        label->set_name ("OptionsLabel");
        label->set_alignment (1.0, 0.5);
                
-       keyboard_mouse_table.attach (*label, 0, 1, 0, 1, Gtk::FILL|Gtk::EXPAND, 0);
-       keyboard_mouse_table.attach (edit_modifier_combo, 1, 2, 0, 1, Gtk::FILL|Gtk::EXPAND, 0);
+       keyboard_mouse_table.attach (*label, 0, 1, 0, 1, Gtk::FILL|Gtk::EXPAND, FILL);
+       keyboard_mouse_table.attach (edit_modifier_combo, 1, 2, 0, 1, Gtk::FILL|Gtk::EXPAND, FILL);
 
        label = manage (new Label (_("+ button")));
        label->set_name ("OptionsLabel");
        
-       keyboard_mouse_table.attach (*label, 3, 4, 0, 1, Gtk::FILL|Gtk::EXPAND, 0);
-       keyboard_mouse_table.attach (edit_button_spin, 4, 5, 0, 1, Gtk::FILL|Gtk::EXPAND, 0);
+       keyboard_mouse_table.attach (*label, 3, 4, 0, 1, Gtk::FILL|Gtk::EXPAND, FILL);
+       keyboard_mouse_table.attach (edit_button_spin, 4, 5, 0, 1, Gtk::FILL|Gtk::EXPAND, FILL);
 
        edit_button_spin.set_name ("OptionsEntry");
        edit_button_adjustment.set_value (Keyboard::edit_button());
-       edit_button_adjustment.value_changed.connect (mem_fun(*this, &OptionEditor::edit_button_changed));
+       edit_button_adjustment.signal_value_changed().connect (mem_fun(*this, &OptionEditor::edit_button_changed));
 
        set_popdown_strings (delete_modifier_combo, dumb);
-       delete_modifier_combo.get_popwin()->unmap_event.connect (mem_fun(*this, &OptionEditor::delete_modifier_chosen));
+       delete_modifier_combo.signal_changed().connect (mem_fun(*this, &OptionEditor::delete_modifier_chosen));
 
        for (int x = 0; modifiers[x].name; ++x) {
                if (modifiers[x].modifier == Keyboard::delete_modifier ()) {
-                       delete_modifier_combo.get_entry()->set_text (_(modifiers[x].name));
+                       delete_modifier_combo.set_active_text (_(modifiers[x].name));
                        break;
                }
        }
@@ -1889,25 +1856,25 @@ OptionEditor::setup_keyboard_options ()
        label->set_name ("OptionsLabel");
        label->set_alignment (1.0, 0.5);
                
-       keyboard_mouse_table.attach (*label, 0, 1, 1, 2, Gtk::FILL|Gtk::EXPAND, 0);
-       keyboard_mouse_table.attach (delete_modifier_combo, 1, 2, 1, 2, Gtk::FILL|Gtk::EXPAND, 0);
+       keyboard_mouse_table.attach (*label, 0, 1, 1, 2, Gtk::FILL|Gtk::EXPAND, FILL);
+       keyboard_mouse_table.attach (delete_modifier_combo, 1, 2, 1, 2, Gtk::FILL|Gtk::EXPAND, FILL);
 
        label = manage (new Label (_("+ button")));
        label->set_name ("OptionsLabel");
 
-       keyboard_mouse_table.attach (*label, 3, 4, 1, 2, Gtk::FILL|Gtk::EXPAND, 0);
-       keyboard_mouse_table.attach (delete_button_spin, 4, 5, 1, 2, Gtk::FILL|Gtk::EXPAND, 0);
+       keyboard_mouse_table.attach (*label, 3, 4, 1, 2, Gtk::FILL|Gtk::EXPAND, FILL);
+       keyboard_mouse_table.attach (delete_button_spin, 4, 5, 1, 2, Gtk::FILL|Gtk::EXPAND, FILL);
 
        delete_button_spin.set_name ("OptionsEntry");
        delete_button_adjustment.set_value (Keyboard::delete_button());
-       delete_button_adjustment.value_changed.connect (mem_fun(*this, &OptionEditor::delete_button_changed));
+       delete_button_adjustment.signal_value_changed().connect (mem_fun(*this, &OptionEditor::delete_button_changed));
 
        set_popdown_strings (snap_modifier_combo, dumb);
-       snap_modifier_combo.get_popwin()->unmap_event.connect (mem_fun(*this, &OptionEditor::snap_modifier_chosen));
+       snap_modifier_combo.signal_changed().connect (mem_fun(*this, &OptionEditor::snap_modifier_chosen));
        
        for (int x = 0; modifiers[x].name; ++x) {
                if (modifiers[x].modifier == (guint) Keyboard::snap_modifier ()) {
-                       snap_modifier_combo.get_entry()->set_text (_(modifiers[x].name));
+                       snap_modifier_combo.set_active_text (_(modifiers[x].name));
                        break;
                }
        }
@@ -1916,16 +1883,16 @@ OptionEditor::setup_keyboard_options ()
        label->set_name ("OptionsLabel");
        label->set_alignment (1.0, 0.5);
        
-       keyboard_mouse_table.attach (*label, 0, 1, 2, 3, Gtk::FILL|Gtk::EXPAND, 0);
-       keyboard_mouse_table.attach (snap_modifier_combo, 1, 2, 2, 3, Gtk::FILL|Gtk::EXPAND, 0);
+       keyboard_mouse_table.attach (*label, 0, 1, 2, 3, Gtk::FILL|Gtk::EXPAND, FILL);
+       keyboard_mouse_table.attach (snap_modifier_combo, 1, 2, 2, 3, Gtk::FILL|Gtk::EXPAND, FILL);
 }
 
-gint
-OptionEditor::edit_modifier_chosen (GdkEventAny *ev)
+void
+OptionEditor::edit_modifier_chosen ()
 {
        string txt;
        
-       txt = edit_modifier_combo.get_entry()->get_text();
+       txt = edit_modifier_combo.get_active_text();
 
        for (int i = 0; modifiers[i].name; ++i) {
                if (txt == _(modifiers[i].name)) {
@@ -1933,15 +1900,14 @@ OptionEditor::edit_modifier_chosen (GdkEventAny *ev)
                        break;
                }
        }
-       return TRUE;
 }
 
-gint
-OptionEditor::delete_modifier_chosen (GdkEventAny *ev)
+void
+OptionEditor::delete_modifier_chosen ()
 {
        string txt;
        
-       txt = delete_modifier_combo.get_entry()->get_text();
+       txt = delete_modifier_combo.get_active_text();
 
        for (int i = 0; modifiers[i].name; ++i) {
                if (txt == _(modifiers[i].name)) {
@@ -1949,15 +1915,14 @@ OptionEditor::delete_modifier_chosen (GdkEventAny *ev)
                        break;
                }
        }
-       return TRUE;
 }
 
-gint
-OptionEditor::snap_modifier_chosen (GdkEventAny *ev)
+void
+OptionEditor::snap_modifier_chosen ()
 {
        string txt;
        
-       txt = snap_modifier_combo.get_entry()->get_text();
+       txt = snap_modifier_combo.get_active_text();
 
        for (int i = 0; modifiers[i].name; ++i) {
                if (txt == _(modifiers[i].name)) {
@@ -1965,7 +1930,6 @@ OptionEditor::snap_modifier_chosen (GdkEventAny *ev)
                        break;
                }
        }
-       return TRUE;
 }
 
 void
@@ -1981,7 +1945,7 @@ OptionEditor::edit_button_changed ()
 }
 
 void
-OptionEditor::fixup_combo_size (Gtk::Combo& combo, vector<string>& strings)
+OptionEditor::fixup_combo_size (Gtk::ComboBoxText& combo, vector<string>& strings)
 {
        /* find the widest string */
 
@@ -2006,7 +1970,7 @@ OptionEditor::fixup_combo_size (Gtk::Combo& combo, vector<string>& strings)
 
        const guint32 FUDGE = 10; // Combo's are stupid - they steal space from the entry for the button
 
-       set_size_request_to_display_given_text (*combo.get_entry(), maxstring.c_str(), 10 + FUDGE, 10);
+       set_size_request_to_display_given_text (combo, maxstring.c_str(), 10 + FUDGE, 10);
 }
 
 void