snapshot(prompter) and recent dialog fixes
[ardour.git] / gtk2_ardour / ardour_ui.cc
index ae45db10c627eb5b31b983bbdd60464f1402fa09..143717422ed0abe734b9ecdfe69f404d1b5244cf 100644 (file)
@@ -805,7 +805,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile)
 
          shuttle_units_button (_("% ")),
          shuttle_style_button (_("spring")),
-         
+
          punch_in_button (_("punch\nin")),
          punch_out_button (_("punch\nout")),
          auto_return_button (_("auto\nreturn")),
@@ -832,6 +832,10 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile)
                theArdourUI = this;
        }
 
+       // allow run-time rebinding of accels
+
+       Settings::get_default()->property_gtk_can_change_accels() = true;
+
        ActionManager::init ();
        
        m_new_session_dialog = 0;
@@ -866,18 +870,9 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile)
        set_shuttle_units (Percentage);
        set_shuttle_behaviour (Sprung);
 
-       Glib::RefPtr<ActionGroup> shuttle_actions = ActionGroup::create ("ShuttleActions");
-       
-       shuttle_actions->add (Action::create (X_("SetShuttleUnitsPercentage"), _("Percentage")), bind (mem_fun(*this, &ARDOUR_UI::set_shuttle_units), Percentage));
-       shuttle_actions->add (Action::create (X_("SetShuttleUnitsSemitones"), _("Semitones")), bind (mem_fun(*this, &ARDOUR_UI::set_shuttle_units), Semitones));
-       shuttle_actions->add (Action::create (X_("SetShuttleActionSprung"), _("Sprung")), bind (mem_fun(*this, &ARDOUR_UI::set_shuttle_behaviour), Sprung));
-       shuttle_actions->add (Action::create (X_("SetShuttleActionWheel"), _("Wheel")), bind (mem_fun(*this, &ARDOUR_UI::set_shuttle_behaviour), Wheel));
-       
-       ActionManager::add_action_group (shuttle_actions);
+       shuttle_style_menu = 0;
+       shuttle_unit_menu = 0;
 
-       shuttle_style_menu = dynamic_cast<Menu*> (ActionManager::get_widget ("ShuttleStylePopup"));
-       shuttle_unit_menu = dynamic_cast<Menu*> (ActionManager::get_widget ("ShuttleUnitPopup"));
-       
        gettimeofday (&last_peak_grab, 0);
        gettimeofday (&last_shuttle_request, 0);
 
@@ -1092,7 +1087,7 @@ If you still wish to quit, please use the\n\n\
                }
        }
 
-       quit();
+       quit ();
 }
 
 int
@@ -1105,7 +1100,7 @@ ARDOUR_UI::ask_about_saving_session (string what)
        msg = string_compose(_("Save and %1"), what);
        window.add_button (msg, RESPONSE_ACCEPT);
        msg = string_compose(_("Just %1"), what);
-       window.add_button (msg, RESPONSE_REJECT);
+       window.add_button (msg, RESPONSE_APPLY);
        msg = string_compose(_("Don't %1"), what);
        window.add_button (msg, RESPONSE_REJECT);
 
@@ -1143,7 +1138,9 @@ ARDOUR_UI::ask_about_saving_session (string what)
        window.hide ();
 
        switch (r) {
-       case RESPONSE_ACCEPT:
+       case RESPONSE_ACCEPT: // save and get out of here
+               return 1;
+       case RESPONSE_APPLY:  // get out of here
                return 0;
        default:
                break;
@@ -1721,6 +1718,7 @@ ARDOUR_UI::build_session_selector ()
        session_selector_window->set_name ("SessionSelectorWindow");
        session_selector_window->set_size_request (200, 400);
        session_selector_window->get_vbox()->pack_start (*scroller);
+       session_selector_window->show_all_children();
 }
 
 void
@@ -1796,8 +1794,7 @@ ARDOUR_UI::open_session ()
                
                FileFilter filter_ardour;
                filter_ardour.set_name (_("Ardour sessions"));
