nothing much.. a few more image from pixmaps
[ardour.git] / gtk2_ardour / option_editor.cc
index d13c219c5d2cbdd52e0f49dc73ae7fcdd45c42ea..c0ade537fc9f66355ed487763cc29b84ca65935b 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 (slot (*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);
 
@@ -349,43 +350,43 @@ OptionEditor::set_session (Session *s)
        if (session->mtc_port()) {
                dumb.push_back (positional_sync_strings[Session::MTC]);
        } 
-       slave_type_combo.set_popdown_strings (dumb);
+       set_popdown_strings (slave_type_combo, dumb);
 
        // 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;
        }
        
        session_control_changed (Session::SlaveType);
        session_control_changed (Session::AlignChoice);
-       session->ControlChanged.connect (slot (*this, &OptionEditor::queue_session_control_changed));
+       session->ControlChanged.connect (mem_fun(*this, &OptionEditor::queue_session_control_changed));
 }
 
 OptionEditor::~OptionEditor ()
@@ -409,35 +410,32 @@ OptionEditor::setup_path_options()
 
        session_raid_entry.set_name ("OptionsEntry");
 
-       session_raid_entry.activate.connect (slot (*this, &OptionEditor::raid_path_changed));
+       session_raid_entry.signal_activate().connect (mem_fun(*this, &OptionEditor::raid_path_changed));
 
-       session_raid_entry.signal_focus_in_event().connect (slot (Keyboard::the_keyboard(), &Keyboard::focus_in_handler));
-       session_raid_entry.signal_focus_out_event().connect (bind (slot (*this, &OptionEditor::focus_out_event_handler), &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));
 
        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);
 
-       native_format_combo.set_popdown_strings (nfstrings),
-       native_format_combo.get_entry()->set_editable (false);
-       native_format_combo.get_entry()->set_name ("OptionsEntry");
-       native_format_combo.set_use_arrows_always (true);
-       native_format_combo.get_popwin()->unmap_event.connect (slot (*this, &OptionEditor::native_format_chosen));
+       set_popdown_strings (native_format_combo, nfstrings);
+       native_format_combo.signal_unmap_event().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();
@@ -489,13 +487,9 @@ OptionEditor::setup_fade_options ()
        dumb.push_back (lmode_strings[Session::LaterHigher]);
        dumb.push_back (lmode_strings[Session::MoveAddHigher]);
        dumb.push_back (lmode_strings[Session::AddHigher]);
-       layer_mode_combo.set_popdown_strings (dumb);
+       set_popdown_strings (layer_mode_combo, dumb);
 
-       layer_mode_combo.set_use_arrows_always (true);
-       layer_mode_combo.set_value_in_list (true, false);
-       layer_mode_combo.get_entry()->set_editable (false);
-       layer_mode_combo.get_entry()->set_name ("OptionsEntry");
-       layer_mode_combo.get_popwin()->unmap_event.connect (slot (*this, &OptionEditor::layer_mode_chosen));
+       layer_mode_combo.signal_unmap_event().connect (mem_fun(*this, &OptionEditor::layer_mode_chosen));
 
        fixup_combo_size (layer_mode_combo, layer_mode_strings);
 
@@ -511,13 +505,9 @@ OptionEditor::setup_fade_options ()
        dumb.clear ();
        dumb.push_back (xfade_model_strings[FullCrossfade]);
        dumb.push_back (xfade_model_strings[ShortCrossfade]);
-       xfade_model_combo.set_popdown_strings (dumb);
+       set_popdown_strings (xfade_model_combo, dumb);
 
-       xfade_model_combo.set_use_arrows_always (true);
-       xfade_model_combo.set_value_in_list (true, false);
-       xfade_model_combo.get_entry()->set_editable (false);
-       xfade_model_combo.get_entry()->set_name ("OptionsEntry");
-       xfade_model_combo.get_popwin()->unmap_event.connect (slot (*this, &OptionEditor::xfade_model_chosen));
+       xfade_model_combo.signal_unmap_event().connect (mem_fun(*this, &OptionEditor::xfade_model_chosen));
 
        fixup_combo_size (xfade_model_combo, xfade_model_strings);
 
