--- a/src/hbcore/gui/hbsplashscreen.cpp Thu Sep 02 20:44:51 2010 +0300
+++ b/src/hbcore/gui/hbsplashscreen.cpp Fri Sep 17 08:32:10 2010 +0300
@@ -131,11 +131,13 @@
#endif
}
-// Called when QApplication is constructed and the splash was launched
-// before that. This gives a chance for the splash screen to do
+// Called (by HbApplication) when QApplication is constructed and the splash was
+// launched before that. This gives a chance for the splash screen to do
// activies that need an active scheduler or a QApplication instance.
void HbSplashScreenExt::doQtPhase()
{
+ // Can also be called when the splash screen was not started or is already
+ // destroyed, do nothing in such cases.
if (splashScreen) {
#ifdef HB_SPLASH_DIRECT_WS
static_cast<HbSplashScreenSymbianVg *>(splashScreen)->doQtPhase();
@@ -581,6 +583,21 @@
RDebug::Printf("[hbsplash] drawing took %d ms", (int) t.elapsed());
#endif
+ bool isQtAvailable = QCoreApplication::instance() != 0;
+#ifdef HB_SPLASH_VERBOSE_LOGGING
+ RDebug::Printf("[hbsplash] qapplication present: %d", isQtAvailable);
+#endif
+ if (isQtAvailable) {
+ doQtPhase();
+ }
+ // If there is no QApplication then there is no active scheduler,
+ // cone, etc. either so defer the creation of the timer and the
+ // visibility listener. doQtPhase() will be called later by
+ // HbApplication when QApplication is constructed. If HbApplication
+ // is not used at all and start() is called before instantiating
+ // QApplication then doQtPhase() is never called but there is not
+ // much we can do and it is not mandatory anyway.
+
} else {
HbSplashScreen::destroy();
}