summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/SConscript2
-rw-r--r--gtk2_ardour/ardour_ui.cc37
-rw-r--r--gtk2_ardour/new_session_dialog.cc79
-rw-r--r--gtk2_ardour/new_session_dialog.h13
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;