Update fr.po
[ardour.git] / gtk2_ardour / splash.cc
index ee0566a9100f6d94653456316830ed87806fafb9..c2522472752988262abb18d77f93ef1657bd7016 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
@@ -45,10 +47,10 @@ 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)) {
+       if (!find_file (ardour_data_search_path(), "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 +102,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 +127,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 +146,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 +176,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 +204,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 +225,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 +241,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());
        }
 }
 
        }
 }