From 4830bd633f6238c11e5d95d83dc0bb35cc4143cb Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 4 Mar 2013 18:19:05 +0000 Subject: [PATCH] fix display of splash screen (at least on X11) git-svn-id: svn://localhost/ardour2/branches/3.0@14134 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/splash.cc | 19 ++++++++++++++++--- gtk2_ardour/splash.h | 3 ++- 2 files changed, 18 insertions(+), 4 deletions(-) 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 (); };