aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcin Miklas <marcin.miklas@teleca.com>2010-11-09 07:13:00 +0100
committerDominik Kapusta <dominik.kapusta@teleca.com>2010-11-09 14:02:50 +0100
commit8f3dac212bf8e15b66616a5ad7cd5d50e1667ba6 (patch)
treef961ae3465835cfc2d309c837ea4aa8c2799d313
parent96b898e58e9328caee239b345091530b8d2fc386 (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.cpp46
-rw-r--r--src/corelib/widgets/mapplicationwindow_p.h16
-rw-r--r--src/views/mtoolbarview.cpp13
-rw-r--r--tests/ut_mapplicationwindow/ut_mapplicationwindow.cpp19
-rw-r--r--tests/ut_mapplicationwindow/ut_mapplicationwindow.h1
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;