src/hbcore/gui/hbview.cpp
changeset 21 4633027730f5
parent 6 c3690ec91ef8
child 23 e6ad4ef83b23
--- a/src/hbcore/gui/hbview.cpp	Tue Jul 06 14:36:53 2010 +0300
+++ b/src/hbcore/gui/hbview.cpp	Wed Aug 18 10:05:37 2010 +0300
@@ -271,6 +271,18 @@
 }
 
 /*!
+    \internal
+ */
+void HbViewPrivate::delayedConstruction()
+{
+   //view content is drawn already on screen.Try to
+   //create the content of options menu now.
+    if (menu) {
+        HbMenuPrivate::d_ptr(menu)->delayedLayout();
+    }
+}
+
+/*!
     Constructs a view with the given \a parent.
 */
 HbView::HbView(QGraphicsItem *parent) :
@@ -408,8 +420,13 @@
 {
     Q_D(const HbView);
     if (!d->toolBar) {
-        HbView *that = const_cast<HbView *>(this);
-        that->setToolBar(new HbToolBar);
+        HbViewPrivate* p = const_cast<HbViewPrivate*>(d);
+        p->toolBar = new HbToolBar;
+        // duplicates functionality of HbMainWindowPrivate::_q_viewToolBarChanged as a perf optimisation
+        if ( mainWindow() && mainWindow()->currentView() == this ) {
+            HbMainWindowPrivate::d_ptr(mainWindow())->addToolBarToLayout(p->toolBar);
+        }
+
     }
     return d->toolBar;
 }
@@ -734,6 +751,7 @@
             statusBarAnimating = true;
         } else if (!(d->mViewFlags & HbView::ViewStatusBarHidden) && (originalFlags & HbView::ViewStatusBarHidden)) {
 #ifdef HB_EFFECTS
+            statusBar->setVisible(true);
             HbEffect::start(statusBar, "statusbar", "appear", this, "statusBarEffectFinished");
 #endif // HB_EFFECTS
             statusBarAnimating = true;
@@ -749,16 +767,17 @@
             titleBarAnimating = true;
         } else if (!(d->mViewFlags & HbView::ViewTitleBarHidden) && (originalFlags & HbView::ViewTitleBarHidden)) {
 #ifdef HB_EFFECTS
+            titleBar->setVisible(true);
             HbEffect::start(titleBar, "titlebar", "appear", this, "titleBarEffectFinished");
 #endif // HB_EFFECTS
             titleBarAnimating = true;
         }
 
-        if (!statusBarAnimating) {
+        if (!statusBarAnimating && !titleBarAnimating) {
             statusBar->setVisible(!(d->mViewFlags & HbView::ViewStatusBarHidden));
             statusBar->propertiesChanged();
         }
-        if (!titleBarAnimating) {
+        if (!titleBarAnimating && !statusBarAnimating) {
             titleBar->setVisible(!(d->mViewFlags & HbView::ViewTitleBarHidden));
             if (d->mNavigationActionSet) {
                 titleBar->setNavigationAction(d->mNavigationAction);
@@ -810,8 +829,9 @@
 void HbView::setTitleBarVisible(bool visible)
 {
     Q_D(HbView);
+
     if (visible) {
-        setViewFlags(d->mViewFlags &~ HbView::ViewTitleBarHidden);
+        setViewFlags(d->mViewFlags &~ HbView::ViewTitleBarHidden);        
     } else {
         setViewFlags(d->mViewFlags | HbView::ViewTitleBarHidden);
     }