summaryrefslogtreecommitdiffstats
path: root/src/gui/kernel/qwidget_s60.cpp
diff options
context:
space:
mode:
authorJason Barron <jbarron@trolltech.com>2010-04-20 08:09:00 (GMT)
committerJason Barron <jbarron@trolltech.com>2010-04-21 07:40:59 (GMT)
commit904d205b8d69b341aa8f25dbb7a7871e6f56c2ef (patch)
treeeef20d069d3f9fb077fb16380d32778cb836e005 /src/gui/kernel/qwidget_s60.cpp
parent199caad8812128636a76816e931d24dcd2007af6 (diff)
downloadQt-904d205b8d69b341aa8f25dbb7a7871e6f56c2ef.zip
Qt-904d205b8d69b341aa8f25dbb7a7871e6f56c2ef.tar.gz
Qt-904d205b8d69b341aa8f25dbb7a7871e6f56c2ef.tar.bz2
Use QDesktopWidget as a status pane observer on Symbian.
Now that the S60 screen furniture construction is delayed, we need to manually set the status pane observer to get notifications about changes in the size of the status pane. Using the AppUi would have been the obvious choice here, but sadly CAknAppUi (base class for QS60MainAppUi) uses private inheritance when implementing the MEikStatusPaneObserver interface. To work around this problem we make QSymbianControl implement the interface and use the instance of this class that is associated with QDesktopWidget to recevive the notifications and then call the function in the AppUi to maintain the same behavior. Reviewed-by: Janne Anttila Reviewed-by: mread
Diffstat (limited to 'src/gui/kernel/qwidget_s60.cpp')
-rw-r--r--src/gui/kernel/qwidget_s60.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp
index 5db6e70..cae38f5 100644
--- a/src/gui/kernel/qwidget_s60.cpp
+++ b/src/gui/kernel/qwidget_s60.cpp
@@ -508,6 +508,11 @@ void QWidgetPrivate::show_sys()
S60->buttonGroupContainer()->SetCommandSetL(R_AVKON_SOFTKEYS_EMPTY_WITH_IDS);
if (S60->statusPane()) {
+ // Use QDesktopWidget as the status pane observer to proxy for the AppUi.
+ // Can't use AppUi directly because it privately inherits from MEikStatusPaneObserver.
+ QSymbianControl *desktopControl = static_cast<QSymbianControl *>(QApplication::desktop()->winId());
+ S60->statusPane()->SetObserver(desktopControl);
+
// Hide the status pane if fullscreen OR
// Fill client area if maximized OR
// Put window below status pane unless the window has an explicit position.