From ea08bbe621c146a0940ce584e2b970dcb7d7c9e2 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 1 Dec 2009 13:23:27 +0000 Subject: fix logic problems with startup assistant; make initial page buttons of startup activatable to save mousing; grow recent sessions scrolled window if there are more than 4 recent sessions to display git-svn-id: svn://localhost/ardour2/branches/3.0@6244 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/ardour_ui.cc | 9 +++++--- gtk2_ardour/ardour_ui.h | 1 + gtk2_ardour/startup.cc | 57 +++++++++++++++++++++++++++++------------------- gtk2_ardour/startup.h | 13 ++++++----- 4 files changed, 49 insertions(+), 31 deletions(-) diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index c51df14a74..50aea1c24c 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -296,11 +296,14 @@ ARDOUR_UI::run_startup (bool should_be_new) main().run(); - /* we don't return here until the startup assistant is finished */ - _startup->hide (); - return _startup->applying (); + switch (_startup->response()) { + case RESPONSE_OK: + return true; + default: + return false; + } } int diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index a05cca96bd..1d279ff281 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -198,6 +198,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI void store_clock_modes (); void restore_clock_modes (); + void reset_main_clocks (); void add_route (Gtk::Window* float_window); diff --git a/gtk2_ardour/startup.cc b/gtk2_ardour/startup.cc index 09ea89216a..775e9644e9 100644 --- a/gtk2_ardour/startup.cc +++ b/gtk2_ardour/startup.cc @@ -38,7 +38,7 @@ static string poor_mans_glob (string path) ArdourStartup::ArdourStartup () - : _applying (false) + : _response (RESPONSE_OK) , ic_new_session_button (_("Open a new session")) , ic_existing_session_button (_("Open an existing session")) , monitor_via_hardware_button (_("Use an external mixer or the hardware mixer of your audio interface.\n\ @@ -359,8 +359,12 @@ ArdourStartup::setup_initial_choice_page () centering_vbox->pack_start (ic_new_session_button, false, true); centering_vbox->pack_start (ic_existing_session_button, false, true); - ic_new_session_button.signal_button_press_event().connect(mem_fun(*this, &ArdourStartup::initial_choice_activated), false); - ic_existing_session_button.signal_button_press_event().connect(mem_fun(*this, &ArdourStartup::initial_choice_activated), false); + + ic_new_session_button.signal_button_press_event().connect(mem_fun(*this, &ArdourStartup::initial_button_press), false); + ic_new_session_button.signal_activate().connect(mem_fun(*this, &ArdourStartup::initial_button_activated), false); + + ic_existing_session_button.signal_button_press_event().connect(mem_fun(*this, &ArdourStartup::initial_button_press), false); + ic_existing_session_button.signal_activate().connect(mem_fun(*this, &ArdourStartup::initial_button_activated), false); centering_hbox->pack_start (*centering_vbox, true, true); @@ -380,15 +384,21 @@ ArdourStartup::setup_initial_choice_page () } bool -ArdourStartup::initial_choice_activated(GdkEventButton *event) +ArdourStartup::initial_button_press (GdkEventButton *event) +{ + if (event && event->type == GDK_2BUTTON_PRESS && session_page_index != -1) + { + set_current_page(session_page_index); + return true; + } else { + return false; + } +} + +void +ArdourStartup::initial_button_activated () { - if (event && event->type == GDK_2BUTTON_PRESS && session_page_index != -1) - { - set_current_page(session_page_index); - return true; - } - else - return false; + set_current_page(session_page_index); } void @@ -418,24 +428,21 @@ ArdourStartup::setup_final_page () void ArdourStartup::on_cancel () { - _applying = false; + _response = RESPONSE_CANCEL; gtk_main_quit (); } -void -ArdourStartup::on_close () +bool +ArdourStartup::on_delete_event (GdkEventAny*) { - _applying = false; + _response = RESPONSE_CLOSE; gtk_main_quit (); + return true; } void ArdourStartup::on_apply () { - _applying = true; - - // XXX do stuff and then .... - if (engine_dialog) { engine_dialog->setup_engine (); } @@ -455,6 +462,7 @@ ArdourStartup::on_apply () Config->save_state (); } + _response = RESPONSE_OK; gtk_main_quit (); } @@ -655,7 +663,7 @@ ArdourStartup::new_name_changed () } } -void +int ArdourStartup::redisplay_recent_sessions () { std::vector session_directories; @@ -669,7 +677,7 @@ ArdourStartup::redisplay_recent_sessions () if (rs.empty()) { recent_session_display.set_model (recent_session_model); - return; + return 0; } // // sort them alphabetically @@ -734,6 +742,7 @@ ArdourStartup::redisplay_recent_sessions () } recent_session_display.set_model (recent_session_model); + return rs.size(); } void @@ -771,9 +780,13 @@ ArdourStartup::setup_existing_session_page () } recent_scroller.show(); - redisplay_recent_sessions (); + int cnt = redisplay_recent_sessions (); recent_session_display.signal_row_activated().connect (mem_fun (*this, &ArdourStartup::recent_row_activated)); + if (cnt > 4) { + recent_scroller.set_size_request (-1, 300); + } + session_hbox.pack_start (recent_scroller, true, true); set_page_title (session_vbox, _("Select a session")); set_page_type (session_vbox, ASSISTANT_PAGE_CONFIRM); diff --git a/gtk2_ardour/startup.h b/gtk2_ardour/startup.h index 8566204755..f0146e2a5e 100644 --- a/gtk2_ardour/startup.h +++ b/gtk2_ardour/startup.h @@ -58,19 +58,19 @@ class ArdourStartup : public Gtk::Assistant { bool connect_outs_to_master() const; bool connect_outs_to_physical() const; - bool applying () const { - return _applying; + gint response () const { + return _response; } private: - bool _applying; + gint _response; bool config_modified; bool new_user; bool new_only; void on_apply (); void on_cancel (); - void on_close (); + bool on_delete_event (GdkEventAny*); void on_prepare (Gtk::Widget*); static ArdourStartup *the_startup; @@ -95,7 +95,8 @@ class ArdourStartup : public Gtk::Assistant { Gtk::VBox ic_vbox; Gtk::RadioButton ic_new_session_button; Gtk::RadioButton ic_existing_session_button; - bool initial_choice_activated(GdkEventButton *); + bool initial_button_press(GdkEventButton *); + void initial_button_activated(); /* monitoring choices */ @@ -134,7 +135,7 @@ class ArdourStartup : public Gtk::Assistant { Gtk::TreeView recent_session_display; Glib::RefPtr recent_session_model; Gtk::ScrolledWindow recent_scroller; - void redisplay_recent_sessions (); + int redisplay_recent_sessions (); void recent_session_row_selected (); void recent_row_activated (const Gtk::TreePath& path, Gtk::TreeViewColumn* col); -- cgit v1.2.3