diff --git a/gtk2_ardour/splash.cc b/gtk2_ardour/splash.cc index 941350646d..0922ec75ba 100644 --- a/gtk2_ardour/splash.cc +++ b/gtk2_ardour/splash.cc @@ -83,6 +83,7 @@ Splash::Splash () the_splash = this; expose_done = false; + expose_is_the_one = false; ARDOUR::BootMessage.connect (msg_connection, invalidator (*this), boost::bind (&Splash::boot_message, this, _1), gui_context()); } @@ -151,8 +152,10 @@ Splash::expose (GdkEventExpose* ev) /* this must execute AFTER the GDK idle update mechanism */ - Glib::signal_idle().connect (sigc::mem_fun (this, &Splash::idle_after_expose), - GDK_PRIORITY_REDRAW+2); + if (expose_is_the_one) { + Glib::signal_idle().connect (sigc::mem_fun (this, &Splash::idle_after_expose), + GDK_PRIORITY_REDRAW+2); + } return true; } @@ -177,7 +180,8 @@ Splash::display () if (!was_mapped) { expose_done = false; - } + expose_is_the_one = false; + } pop_front (); present (); @@ -186,6 +190,7 @@ Splash::display () while (!expose_done) { gtk_main_iteration (); } + gdk_display_flush (gdk_display_get_default()); } } @@ -211,5 +216,13 @@ Splash::message (const string& msg) while (!expose_done) { gtk_main_iteration (); } + gdk_display_flush (gdk_display_get_default()); } } + +bool +Splash::on_map_event (GdkEventAny* ev) +{ + expose_is_the_one = true; + return Window::on_map_event (ev); +} diff --git a/gtk2_ardour/splash.h b/gtk2_ardour/splash.h index 536d7f30f1..1843d00c93 100644 --- a/gtk2_ardour/splash.h +++ b/gtk2_ardour/splash.h @@ -45,7 +45,7 @@ class Splash : public Gtk::Window bool expose (GdkEventExpose*); bool on_button_release_event (GdkEventButton*); void on_realize (); - + bool on_map_event (GdkEventAny*); void message (const std::string& msg); private: @@ -59,6 +59,7 @@ class Splash : public Gtk::Window PBD::ScopedConnection msg_connection; bool expose_done; + bool expose_is_the_one; bool idle_after_expose (); };