summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gui/kernel/qapplication_s60.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp
index b5db3d04fe..bf76a0e6d1 100644
--- a/src/gui/kernel/qapplication_s60.cpp
+++ b/src/gui/kernel/qapplication_s60.cpp
@@ -1427,6 +1427,24 @@ void QSymbianControl::handleClientAreaChange()
SetExtentToWholeScreen();
} else if (qwidget->isMaximized() || (qwidget->isFullScreen() && cbaVisibilityHint)) {
TRect r = static_cast<CEikAppUi*>(S60->appUi())->ClientRect();
+ if (!S60->splitViewLastWidget && S60->partialKeyboardOpen) {
+ // For some curious reason, native side indicates that splitviewRect starts
+ // underneath statuspane. So, if statuspane is visible, move the splitview
+ // down a little bit. Note that if there is S60->splitViewLastWidget, it means
+ // the resizing is done by input context handling and this metrics calculation
+ // is not needed.
+ TRect statusPaneRect;
+ TRect mainRect;
+ AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EStatusPane, statusPaneRect);
+ AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainRect);
+ int clientAreaHeight = mainRect.Height();
+ CEikStatusPane *const s = S60->statusPane();
+ if (s && s->IsVisible())
+ r.Move(0, statusPaneRect.Height());
+ else
+ clientAreaHeight += statusPaneRect.Height();
+ r.SetHeight(clientAreaHeight);
+ }
SetExtent(r.iTl, r.Size());
} else if (!qwidget->isMinimized()) { // Normal geometry
if (!qwidget->testAttribute(Qt::WA_Resized)) {