diff options
-rw-r--r-- | gtk2_ardour/SConscript | 2 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui.cc | 37 | ||||
-rw-r--r-- | gtk2_ardour/new_session_dialog.cc | 79 | ||||
-rw-r--r-- | gtk2_ardour/new_session_dialog.h | 13 |
4 files changed, 103 insertions, 28 deletions
diff --git a/gtk2_ardour/SConscript b/gtk2_ardour/SConscript index 39f9a21dd4..cb2b1e9d4e 100644 --- a/gtk2_ardour/SConscript +++ b/gtk2_ardour/SConscript @@ -410,7 +410,7 @@ else: keybindings_dict['%SECONDARY%'] = 'Alt' keybindings_dict['%TERTIARY%'] = 'Shift' keybindings_dict['%LEVEL4%'] = 'Mod2' - keybindings_dict['%WINDOW%'] = 'Ctrl' + keybindings_dict['%WINDOW%'] = 'Alt' ardourbindings = env.SubstInFile ('ardour.bindings', 'ardour.bindings.in', SUBST_DICT = keybindings_dict); ardoursaeDEbindings = env.SubstInFile ('ardour-sae-de.bindings', 'ardour-sae-de.bindings.in', SUBST_DICT = keybindings_dict); diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index f3c6de7b6d..1367204b65 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -1070,8 +1070,7 @@ ARDOUR_UI::build_session_selector () recent_session_display.set_model (recent_session_model); recent_session_display.append_column (_("Recent Sessions"), recent_session_columns.visible_name); recent_session_display.set_headers_visible (false); - recent_session_display.get_selection()->set_mode (SELECTION_SINGLE); - + recent_session_display.get_selection()->set_mode (SELECTION_BROWSE); recent_session_display.signal_row_activated().connect (mem_fun (*this, &ARDOUR_UI::recent_session_row_activated)); scroller->add (recent_session_display); @@ -1094,31 +1093,36 @@ ARDOUR_UI::open_recent_session () { bool can_return = (session != 0); + if (session_selector_window == 0) { + build_session_selector (); + } + + redisplay_recent_sessions (); + while (true) { - if (session_selector_window == 0) { - build_session_selector (); - } - - redisplay_recent_sessions (); - session_selector_window->set_position (WIN_POS_MOUSE); ResponseType r = (ResponseType) session_selector_window->run (); - session_selector_window->hide(); - switch (r) { case RESPONSE_ACCEPT: break; default: if (can_return) { + session_selector_window->hide(); return; } else { exit (1); } } + + if (recent_session_display.get_selection()->count_selected_rows() == 0) { + continue; + } + session_selector_window->hide(); + Gtk::TreeModel::iterator i = recent_session_display.get_selection()->get_selected(); if (i == recent_session_model->children().end()) { @@ -2216,14 +2220,13 @@ ARDOUR_UI::get_session_parameters (Glib::ustring predetermined_path, bool have_e goto try_again; } - switch (new_session_dialog->get_current_page()) { - case 1: /* recent session selector */ - case 2: /* audio engine control */ + switch (new_session_dialog->which_page()) { + case NewSessionDialog::OpenPage: + case NewSessionDialog::EnginePage: if (session_name[0] == '/' || (session_name.length() > 2 && session_name[0] == '.' && session_name[1] == '/') || (session_name.length() > 3 && session_name[0] == '.' && session_name[1] == '.' && session_name[2] == '/')) { - cerr << "here\n"; if (load_session (Glib::path_get_dirname (session_name), session_name)) { response = Gtk::RESPONSE_NONE; goto try_again; @@ -2231,7 +2234,6 @@ ARDOUR_UI::get_session_parameters (Glib::ustring predetermined_path, bool have_e } else { session_path = new_session_dialog->session_folder(); - cerr << "there\n"; if (load_session (session_path, session_name)) { response = Gtk::RESPONSE_NONE; goto try_again; @@ -2239,7 +2241,9 @@ ARDOUR_UI::get_session_parameters (Glib::ustring predetermined_path, bool have_e } break; - case 0: /* nominally the "new" session creator, but could be in use for an old session */ + case NewSessionDialog::NewPage: /* nominally the "new" session creator, but could be in use for an old session */ + + cerr << "on page zero\n"; if (new_session_dialog->get_current_page() == 0 && ARDOUR_COMMAND_LINE::session_name.empty()) { should_be_new = true; @@ -2543,7 +2547,6 @@ ARDOUR_UI::load_session (const Glib::ustring& path, const Glib::ustring& snap_na retval = 0; out: - cerr << "load session returns " << retval << endl; return retval; } diff --git a/gtk2_ardour/new_session_dialog.cc b/gtk2_ardour/new_session_dialog.cc index 2b4b75d3ed..a112ebfe40 100644 --- a/gtk2_ardour/new_session_dialog.cc +++ b/gtk2_ardour/new_session_dialog.cc @@ -678,6 +678,56 @@ NewSessionDialog::get_current_page() return m_notebook->get_current_page(); } +NewSessionDialog::Pages +NewSessionDialog::which_page () +{ + int num = m_notebook->get_current_page(); + + if (page_set == NewPage) { + return NewPage; + + } else if (page_set == OpenPage) { + return OpenPage; + + } else if (page_set == EnginePage) { + return EnginePage; + + } else if (page_set == NewPage|OpenPage) { + switch (num) { + case 0: + return NewPage; + default: + return OpenPage; + } + + } else if (page_set == NewPage|EnginePage) { + switch (num) { + case 0: + return NewPage; + default: + return EnginePage; + } + + } else if (page_set == NewPage|EnginePage|OpenPage) { + switch (num) { + case 0: + return NewPage; + case 1: + return OpenPage; + default: + return EnginePage; + } + + } else if (page_set == OpenPage|EnginePage) { + switch (num) { + case 0: + return OpenPage; + default: + return EnginePage; + } + } +} + void NewSessionDialog::set_current_page(int page) { @@ -710,17 +760,28 @@ NewSessionDialog::notebook_page_changed (GtkNotebookPage* np, uint pagenum) return; } - if (pagenum == 1) { + switch (which_page()) { + case OpenPage: on_new_session_page = false; m_okbutton->set_label(_("Open")); - m_okbutton->set_image (*(new Gtk::Image (Gtk::Stock::OPEN, Gtk::ICON_SIZE_BUTTON))); + m_okbutton->set_image (*(manage (new Gtk::Image (Gtk::Stock::OPEN, Gtk::ICON_SIZE_BUTTON)))); set_response_sensitive (Gtk::RESPONSE_NONE, false); if (m_treeview->get_selection()->count_selected_rows() == 0) { set_response_sensitive (Gtk::RESPONSE_OK, false); } else { set_response_sensitive (Gtk::RESPONSE_OK, true); } - } else { + break; + + case EnginePage: + on_new_session_page = false; + m_okbutton->set_label(_("Open")); + m_okbutton->set_image (*(manage (new Gtk::Image (Gtk::Stock::OPEN, Gtk::ICON_SIZE_BUTTON)))); + set_response_sensitive (Gtk::RESPONSE_NONE, false); + set_response_sensitive (Gtk::RESPONSE_OK, true); + break; + + default: on_new_session_page = true; m_okbutton->set_label(_("New")); m_okbutton->set_image (*(new Gtk::Image (Gtk::Stock::NEW, Gtk::ICON_SIZE_BUTTON))); @@ -750,11 +811,19 @@ NewSessionDialog::treeview_selection_changed () void NewSessionDialog::file_chosen () { - if (on_new_session_page) return; + switch (which_page()) { + case NewPage: + case EnginePage: + return; + } m_treeview->get_selection()->unselect_all(); - get_window()->set_cursor(Gdk::Cursor(Gdk::WATCH)); + Glib::RefPtr<Gdk::Window> win (get_window()); + + if (win) { + win->set_cursor(Gdk::Cursor(Gdk::WATCH)); + } if (!m_open_filechooser->get_filename().empty()) { set_response_sensitive (Gtk::RESPONSE_OK, true); diff --git a/gtk2_ardour/new_session_dialog.h b/gtk2_ardour/new_session_dialog.h index 7d8e84e506..39664961f2 100644 --- a/gtk2_ardour/new_session_dialog.h +++ b/gtk2_ardour/new_session_dialog.h @@ -54,6 +54,12 @@ class NewSessionDialog : public ArdourDialog { public: + enum Pages { + NewPage = 0x1, + OpenPage = 0x2, + EnginePage = 0x4 + }; + NewSessionDialog(); ~NewSessionDialog (); @@ -86,6 +92,8 @@ public: bool connect_outs_to_master() const; bool connect_outs_to_physical() const ; + Pages which_page (); + int get_current_page(); void set_current_page (int); void reset_recent(); @@ -168,11 +176,6 @@ protected: Gtk::Notebook* m_notebook; private: - enum Pages { - NewPage = 0x1, - OpenPage = 0x2, - EnginePage = 0x4 - }; Pages page_set; |