From 75f3005c67f5c8ea883c0e24e9832b59c5ced13f Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 12 Dec 2012 18:59:47 +0000 Subject: [PATCH] sometimes, you just have to do what a windows programmer would do. add a global signal, ARDOUR::GUIIdle() which can be used in the middle of long-running backend operations to give the GUI a chance to update. use it while adding routes. git-svn-id: svn://localhost/ardour2/branches/3.0@13650 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/ardour_ui.cc | 13 ++----------- libs/ardour/ardour/ardour.h | 1 + libs/ardour/globals.cc | 1 + libs/ardour/session.cc | 4 ++++ 4 files changed, 8 insertions(+), 11 deletions(-) diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index c144c930b3..8d672e0f70 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -325,6 +325,8 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[]) _process_thread->init (); DPIReset.connect (sigc::mem_fun (*this, &ARDOUR_UI::resize_text_widgets)); + + ARDOUR::GUIIdle.connect (forever_connections, MISSING_INVALIDATOR, boost::bind (&Gtkmm2ext::UI::flush_pending, this), gui_context()); } int @@ -3148,16 +3150,6 @@ ARDOUR_UI::add_route (Gtk::Window* float_window) return; } - if (count > 8) { - /* 8 is arbitrary - we just need a threshold for where - we start caring that this operation might take - a long time - */ - flush_pending(); - flush_pending(); - flush_pending(); - } - string template_path = add_route_dialog->track_template(); if (!template_path.empty()) { @@ -3170,7 +3162,6 @@ ARDOUR_UI::add_route (Gtk::Window* float_window) string name_template = add_route_dialog->name_template (); PluginInfoPtr instrument = add_route_dialog->requested_instrument (); RouteGroup* route_group = add_route_dialog->route_group (); - AutoConnectOption oac = Config->get_output_auto_connect(); if (oac & AutoConnectMaster) { diff --git a/libs/ardour/ardour/ardour.h b/libs/ardour/ardour/ardour.h index c19d4332e8..03de3965ec 100644 --- a/libs/ardour/ardour/ardour.h +++ b/libs/ardour/ardour/ardour.h @@ -48,6 +48,7 @@ namespace ARDOUR { class AudioEngine; extern PBD::Signal1 BootMessage; + extern PBD::Signal0 GUIIdle; int init (bool with_vst, bool try_optimization); void init_post_engine (); diff --git a/libs/ardour/globals.cc b/libs/ardour/globals.cc index 085dfc8e59..2b0bc05534 100644 --- a/libs/ardour/globals.cc +++ b/libs/ardour/globals.cc @@ -113,6 +113,7 @@ mix_buffers_with_gain_t ARDOUR::mix_buffers_with_gain = 0; mix_buffers_no_gain_t ARDOUR::mix_buffers_no_gain = 0; PBD::Signal1 ARDOUR::BootMessage; +PBD::Signal0 ARDOUR::GUIIdle; namespace ARDOUR { extern void setup_enum_writer (); diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index ccf4cb2b86..3b46ad3be1 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -2012,6 +2012,8 @@ Session::new_audio_route (int input_channels, int output_channels, RouteGroup* r bus->add_internal_return (); ret.push_back (bus); + + ARDOUR::GUIIdle (); } @@ -2242,6 +2244,8 @@ Session::add_routes_inner (RouteList& new_routes, bool input_auto_connect, bool order++; } } + + ARDOUR::GUIIdle (); } if (_monitor_out && IO::connecting_legal) {