summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/kernel/qapplication_s60.cpp3
-rw-r--r--src/gui/kernel/qt_s60_p.h2
-rw-r--r--src/gui/s60framework/qs60mainappui.cpp14
3 files changed, 18 insertions, 1 deletions
diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp
index 96b82da..98f00fb 100644
--- a/src/gui/kernel/qapplication_s60.cpp
+++ b/src/gui/kernel/qapplication_s60.cpp
@@ -1524,7 +1524,8 @@ void QSymbianControl::HandleResourceChange(int resourceType)
// client area.
if (S60->statusPane() && (S60->statusPane()->IsVisible() || m_lastStatusPaneVisibility)) {
m_lastStatusPaneVisibility = S60->statusPane()->IsVisible();
- handleClientAreaChange();
+ if (S60->handleStatusPaneResizeNotifications)
+ handleClientAreaChange();
}
if (IsFocused() && IsVisible()) {
qwidget->d_func()->setWindowIcon_sys(true);
diff --git a/src/gui/kernel/qt_s60_p.h b/src/gui/kernel/qt_s60_p.h
index c4ddc26..fccb44d 100644
--- a/src/gui/kernel/qt_s60_p.h
+++ b/src/gui/kernel/qt_s60_p.h
@@ -154,6 +154,7 @@ public:
int orientationSet : 1;
int partial_keyboard : 1;
int partialKeyboardOpen : 1;
+ int handleStatusPaneResizeNotifications : 1;
QApplication::QS60MainApplicationFactory s60ApplicationFactory; // typedef'ed pointer type
QPointer<QWidget> splitViewLastWidget;
@@ -343,6 +344,7 @@ inline QS60Data::QS60Data()
orientationSet(0),
partial_keyboard(0),
partialKeyboardOpen(0),
+ handleStatusPaneResizeNotifications(1),
s60ApplicationFactory(0)
#ifdef Q_OS_SYMBIAN
,s60InstalledTrapHandler(0)
diff --git a/src/gui/s60framework/qs60mainappui.cpp b/src/gui/s60framework/qs60mainappui.cpp
index 4f08fe2..e2ec78c 100644
--- a/src/gui/s60framework/qs60mainappui.cpp
+++ b/src/gui/s60framework/qs60mainappui.cpp
@@ -315,7 +315,21 @@ TRect QS60MainAppUi::ApplicationRect() const
*/
void QS60MainAppUi::HandleScreenDeviceChangedL()
{
+ // This function triggers AppUi relayout which also generates
+ // HandleStatusPaneSizeChange(). We don't want to handle
+ // status pane resizes at this point because it causes
+ // Qt window resize and thus EGL surface resize in the middle of
+ // incomplete layout process causing unnecessary overhead.
+ // To prevent status pane resize handling while layout is still
+ // in progress, we guard relayouting with handleStatusPaneResizeNotifications
+ // flag. QSymbianControl checks this flag before doing Qt window
+ // resize due to status pane change.
+ // Eventually when layout is ready, Symbian framework calls
+ // HandleResourceChangeL(KEikDynamicLayoutVariantSwitch) which triggers
+ // resize to Qt window and to its EGL surface.
+ S60->handleStatusPaneResizeNotifications = false;
QS60MainAppUiBase::HandleScreenDeviceChangedL();
+ S60->handleStatusPaneResizeNotifications = true;
}
/*!