@@ -531,8 +521,8 @@ OptionEditor::setup_fade_options ()
        auto_xfade_button.set_active (Config->get_auto_xfade());
        /* xfade and layer mode active requires session */
 
-       auto_xfade_button.signal_clicked().connect (slot (*this, &OptionEditor::auto_xfade_clicked));
-       xfade_active_button.signal_clicked().connect (slot (*this, &OptionEditor::xfade_active_clicked));
+       auto_xfade_button.signal_clicked().connect (mem_fun(*this, &OptionEditor::auto_xfade_clicked));
+       xfade_active_button.signal_clicked().connect (mem_fun(*this, &OptionEditor::xfade_active_clicked));
        
        Label* short_xfade_label = manage (new Label (_("Short crossfade length (msecs)")));
        short_xfade_label->set_name ("OptionsLabel");
@@ -544,7 +534,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 (slot (*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 ();
 }
@@ -568,7 +558,7 @@ OptionEditor::layer_mode_chosen (GdkEventAny* ev)
                return FALSE;
        }
 
-       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);
@@ -587,7 +577,7 @@ OptionEditor::xfade_model_chosen (GdkEventAny* ev)
                return FALSE;
        }
 
-       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);
@@ -630,9 +620,9 @@ OptionEditor::setup_solo_options ()
        solo_packer.pack_start (*hbox, false, false);
 
        solo_via_bus_button.signal_clicked().connect 
-               (slot (*this, &OptionEditor::solo_via_bus_clicked));
+               (mem_fun(*this, &OptionEditor::solo_via_bus_clicked));
        solo_latched_button.signal_clicked().connect 
-               (slot (*this, &OptionEditor::solo_latched_clicked));
+               (mem_fun(*this, &OptionEditor::solo_latched_clicked));
 
        solo_packer.show_all ();
 }
@@ -714,12 +704,8 @@ OptionEditor::setup_display_options ()
        dumb.push_back (_("Short"));
        dumb.push_back (_("Medium"));
        dumb.push_back (_("Long"));
-       meter_hold_combo.set_popdown_strings (dumb);
-       meter_hold_combo.set_use_arrows_always (true);
-       meter_hold_combo.set_value_in_list (true, false);
-       meter_hold_combo.get_entry()->set_editable (false);
-       meter_hold_combo.get_entry()->set_name ("OptionsEntry");
-       meter_hold_combo.get_popwin()->unmap_event.connect (slot (*this, &OptionEditor::meter_hold_chosen));
+       set_popdown_strings (meter_hold_combo, dumb);
+       meter_hold_combo.signal_unmap_event().connect (mem_fun(*this, &OptionEditor::meter_hold_chosen));
        hbox = manage (new HBox);
        hbox->set_border_width (8);
        hbox->set_spacing (8);
@@ -737,12 +723,8 @@ OptionEditor::setup_display_options ()
        dumb.push_back (_("Fast"));
        dumb.push_back (_("Faster"));
        dumb.push_back (_("Fastest"));
-       meter_falloff_combo.set_popdown_strings (dumb);
-       meter_falloff_combo.set_use_arrows_always (true);
-       meter_falloff_combo.set_value_in_list (true, false);
-       meter_falloff_combo.get_entry()->set_editable (false);
-       meter_falloff_combo.get_entry()->set_name ("OptionsEntry");
-       meter_falloff_combo.get_popwin()->unmap_event.connect (slot (*this, &OptionEditor::meter_falloff_chosen));
+       set_popdown_strings (meter_falloff_combo, dumb);
+       meter_falloff_combo.signal_unmap_event().connect (mem_fun(*this, &OptionEditor::meter_falloff_chosen));
        hbox = manage (new HBox);
        hbox->set_border_width (8);
        hbox->set_spacing (8);
@@ -751,13 +733,13 @@ OptionEditor::setup_display_options ()
        display_packer.pack_start (*hbox, false, false);
        
        
