properly handle FS pitch-bend - closes #7140
[ardour.git] / gtk2_ardour / splash.cc
index ee0566a9100f6d94653456316830ed87806fafb9..1784ac8164584d7a78b59c1ee43cb2718e178d3e 100644 (file)
@@ -25,6 +25,8 @@
 #include "ardour/ardour.h"
 #include "ardour/filesystem_paths.h"
 
 #include "ardour/ardour.h"
 #include "ardour/filesystem_paths.h"
 
+#include "gtkmm2ext/utils.h"
+
 #ifdef check
 #undef check
 #endif
 #ifdef check
 #undef check
 #endif
@@ -32,7 +34,7 @@
 #include "gui_thread.h"
 #include "splash.h"
 
 #include "gui_thread.h"
 #include "splash.h"
 
-#include "i18n.h"
+#include "pbd/i18n.h"
 
 using namespace Gtk;
 using namespace Glib;
 
 using namespace Gtk;
 using namespace Glib;
@@ -45,10 +47,13 @@ Splash* Splash::the_splash = 0;
 Splash::Splash ()
 {
        assert (the_splash == 0);
 Splash::Splash ()
 {
        assert (the_splash == 0);
-       
+
        std::string splash_file;
 
        std::string splash_file;
 
-       if (!find_file_in_search_path (ardour_data_search_path(), "splash.png", splash_file)) {
+       Searchpath rc (ARDOUR::ardour_data_search_path());
+       rc.add_subdirectory_to_paths ("resources");
+
+       if (!find_file (rc, PROGRAM_NAME "-splash.png", splash_file)) {
                 cerr << "Cannot find splash screen image file\n";
                throw failed_constructor();
        }
                 cerr << "Cannot find splash screen image file\n";
                throw failed_constructor();
        }
@@ -100,14 +105,18 @@ Splash::~Splash ()
 void
 Splash::pop_back_for (Gtk::Window& win)
 {
 void
 Splash::pop_back_for (Gtk::Window& win)
 {
-#ifdef __APPLE__
+#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
         /* 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 
+           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.
            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();
         */
         (void) win;
         hide();
@@ -121,12 +130,10 @@ void
 Splash::pop_front ()
 {
 
 Splash::pop_front ()
 {
 
-#ifdef __APPLE__
+#if defined  __APPLE__ || defined PLATFORM_WINDOWS
         if (get_window()) {
                 show ();
         }
         if (get_window()) {
                 show ();
         }
-#else
-       set_keep_above (true);
 #endif
 }
 
 #endif
 }
 
@@ -142,11 +149,11 @@ bool
 Splash::on_button_release_event (GdkEventButton* ev)
 {
        RefPtr<Gdk::Window> window = get_window();
 Splash::on_button_release_event (GdkEventButton* ev)
 {
        RefPtr<Gdk::Window> window = get_window();
-        
+
         if (!window || ev->window != window->gobj()) {
                 return false;
         }
         if (!window || ev->window != window->gobj()) {
                 return false;
         }
-        
+
        hide ();
        return true;
 }
        hide ();
        return true;
 }
@@ -172,9 +179,9 @@ Splash::expose (GdkEventExpose* ev)
 
        window->draw_layout (white, 10, pixbuf->get_height() - 30, layout);
 
 
        window->draw_layout (white, 10, pixbuf->get_height() - 30, layout);
 
-       /* this must execute AFTER the GDK idle update mechanism 
+       /* this must execute AFTER the GDK idle update mechanism
         */
         */
-       
+
        if (expose_is_the_one) {
                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);
@@ -200,15 +207,15 @@ void
 Splash::display ()
 {
        bool was_mapped = is_mapped ();
 Splash::display ()
 {
        bool was_mapped = is_mapped ();
-       
+
        if (!was_mapped) {
                expose_done = false;
                expose_is_the_one = false;
        if (!was_mapped) {
                expose_done = false;
                expose_is_the_one = false;
-       } 
+       }
 
        pop_front ();
        present ();
 
        pop_front ();
        present ();
-       
+
        if (!was_mapped) {
                while (!expose_done) {
                        gtk_main_iteration ();
        if (!was_mapped) {
                while (!expose_done) {
                        gtk_main_iteration ();
@@ -221,12 +228,14 @@ void
 Splash::message (const string& msg)
 {
        string str ("<b>");
 Splash::message (const string& msg)
 {
        string str ("<b>");
-       str += Glib::Markup::escape_text (msg);
+       str += Gtkmm2ext::markup_escape_text (msg);
        str += "</b>";
 
        str += "</b>";
 
+        show ();
+
        layout->set_markup (str);
        Glib::RefPtr<Gdk::Window> win = darea.get_window();
        layout->set_markup (str);
        Glib::RefPtr<Gdk::Window> win = darea.get_window();
-       
+
        if (win) {
                 expose_done = false;
 
        if (win) {
                 expose_done = false;
 
@@ -235,11 +244,6 @@ Splash::message (const string& msg)
                } else {
                        darea.queue_draw ();
                }
                } else {
                        darea.queue_draw ();
                }
-
-                while (!expose_done) {
-                        if(gtk_main_iteration ()) return; // quit was called
-                }
-               gdk_display_flush (gdk_display_get_default());
        }
 }
 
        }
 }