diff -r 7516d6d86cf5 -r ed14f46c0e55 src/hbcore/gui/hbview.cpp --- a/src/hbcore/gui/hbview.cpp Mon Oct 04 17:49:30 2010 +0300 +++ b/src/hbcore/gui/hbview.cpp Mon Oct 18 18:23:13 2010 +0300 @@ -38,6 +38,7 @@ #include "hbscreen_p.h" #include "hbviewactionmanager_p.h" #include "hbglobal_p.h" +#include "hbevent.h" #include /*! @@ -271,6 +272,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 +421,13 @@ { Q_D(const HbView); if (!d->toolBar) { - HbView *that = const_cast(this); - that->setToolBar(new HbToolBar); + HbViewPrivate* p = const_cast(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; } @@ -534,6 +552,9 @@ d->mLayout = 0; } } + // remove view switch effects the item might be part of + HbEffect::cancel(this); + delete d->widget; d->widget = widget; } @@ -723,49 +744,53 @@ HbView::HbViewFlags originalFlags(d->mViewFlags); d->mViewFlags = flags; if (mainWindow()) { - - // Statusbar-animation - bool statusBarAnimating = false; - HbStatusBar *statusBar = HbMainWindowPrivate::d_ptr(mainWindow())->mStatusBar; - if ((d->mViewFlags & HbView::ViewStatusBarHidden) && !(originalFlags & HbView::ViewStatusBarHidden)) { + bool isCurrentView(mainWindow()->currentView() == this); + if (isCurrentView) { + // Statusbar-animation + bool statusBarAnimating = false; + HbStatusBar *statusBar = HbMainWindowPrivate::d_ptr(mainWindow())->mStatusBar; + if ((d->mViewFlags & HbView::ViewStatusBarHidden) && !(originalFlags & HbView::ViewStatusBarHidden)) { #ifdef HB_EFFECTS HbEffect::start(statusBar, "statusbar", "disappear", this, "statusBarEffectFinished"); #endif // HB_EFFECTS 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; - } + } - // Titlebar-animation - bool titleBarAnimating = false; - HbTitleBar *titleBar = HbMainWindowPrivate::d_ptr(mainWindow())->mTitleBar; - if ((d->mViewFlags & HbView::ViewTitleBarHidden) && !(originalFlags & HbView::ViewTitleBarHidden)) { + // Titlebar-animation + bool titleBarAnimating = false; + HbTitleBar *titleBar = HbMainWindowPrivate::d_ptr(mainWindow())->mTitleBar; + if ((d->mViewFlags & HbView::ViewTitleBarHidden) && !(originalFlags & HbView::ViewTitleBarHidden)) { #ifdef HB_EFFECTS - HbEffect::start(titleBar, "titlebar", "disappear", this, "titleBarEffectFinished"); + HbEffect::start(titleBar, "titlebar", "disappear", this, "titleBarEffectFinished"); #endif // HB_EFFECTS - titleBarAnimating = true; - } else if (!(d->mViewFlags & HbView::ViewTitleBarHidden) && (originalFlags & HbView::ViewTitleBarHidden)) { + titleBarAnimating = true; + } else if (!(d->mViewFlags & HbView::ViewTitleBarHidden) && (originalFlags & HbView::ViewTitleBarHidden)) { #ifdef HB_EFFECTS - HbEffect::start(titleBar, "titlebar", "appear", this, "titleBarEffectFinished"); + titleBar->setVisible(true); + HbEffect::start(titleBar, "titlebar", "appear", this, "titleBarEffectFinished"); #endif // HB_EFFECTS - titleBarAnimating = true; - } + titleBarAnimating = true; + } - if (!statusBarAnimating) { - statusBar->setVisible(!(d->mViewFlags & HbView::ViewStatusBarHidden)); - statusBar->propertiesChanged(); - } - if (!titleBarAnimating) { - titleBar->setVisible(!(d->mViewFlags & HbView::ViewTitleBarHidden)); - if (d->mNavigationActionSet) { - titleBar->setNavigationAction(d->mNavigationAction); - } else { - titleBar->setDefaultNavigationAction(); + if (!statusBarAnimating && !titleBarAnimating) { + statusBar->setVisible(!(d->mViewFlags & HbView::ViewStatusBarHidden)); + statusBar->propertiesChanged(); } - titleBar->propertiesChanged(); + if (!titleBarAnimating && !statusBarAnimating) { + titleBar->setVisible(!(d->mViewFlags & HbView::ViewTitleBarHidden)); + if (d->mNavigationActionSet) { + titleBar->setNavigationAction(d->mNavigationAction); + } else { + titleBar->setDefaultNavigationAction(); + } + titleBar->propertiesChanged(); + } } if (d->toolBar) { d->toolBar->updatePrimitives(); @@ -793,7 +818,7 @@ int visibilityFlags = HbView::ViewTitleBarMinimized | HbView::ViewTitleBarFloating | HbView::ViewTitleBarMinimizable | HbView::ViewStatusBarHidden | HbView::ViewStatusBarFloating | HbView::ViewTitleBarHidden | HbView::ViewDisableRelayout; - if ((d->mViewFlags & visibilityFlags) != (originalFlags & visibilityFlags)) { + if (isCurrentView && (d->mViewFlags & visibilityFlags) != (originalFlags & visibilityFlags)) { HbMainWindowPrivate::d_ptr(mainWindow())->mClippingItem->decoratorVisibilityChanged(); } } @@ -810,8 +835,9 @@ void HbView::setTitleBarVisible(bool visible) { Q_D(HbView); - if (visible) { - setViewFlags(d->mViewFlags &~ HbView::ViewTitleBarHidden); + + if (visible) { + setViewFlags(d->mViewFlags &~ HbView::ViewTitleBarHidden); } else { setViewFlags(d->mViewFlags | HbView::ViewTitleBarHidden); } @@ -891,6 +917,7 @@ */ void HbView::changeEvent(QEvent *event) { + Q_D(const HbView); // We're listening for layout direction changes, because the screen needs to be // repolished, if the layout direction changes and the titlebar is minimizable. @@ -903,6 +930,11 @@ if (mw && mw->currentView() == this) { HbMainWindowPrivate::d_ptr(mw)->mClippingItem->decoratorVisibilityChanged(); } + } else if(event->type() == HbEvent::ThemeChanged) { + HbMainWindow *mw = mainWindow(); + if (d->toolBar && mw && mw->currentView() != this) { + d->toolBar->changeEvent(event); + } } HbWidget::changeEvent(event); @@ -1029,6 +1061,9 @@ Ownership of \a action is not taken. + \note The navigation button will not display text that is assigned to the + action. + \sa navigationAction() */ void HbView::setNavigationAction(HbAction *action)