-       show_waveforms_button.signal_clicked().connect (slot (*this, &OptionEditor::show_waveforms_clicked));
-       show_waveforms_recording_button.signal_clicked().connect (slot (*this, &OptionEditor::show_waveforms_recording_clicked));
-       show_measures_button.signal_clicked().connect (slot (*this, &OptionEditor::show_measures_clicked));
-       mixer_strip_width_button.signal_clicked().connect (slot (*this, &OptionEditor::strip_width_clicked));
-       follow_playhead_button.signal_clicked().connect (slot (*this, &OptionEditor::follow_playhead_clicked));
+       show_waveforms_button.signal_clicked().connect (mem_fun(*this, &OptionEditor::show_waveforms_clicked));
+       show_waveforms_recording_button.signal_clicked().connect (mem_fun(*this, &OptionEditor::show_waveforms_recording_clicked));
+       show_measures_button.signal_clicked().connect (mem_fun(*this, &OptionEditor::show_measures_clicked));
+       mixer_strip_width_button.signal_clicked().connect (mem_fun(*this, &OptionEditor::strip_width_clicked));
+       follow_playhead_button.signal_clicked().connect (mem_fun(*this, &OptionEditor::follow_playhead_clicked));
 
-       editor.DisplayControlChanged.connect (slot (*this, &OptionEditor::display_control_changed));
+       editor.DisplayControlChanged.connect (mem_fun(*this, &OptionEditor::display_control_changed));
 
        show_measures_button.set_active (editor.show_measures());
        show_waveforms_button.set_active (editor.show_waveforms());
@@ -769,7 +751,7 @@ gint
 OptionEditor::meter_hold_chosen (GdkEventAny* ev)
 {
        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);
@@ -789,7 +771,7 @@ gint
 OptionEditor::meter_falloff_chosen (GdkEventAny* ev)
 {
        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);
@@ -851,11 +833,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 (slot (*this, &OptionEditor::slave_type_chosen));
+       slave_type_combo.set_name ("OptionsEntry");
+       slave_type_combo.signal_unmap_event().connect (mem_fun(*this, &OptionEditor::slave_type_chosen));
 
        dumb.clear ();
        dumb.push_back (X_("24 FPS"));
@@ -863,15 +842,11 @@ OptionEditor::setup_sync_options ()
        dumb.push_back (X_("30 FPS drop"));
        dumb.push_back (X_("30 FPS non-drop"));
        
-       smpte_fps_combo.set_popdown_strings (dumb);
-       smpte_fps_combo.set_use_arrows_always (true);
-       smpte_fps_combo.set_value_in_list (true, false);
-       smpte_fps_combo.get_entry()->set_editable (false);
-       smpte_fps_combo.get_entry()->set_name ("OptionsEntry");
-       smpte_fps_combo.get_popwin()->unmap_event.connect (slot (*this, &OptionEditor::smpte_fps_chosen));
+       set_popdown_strings (smpte_fps_combo, dumb);
+       smpte_fps_combo.signal_unmap_event().connect (mem_fun(*this, &OptionEditor::smpte_fps_chosen));
        
        smpte_offset_clock.set_mode (AudioClock::SMPTE);
-       smpte_offset_clock.ValueChanged.connect (slot (*this, &OptionEditor::smpte_offset_chosen));
+       smpte_offset_clock.ValueChanged.connect (mem_fun(*this, &OptionEditor::smpte_offset_chosen));
        
        send_mtc_button.set_name ("OptionEditorToggleButton");
        jack_time_master_button.set_name ("OptionEditorToggleButton");
@@ -923,9 +898,9 @@ OptionEditor::setup_sync_options ()
 
        jack_time_master_button.set_active (Config->get_jack_time_master());
 
-       send_mtc_button.button_press_event.connect (bind (slot (*this, &OptionEditor::send_mtc_toggled), &send_mtc_button));
-       jack_time_master_button.signal_clicked().connect (slot (*this, &OptionEditor::jack_time_master_clicked));
-       smpte_offset_negative_button.signal_clicked().connect (slot (*this, &OptionEditor::smpte_offset_negative_clicked));
+       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));
 }
 
 void
@@ -940,7 +915,7 @@ gint
 OptionEditor::smpte_fps_chosen (GdkEventAny* ev)
 {
        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);
@@ -1002,7 +977,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");
 
