diff options
-rw-r--r-- | src/gui/kernel/qapplication_s60.cpp | 3 | ||||
-rw-r--r-- | src/gui/kernel/qt_s60_p.h | 2 | ||||
-rw-r--r-- | src/gui/s60framework/qs60mainappui.cpp | 14 |
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; } /*! |