-               filter_ardour.add_custom (FILE_FILTER_FILENAME, mem_fun (*this, &ARDOUR_UI::filter_ardour_session_dirs));
-
+               filter_ardour.add_pattern("*.ardour");
                open_session_selector->add_filter (filter_ardour);
        }
 
@@ -1805,9 +1802,11 @@ ARDOUR_UI::open_session ()
        case RESPONSE_OK:
                break;
        default:
+               open_session_selector->hide();
                return;
        }
 
+       open_session_selector->hide();
        string session_path = open_session_selector->get_filename();
        string path, name;
        bool isnew;
@@ -2209,10 +2208,8 @@ void
 ARDOUR_UI::engine_stopped ()
 {
        ENSURE_GUI_THREAD (mem_fun(*this, &ARDOUR_UI::engine_stopped));
-
-       jack_disconnect_item->set_sensitive (false);
-       jack_reconnect_item->set_sensitive (true);
-       jack_bufsize_menu->set_sensitive (false);
+       ActionManager::set_sensitive (ActionManager::jack_sensitive_actions, false);
+       ActionManager::set_sensitive (ActionManager::jack_opposite_sensitive_actions, true);
 }
 
 
@@ -2220,10 +2217,8 @@ void
 ARDOUR_UI::engine_running ()
 {
        ENSURE_GUI_THREAD (mem_fun(*this, &ARDOUR_UI::engine_running));
-
-       jack_disconnect_item->set_sensitive (true);
-       jack_reconnect_item->set_sensitive (false);
-       jack_bufsize_menu->set_sensitive (true);
+       ActionManager::set_sensitive (ActionManager::jack_sensitive_actions, true);
+       ActionManager::set_sensitive (ActionManager::jack_opposite_sensitive_actions, false);
 }
 
 void
@@ -2231,9 +2226,8 @@ ARDOUR_UI::engine_halted ()
 {
        ENSURE_GUI_THREAD (mem_fun(*this, &ARDOUR_UI::engine_halted));
 
-       jack_disconnect_item->set_sensitive (false);
-       jack_reconnect_item->set_sensitive (true);
-       jack_bufsize_menu->set_sensitive (false);
+       ActionManager::set_sensitive (ActionManager::jack_sensitive_actions, false);
+       ActionManager::set_sensitive (ActionManager::jack_opposite_sensitive_actions, true);
 
        update_sample_rate (0);
 
@@ -2657,6 +2651,13 @@ ARDOUR_UI::new_session (bool startup, std::string predetermined_path)
                        
                        std::string session_name = m_new_session_dialog->session_name();
                        std::string session_path = m_new_session_dialog->session_folder();
+                       
+                       /*
+                         XXX This is needed because session constructor wants a 
+                         non-existant path. hopefully this will be fixed at some point.
+                       */
+                       session_path = Glib::build_filename(session_path, session_name);
+                       
                        std::string template_name = m_new_session_dialog->session_template_name();
                        
                        if (m_new_session_dialog->use_session_template()) {
@@ -2670,13 +2671,13 @@ ARDOUR_UI::new_session (bool startup, std::string predetermined_path)
                                Session::AutoConnectOption iconnect;
                                Session::AutoConnectOption oconnect;
                                
-                               if (m_new_session_dialog->create_control_track()) {
+                               if (m_new_session_dialog->create_control_bus()) {
                                        cchns = (uint32_t) m_new_session_dialog->control_channel_count();
                                } else {
                                        cchns = 0;
                                }
                                
-                               if (m_new_session_dialog->create_master_track()) {
+                               if (m_new_session_dialog->create_master_bus()) {
                                        mchns = (uint32_t) m_new_session_dialog->master_channel_count();
                                } else {
                                        mchns = 0;
@@ -2821,7 +2822,7 @@ ARDOUR_UI::show ()
        }
 
        if (session && mixer) {
-               mixer->show_window ();
+               // mixer->show_window ();
        }
        
        if (about) {