@@ -1017,21 +992,21 @@ OptionEditor::setup_midi_options ()
                }
 
                tb->set_active (!(*i).second->input()->offline());
-               tb->button_press_event.connect (bind (slot (*this, &OptionEditor::port_online_toggled), (*i).second, tb));
-               (*i).second->input()->OfflineStatusChanged.connect (bind (slot (*this, &OptionEditor::map_port_online), (*i).second, tb));
-               table->attach (*tb, 1, 2, n+2, n+3, 0, 0);
+               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, FILL|EXPAND, FILL);
 
                tb = manage (new ToggleButton ());
                tb->set_name ("OptionEditorToggleButton");
-               tb->button_press_event.connect (bind (slot (*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 (slot (*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);
@@ -1039,10 +1014,10 @@ OptionEditor::setup_midi_options ()
                if (n == 0) {
                        first_mtc_button = rb;
                } else {
-                       rb->set_group (first_mtc_button->group());
+                       rb->set_group (first_mtc_button->get_group());
                }
-               table->attach (*rb, 4, 5, n+2, n+3, 0, 0);
-               rb->button_press_event.connect (bind (slot (*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);
@@ -1054,10 +1029,10 @@ OptionEditor::setup_midi_options ()
                if (n == 0) {
                        first_mmc_button = rb;
                } else {
-                       rb->set_group (first_mmc_button->group());
+                       rb->set_group (first_mmc_button->get_group());
                }
-               table->attach (*rb, 6, 7, n+2, n+3, 0, 0);
-               rb->button_press_event.connect (bind (slot (*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);
@@ -1069,10 +1044,10 @@ OptionEditor::setup_midi_options ()
                if (n == 0) {
                        first_midi_button = rb;
                } else {
-                       rb->set_group (first_midi_button->group());
+                       rb->set_group (first_midi_button->get_group());
                }
-               table->attach (*rb, 8, 9, n+2, n+3, 0, 0);
-               rb->button_press_event.connect (bind (slot (*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);
@@ -1120,10 +1095,10 @@ OptionEditor::setup_midi_options ()
 
        midi_packer.pack_start (*mmcbuttonbox, false, false);
 
-       mmc_control_button.toggled.connect (bind (slot (*this, &OptionEditor::mmc_control_toggled), &mmc_control_button));
-       midi_control_button.toggled.connect (bind (slot (*this, &OptionEditor::midi_control_toggled), &midi_control_button));
-       send_mmc_button.toggled.connect (bind (slot (*this, &OptionEditor::send_mmc_toggled), &send_mmc_button));
-       midi_feedback_button.toggled.connect (bind (slot (*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
@@ -1147,7 +1122,7 @@ OptionEditor::mtc_port_chosen (GdkEventButton* ev, MIDI::Port *port, Gtk::RadioB
                        if (session->mtc_port()) {
                                dumb.push_back (positional_sync_strings[Session::MTC]);
                        }
-                       slave_type_combo.set_popdown_strings (dumb);
+                       set_popdown_strings (slave_type_combo, dumb);
 
                        rb->set_active (true);
                }
@@ -1313,24 +1288,18 @@ OptionEditor::raid_path_changed ()
 void
 OptionEditor::click_browse_clicked ()
 {
-       SoundFileSelector& sfdb (ARDOUR_UI::instance()->get_sfdb_window());
-       sigc::connection c = sfdb.Action.connect (slot (*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 ();
 }
@@ -1338,25 +1307,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 (slot (*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 ();
 }
@@ -1456,7 +1418,7 @@ OptionEditor::just_close_win()
 void
 OptionEditor::queue_session_control_changed (Session::ControlType t)
 {
-       ui.call_slot (bind (slot (*this, &OptionEditor::session_control_changed), t));
+       ui.call_slot (bind (mem_fun(*this, &OptionEditor::session_control_changed), t));
 }
 
 void
@@ -1466,16 +1428,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;
                }
                
@@ -1515,7 +1477,7 @@ OptionEditor::native_format_chosen (GdkEventAny *ignored)
                return FALSE;
        }
 
-       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);
@@ -1534,7 +1496,7 @@ OptionEditor::slave_type_chosen (GdkEventAny *ignored)
                return FALSE;
        }
 
-       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);
@@ -1571,18 +1533,18 @@ OptionEditor::setup_click_editor ()
        click_path_entry.set_name ("OptionsEntry");
        click_emphasis_path_entry.set_name ("OptionsEntry");
        
-       click_path_entry.activate.connect (slot (*this, &OptionEditor::click_sound_changed));
-       click_emphasis_path_entry.activate.connect (slot (*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 (slot (Keyboard::the_keyboard(), &Keyboard::focus_in_handler));
-       click_path_entry.signal_focus_out_event().connect (bind (slot (*this, &OptionEditor::focus_out_event_handler), &OptionEditor::click_sound_changed));
-       click_emphasis_path_entry.signal_focus_in_event().connect (slot (Keyboard::the_keyboard(), &Keyboard::focus_in_handler));
-       click_emphasis_path_entry.signal_focus_out_event().connect (bind (slot (*this, &OptionEditor::focus_out_event_handler), &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");
        click_emphasis_browse_button.set_name ("EditorGTKButton");
-       click_browse_button.signal_clicked().connect (slot (*this, &OptionEditor::click_browse_clicked));
-       click_emphasis_browse_button.signal_clicked().connect (slot (*this, &OptionEditor::click_emphasis_browse_clicked));
+       click_browse_button.signal_clicked().connect (mem_fun(*this, &OptionEditor::click_browse_clicked));
+       click_emphasis_browse_button.signal_clicked().connect (mem_fun(*this, &OptionEditor::click_emphasis_browse_clicked));
 
        click_packer.set_border_width (12);
        click_packer.set_spacing (5);
@@ -1594,15 +1556,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);
@@ -1674,30 +1636,30 @@ 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.group());
-       auto_connect_output_physical_button.set_group (auto_connect_output_master_button.group());
+       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());
 
        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);
        
@@ -1723,19 +1685,19 @@ OptionEditor::setup_misc_options()
        debug_keyboard_button.set_active (false);
        speed_quieten_button.set_active (Config->get_quieten_at_speed() != 1.0f);
 
-       hw_monitor_button.signal_clicked().connect (slot (*this, &OptionEditor::hw_monitor_clicked));
-       sw_monitor_button.signal_clicked().connect (slot (*this, &OptionEditor::sw_monitor_clicked));
-       plugins_stop_button.signal_clicked().connect (slot (*this, &OptionEditor::plugins_stop_with_transport_clicked));
-       plugins_on_rec_button.signal_clicked().connect (slot (*this, &OptionEditor::plugins_on_while_recording_clicked));
-       verify_remove_last_capture_button.signal_clicked().connect (slot (*this, &OptionEditor::verify_remove_last_capture_clicked));
-       auto_connect_inputs_button.signal_clicked().connect (slot (*this, &OptionEditor::auto_connect_inputs_clicked));
-       auto_connect_output_physical_button.signal_clicked().connect (slot (*this, &OptionEditor::auto_connect_output_physical_clicked));
-       auto_connect_output_master_button.signal_clicked().connect (slot (*this, &OptionEditor::auto_connect_output_master_clicked));
-       auto_connect_output_manual_button.signal_clicked().connect (slot (*this, &OptionEditor::auto_connect_output_manual_clicked));
-       stop_rec_on_xrun_button.signal_clicked().connect (slot (*this, &OptionEditor::stop_rec_on_xrun_clicked));
-       stop_at_end_button.signal_clicked().connect (slot (*this, &OptionEditor::stop_at_end_clicked));
-       debug_keyboard_button.signal_clicked().connect (slot (*this, &OptionEditor::debug_keyboard_clicked));
-       speed_quieten_button.signal_clicked().connect (slot (*this, &OptionEditor::speed_quieten_clicked));
+       hw_monitor_button.signal_clicked().connect (mem_fun(*this, &OptionEditor::hw_monitor_clicked));
+       sw_monitor_button.signal_clicked().connect (mem_fun(*this, &OptionEditor::sw_monitor_clicked));
+       plugins_stop_button.signal_clicked().connect (mem_fun(*this, &OptionEditor::plugins_stop_with_transport_clicked));
+       plugins_on_rec_button.signal_clicked().connect (mem_fun(*this, &OptionEditor::plugins_on_while_recording_clicked));
+       verify_remove_last_capture_button.signal_clicked().connect (mem_fun(*this, &OptionEditor::verify_remove_last_capture_clicked));
+       auto_connect_inputs_button.signal_clicked().connect (mem_fun(*this, &OptionEditor::auto_connect_inputs_clicked));
+       auto_connect_output_physical_button.signal_clicked().connect (mem_fun(*this, &OptionEditor::auto_connect_output_physical_clicked));
+       auto_connect_output_master_button.signal_clicked().connect (mem_fun(*this, &OptionEditor::auto_connect_output_master_clicked));
+       auto_connect_output_manual_button.signal_clicked().connect (mem_fun(*this, &OptionEditor::auto_connect_output_manual_clicked));
+       stop_rec_on_xrun_button.signal_clicked().connect (mem_fun(*this, &OptionEditor::stop_rec_on_xrun_clicked));
+       stop_at_end_button.signal_clicked().connect (mem_fun(*this, &OptionEditor::stop_at_end_clicked));
+       debug_keyboard_button.signal_clicked().connect (mem_fun(*this, &OptionEditor::debug_keyboard_clicked));
+       speed_quieten_button.signal_clicked().connect (mem_fun(*this, &OptionEditor::speed_quieten_clicked));
 }
 
 void
@@ -1871,15 +1833,12 @@ OptionEditor::setup_keyboard_options ()
                dumb.push_back (_(modifiers[i].name));
        }
 
-       edit_modifier_combo.set_popdown_strings (dumb);
-       edit_modifier_combo.get_entry()->set_editable (false);
-       edit_modifier_combo.get_entry()->set_name ("OptionsEntry");
-       edit_modifier_combo.set_use_arrows_always (true);
-       edit_modifier_combo.get_popwin()->unmap_event.connect (slot (*this, &OptionEditor::edit_modifier_chosen));
+       set_popdown_strings (edit_modifier_combo, dumb);
+       edit_modifier_combo.signal_unmap_event().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;
                }
        }
@@ -1888,28 +1847,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 (slot (*this, &OptionEditor::edit_button_changed));
+       edit_button_adjustment.signal_value_changed().connect (mem_fun(*this, &OptionEditor::edit_button_changed));
 
-       delete_modifier_combo.set_popdown_strings (dumb);
-       delete_modifier_combo.get_entry()->set_editable (false);
-       delete_modifier_combo.get_entry()->set_name ("OptionsEntry");
-       delete_modifier_combo.set_use_arrows_always (true);
-       delete_modifier_combo.get_popwin()->unmap_event.connect (slot (*this, &OptionEditor::delete_modifier_chosen));
+       set_popdown_strings (delete_modifier_combo, dumb);
+       delete_modifier_combo.signal_unmap_event().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;
                }
        }
@@ -1918,28 +1874,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 (slot (*this, &OptionEditor::delete_button_changed));
+       delete_button_adjustment.signal_value_changed().connect (mem_fun(*this, &OptionEditor::delete_button_changed));
 
-       snap_modifier_combo.set_popdown_strings (dumb);
-       snap_modifier_combo.get_entry()->set_editable (false);
-       snap_modifier_combo.get_entry()->set_name ("OptionsEntry");
-       snap_modifier_combo.set_use_arrows_always (true);
-       snap_modifier_combo.get_popwin()->unmap_event.connect (slot (*this, &OptionEditor::snap_modifier_chosen));
+       set_popdown_strings (snap_modifier_combo, dumb);
+       snap_modifier_combo.signal_unmap_event().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;
                }
        }
@@ -1948,8 +1901,8 @@ 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
@@ -1957,7 +1910,7 @@ OptionEditor::edit_modifier_chosen (GdkEventAny *ev)
 {
        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)) {
@@ -1973,7 +1926,7 @@ OptionEditor::delete_modifier_chosen (GdkEventAny *ev)
 {
        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)) {
@@ -1989,7 +1942,7 @@ OptionEditor::snap_modifier_chosen (GdkEventAny *ev)
 {
        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)) {