fix display of splash screen (at least on X11)

git-svn-id: svn://localhost/ardour2/branches/3.0@14134 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2013-03-04 18:19:05 +00:00
parent fbf7e4385b
commit 4830bd633f
2 changed files with 18 additions and 4 deletions

View File

@ -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);
}

View File

@ -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 ();
};