+
+ set_default_size (pixbuf->get_width(), pixbuf->get_height());
+ set_resizable (false);
+ set_type_hint(Gdk::WINDOW_TYPE_HINT_SPLASHSCREEN);
+ 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());
+}
+
+Splash::~Splash ()
+{
+ idle_connection.disconnect ();
+ expose_done = true;
+ hide ();
+ the_splash = 0;
+}
+
+void
+Splash::pop_back_for (Gtk::Window& win)
+{
+#if defined __APPLE__ || defined PLATFORM_WINDOWS
+ /* April 2013: window layering on OS X is a bit different to X Window. at present,
+ * the "restack()" functionality in GDK will only operate on windows in the same
+ * "level" (e.g. two normal top level windows, or two utility windows) and will not
+ * work across them. The splashscreen is on its own "StatusWindowLevel" so restacking
+ * is not going to work.
+ *
+ * So for OS X, we just hide ourselves.
+ *
+ * Oct 2014: The Windows situation is similar, although it should be possible
+ * to play tricks with gdk's set_type_hint() or directly hack things using
+ * SetWindowLong() and UpdateLayeredWindow()
+ */
+ (void) win;
+ hide();
+#else
+ set_keep_above (false);
+ get_window()->restack (win.get_window(), false);
+#endif
+}
+
+void
+Splash::pop_front ()
+{
+ if (get_window()) {
+#if defined __APPLE__ || defined PLATFORM_WINDOWS
+ show ();
+#else
+ gdk_window_restack(get_window()->gobj(), NULL, true);
+#endif
+ }
+}
+
+void
+Splash::hide ()
+{
+ Gtk::Window::hide();