diff options
author | Marcin Miklas <marcin.miklas@teleca.com> | 2010-11-09 07:13:00 +0100 |
---|---|---|
committer | Dominik Kapusta <dominik.kapusta@teleca.com> | 2010-11-09 14:02:50 +0100 |
commit | 8f3dac212bf8e15b66616a5ad7cd5d50e1667ba6 (patch) | |
tree | f961ae3465835cfc2d309c837ea4aa8c2799d313 | |
parent | 96b898e58e9328caee239b345091530b8d2fc386 (diff) |
Fixes: NB#202548 - MToolbar is not hidden in portrait mode in blanco when action is hidden
RevBy: Dominik
Details: Improved hidding/showing navigationbar by installing eventFilter on
MNavigationBar and MToolbar and act when their empty property is changed.
This covers properly more cases when navigationbar visibility should changed
and also reduces calls to updateNavigationBarVisibility.
-rw-r--r-- | src/corelib/widgets/mapplicationwindow.cpp | 46 | ||||
-rw-r--r-- | src/corelib/widgets/mapplicationwindow_p.h | 16 | ||||
-rw-r--r-- | src/views/mtoolbarview.cpp | 13 | ||||
-rw-r--r-- | tests/ut_mapplicationwindow/ut_mapplicationwindow.cpp | 19 | ||||
-rw-r--r-- | tests/ut_mapplicationwindow/ut_mapplicationwindow.h | 1 |
5 files changed, 77 insertions, 18 deletions
diff --git a/src/corelib/widgets/mapplicationwindow.cpp b/src/corelib/widgets/mapplicationwindow.cpp index 3c0595a9..3b046d38 100644 --- a/src/corelib/widgets/mapplicationwindow.cpp +++ b/src/corelib/widgets/mapplicationwindow.cpp @@ -182,6 +182,10 @@ void MApplicationWindowPrivate::init() q->connect(q, SIGNAL(switcherEntered()), SLOT(_q_handleInSwitcherVisibilityChange())); + QObject* eventFilter = new MApplicationWindowEventFilter(this, q); + navigationBar->installEventFilter(eventFilter); + toolBar->installEventFilter(eventFilter); + sceneManager->appearSceneWindowNow(navigationBar); sceneManager->appearSceneWindowNow(homeButtonPanel); @@ -623,7 +627,6 @@ void MApplicationWindowPrivate::refreshArrowIconVisibility() } } navigationBar->setArrowIconVisible(haveVisibleMenuAction); - updateNavigationBarVisibility(); } void MApplicationWindowPrivate::setComponentDisplayMode( @@ -717,26 +720,19 @@ void MApplicationWindowPrivate::updateDockWidgetVisibility() } else { sceneManager->disappearSceneWindowNow(dockWidget); } - } void MApplicationWindowPrivate::updateNavigationBarVisibility() { - if (!page || page->model()->navigationBarDisplayMode() == MApplicationPageModel::Hide + if (page && (page->model()->navigationBarDisplayMode() == MApplicationPageModel::Hide || (page->model()->navigationBarDisplayMode() == MApplicationPageModel::AutoHide - && !autoHideComponentsTimer.isActive())) + && !autoHideComponentsTimer.isActive()))) { return; } - Q_Q(MApplicationWindow); - bool emptyNavigationbar = navigationBar->property("isEmpty").toBool(); - bool emptyToolbar = false; - if (q->orientation() == M::Landscape) - emptyToolbar = toolBar->property("emptyInLandscape").toBool(); - else - emptyToolbar = toolBar->property("emptyInPortrait").toBool(); + bool emptyToolbar = toolBar->property("isEmpty").toBool(); if (emptyNavigationbar && (needsDockWidget() || emptyToolbar)) sceneManager->disappearSceneWindow(navigationBar); @@ -891,8 +887,6 @@ void MApplicationWindowPrivate::setupPageEscape() default: qFatal("MApplicationWindow: Invalid page escape mode"); }; - - updateNavigationBarVisibility(); } void MApplicationWindowPrivate::setupPageEscapeAuto() @@ -969,7 +963,6 @@ void MApplicationWindowPrivate::setToolBarViewType(const MTheme::ViewType& viewT { toolBar->setViewType(viewType); _q_placeToolBar(); - updateNavigationBarVisibility(); } void MApplicationWindowPrivate::_q_updateStyle() @@ -985,12 +978,35 @@ void MApplicationWindowPrivate::_q_updateStyle() style = newStyle; _q_placeToolBar(); - updateNavigationBarVisibility(); } else MTheme::releaseStyle(newStyle); } +MApplicationWindowEventFilter::MApplicationWindowEventFilter(MApplicationWindowPrivate* appWinPrivate, QObject* parent) + : QObject(parent), + d(appWinPrivate), + navigationBarEmpty(false), + toolBarEmpty(true) +{} + +bool MApplicationWindowEventFilter::eventFilter(QObject* watched, QEvent* event) +{ + if (event->type() == QEvent::DynamicPropertyChange && + static_cast<QDynamicPropertyChangeEvent*>(event)->propertyName() == "isEmpty") + { + bool newValue = watched->property("isEmpty").toBool(); + if (watched == d->navigationBar && newValue != navigationBarEmpty) { + navigationBarEmpty = newValue; + d->updateNavigationBarVisibility(); + } else if (watched == d->toolBar && newValue != toolBarEmpty) { + toolBarEmpty = newValue; + d->updateNavigationBarVisibility(); + } + } + return QObject::eventFilter(watched, event); +} + MApplicationWindow::MApplicationWindow(MApplicationWindowPrivate &dd, QWidget *parent) : MWindow(dd, new MSceneManager, parent) diff --git a/src/corelib/widgets/mapplicationwindow_p.h b/src/corelib/widgets/mapplicationwindow_p.h index a1d51ac8..0d2b02ab 100644 --- a/src/corelib/widgets/mapplicationwindow_p.h +++ b/src/corelib/widgets/mapplicationwindow_p.h @@ -184,7 +184,21 @@ public: void _q_enablePaintUpdates(); void _q_handleInSwitcherVisibilityChange(); void _q_updateStyle(); + + friend class MApplicationWindowEventFilter; }; -#endif +class MApplicationWindowEventFilter : public QObject +{ +public: + MApplicationWindowEventFilter(MApplicationWindowPrivate* applicationWindowPrivate, QObject* parent = 0); + + bool eventFilter(QObject* watched, QEvent* event); +private: + MApplicationWindowPrivate* d; + bool navigationBarEmpty; + bool toolBarEmpty; +}; + +#endif diff --git a/src/views/mtoolbarview.cpp b/src/views/mtoolbarview.cpp index ad4be209..af0490d9 100644 --- a/src/views/mtoolbarview.cpp +++ b/src/views/mtoolbarview.cpp @@ -247,6 +247,8 @@ void MToolBarViewPrivate::change(QAction *action) if(index != -1) portraitPolicy->insertWidgetAndRemoveOverflow( index, widget ); } + + updateEmptinessProperty(); } void MToolBarViewPrivate::updateWidgetFromAction(MWidget *widget, QAction *action) const @@ -548,8 +550,15 @@ void MToolBarViewPrivate::updateWidgetAlignment() void MToolBarViewPrivate::updateEmptinessProperty() { - controller->setProperty("emptyInLandscape", landscapePolicy->widgetCount() == 0); - controller->setProperty("emptyInPortrait", portraitPolicy->widgetCount() == 0); + MToolBarLayoutPolicy* currentPolicy; + + // MLayout may not have orientationChanged processed yet, so try to take orientation from MSceneManager + if (controller->sceneManager()) + currentPolicy = controller->sceneManager()->orientation() == M::Landscape ? landscapePolicy : portraitPolicy; + else + currentPolicy = static_cast<MToolBarLayoutPolicy*>(layout->policy()); + + controller->setProperty("isEmpty", currentPolicy->widgetCount() == 0); } void MToolBarViewPrivate::setLabelOnlyAsCommonButton(bool enable) diff --git a/tests/ut_mapplicationwindow/ut_mapplicationwindow.cpp b/tests/ut_mapplicationwindow/ut_mapplicationwindow.cpp index 644934e2..d5841a8a 100644 --- a/tests/ut_mapplicationwindow/ut_mapplicationwindow.cpp +++ b/tests/ut_mapplicationwindow/ut_mapplicationwindow.cpp @@ -714,6 +714,25 @@ void Ut_MApplicationWindow::testNavigationBarVisibilityDockedTabbar() delete page; } +void Ut_MApplicationWindow::testNavigationBarVisibilityHideToolbarAction() +{ + // docked tabbar + initToolbarLocationTC(M::Angle0, MToolBar::tabType); + + MNavigationBar* navigationBar = m_subject->d_func()->navigationBar; + + MAction* action = new MAction("Action", m_subject); + action->setLocation(MAction::ToolBarLocation); + m_subject->addAction(action); + + fastForwardDisappearAppearAnimations(navigationBar); + QCOMPARE(navigationBar->isVisible(), true); + + action->setVisible(false); + fastForwardDisappearAppearAnimations(navigationBar); + QCOMPARE(navigationBar->isVisible(), false); +} + MNavigationBar *Ut_MApplicationWindow::fetchNavigationBar( const QList<QGraphicsItem *> &itemsList) const diff --git a/tests/ut_mapplicationwindow/ut_mapplicationwindow.h b/tests/ut_mapplicationwindow/ut_mapplicationwindow.h index d495be0e..b9c9fe9d 100644 --- a/tests/ut_mapplicationwindow/ut_mapplicationwindow.h +++ b/tests/ut_mapplicationwindow/ut_mapplicationwindow.h @@ -89,6 +89,7 @@ private slots: void testNavigationBarVisibilityFloatableTabbar(); void testNavigationBarVisibilityDockedTabbar(); + void testNavigationBarVisibilityHideToolbarAction(); private: MNavigationBar *fetchNavigationBar(const QList<QGraphicsItem *> &itemsList) const; |