summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQt Continuous Integration System <qt-info@nokia.com>2011-10-20 08:50:15 (GMT)
committerQt Continuous Integration System <qt-info@nokia.com>2011-10-20 08:50:15 (GMT)
commit2df43004a5c093879371574cfe9ea3f68fefa69c (patch)
tree77b3799220724d3ef5e3eecb52a104287867cede
parent8051a73be276995adfc4508a0cb5ad6451e8ab45 (diff)
parent62a33522fd97782259319c7f02209c0a7b13b201 (diff)
downloadQt-2df43004a5c093879371574cfe9ea3f68fefa69c.zip
Qt-2df43004a5c093879371574cfe9ea3f68fefa69c.tar.gz
Qt-2df43004a5c093879371574cfe9ea3f68fefa69c.tar.bz2
Merge branch 'master' of scm.dev.nokia.troll.no:qt/qt-symbian-staging into master-integration
* 'master' of scm.dev.nokia.troll.no:qt/qt-symbian-staging: Symbian - Change working directory of applications in ROM QtGui def file update Show SaxBookmarks as maximized in Symbian Early construction of status pane and softkeys for Symbian boosted apps Maximized dialogs are incorrectly positioned after layout switch
-rw-r--r--examples/xml/saxbookmarks/main.cpp2
-rw-r--r--src/corelib/kernel/qcore_symbian_p.cpp9
-rw-r--r--src/gui/dialogs/qdialog.cpp4
-rw-r--r--src/gui/kernel/qapplication.cpp4
-rw-r--r--src/gui/kernel/qapplication_p.h1
-rw-r--r--src/gui/kernel/qapplication_s60.cpp44
-rw-r--r--src/gui/kernel/qt_s60_p.h3
-rw-r--r--src/gui/kernel/qwidget_s60.cpp84
-rw-r--r--src/s60installs/bwins/QtGuiu.def3
-rw-r--r--src/s60installs/eabi/QtGuiu.def3
10 files changed, 98 insertions, 59 deletions
diff --git a/examples/xml/saxbookmarks/main.cpp b/examples/xml/saxbookmarks/main.cpp
index 5d70ec8..ba0e1db 100644
--- a/examples/xml/saxbookmarks/main.cpp
+++ b/examples/xml/saxbookmarks/main.cpp
@@ -47,7 +47,7 @@ int main(int argc, char *argv[])
QApplication app(argc, argv);
MainWindow mainWin;
#if defined(Q_OS_SYMBIAN)
- mainWin.showFullScreen();
+ mainWin.showMaximized();
#else
mainWin.show();
#endif
diff --git a/src/corelib/kernel/qcore_symbian_p.cpp b/src/corelib/kernel/qcore_symbian_p.cpp
index 57ae2af..4f953a7 100644
--- a/src/corelib/kernel/qcore_symbian_p.cpp
+++ b/src/corelib/kernel/qcore_symbian_p.cpp
@@ -121,18 +121,17 @@ public:
TInt err = iFs.CreatePrivatePath(sysdrive);
if (err != KErrNone && err != KErrAlreadyExists)
qWarning("Failed to create private path on system drive.");
- //BC with 4.7: set working directory to same drive as application
TFileName pfn = RProcess().FileName();
TInt drive;
if (pfn.Length() > 0 && iFs.CharToDrive(pfn[0], drive) == KErrNone) {
- // for system drive or rom based apps, leave the path on system drive
+ //BC with 4.7: create private path on application drive (except rom or system drive which is done above)
if (drive != sysdrive && drive != EDriveZ) {
err = iFs.CreatePrivatePath(drive);
- if (err == KErrNone || err == KErrAlreadyExists)
- iFs.SetSessionToPrivate(drive);
- else
+ if (err != KErrNone && err != KErrAlreadyExists)
qWarning("Failed to create private path on application drive.");
}
+ //BC with 4.7: set working directory to same drive as application
+ iFs.SetSessionToPrivate(drive);
}
}
diff --git a/src/gui/dialogs/qdialog.cpp b/src/gui/dialogs/qdialog.cpp
index 2fb6c67..d2211af 100644
--- a/src/gui/dialogs/qdialog.cpp
+++ b/src/gui/dialogs/qdialog.cpp
@@ -909,6 +909,10 @@ bool QDialog::symbianAdjustedPosition()
AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EStatusPane, statusPaneRect);
} else {
AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EStaconTop, statusPaneRect);
+ // In some native layouts, StaCon is not used. Try to fetch the status pane
+ // height from StatusPane component.
+ if (statusPaneRect.IsEmpty())
+ AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EStatusPane, statusPaneRect);
}
p.setX(0);
diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp
index 15d37c3..35a9559 100644
--- a/src/gui/kernel/qapplication.cpp
+++ b/src/gui/kernel/qapplication.cpp
@@ -874,6 +874,10 @@ void QApplicationPrivate::construct(
if (qt_is_gui_used)
qt_guiPlatformPlugin();
#endif
+
+#ifdef Q_OS_SYMBIAN
+ symbianHandleLiteModeStartup();
+#endif
}
#if defined(Q_WS_X11)
diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h
index e1252a9..0756d6c 100644
--- a/src/gui/kernel/qapplication_p.h
+++ b/src/gui/kernel/qapplication_p.h
@@ -561,6 +561,7 @@ public:
int symbianProcessWsEvent(const QSymbianEvent *symbianEvent);
int symbianHandleCommand(const QSymbianEvent *symbianEvent);
int symbianResourceChange(const QSymbianEvent *symbianEvent);
+ void symbianHandleLiteModeStartup();
void _q_aboutToQuit();
#endif
diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp
index 03da630..7d198ce 100644
--- a/src/gui/kernel/qapplication_s60.cpp
+++ b/src/gui/kernel/qapplication_s60.cpp
@@ -201,6 +201,32 @@ bool QS60Data::setRecursiveDecorationsVisibility(QWidget *window, Qt::WindowStat
}
#endif
+void QS60Data::createStatusPaneAndCBA()
+{
+ CEikAppUi *ui = static_cast<CEikAppUi *>(S60->appUi());
+ MEikAppUiFactory *factory = CEikonEnv::Static()->AppUiFactory();
+ QT_TRAP_THROWING(
+ factory->CreateResourceIndependentFurnitureL(ui);
+ CEikButtonGroupContainer *cba = CEikButtonGroupContainer::NewL(CEikButtonGroupContainer::ECba,
+ CEikButtonGroupContainer::EHorizontal, ui, R_AVKON_SOFTKEYS_EMPTY_WITH_IDS);
+ CEikButtonGroupContainer *oldCba = factory->SwapButtonGroup(cba);
+ Q_ASSERT(!oldCba);
+ S60->setButtonGroupContainer(cba);
+ CEikMenuBar *menuBar = new(ELeave) CEikMenuBar;
+ menuBar->ConstructL(ui, 0, R_AVKON_MENUPANE_EMPTY);
+ menuBar->SetMenuType(CEikMenuBar::EMenuOptions);
+ S60->appUi()->AddToStackL(menuBar, ECoeStackPriorityMenu, ECoeStackFlagRefusesFocus);
+ CEikMenuBar *oldMenu = factory->SwapMenuBar(menuBar);
+ Q_ASSERT(!oldMenu);
+ )
+ 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);
+ }
+}
+
void QS60Data::controlVisibilityChanged(CCoeControl *control, bool visible)
{
if (QWidgetPrivate::mapper && QWidgetPrivate::mapper->contains(control)) {
@@ -2580,6 +2606,24 @@ int QApplicationPrivate::symbianResourceChange(const QSymbianEvent *symbianEvent
return ret;
}
+void QApplicationPrivate::symbianHandleLiteModeStartup()
+{
+ if (QCoreApplication::arguments().contains(QLatin1String("--startup-lite"))) {
+ if (!QApplication::testAttribute(Qt::AA_S60DontConstructApplicationPanes)
+ && !S60->buttonGroupContainer() && !S60->statusPane()) {
+ // hide and force this app to the background before creating screen furniture to avoid flickers
+ CAknAppUi *appui = static_cast<CAknAppUi*>(CCoeEnv::Static()->AppUi());
+ if (appui)
+ appui->HideApplicationFromFSW(ETrue);
+ CCoeEnv::Static()->RootWin().SetOrdinalPosition(-1);
+ S60->createStatusPaneAndCBA();
+ if (S60->statusPane()) {
+ S60->setStatusPaneAndButtonGroupVisibility(false, false);
+ }
+ }
+ }
+}
+
#ifndef QT_NO_WHEELEVENT
int QApplication::wheelScrollLines()
{
diff --git a/src/gui/kernel/qt_s60_p.h b/src/gui/kernel/qt_s60_p.h
index 96b8141..5ad5b00 100644
--- a/src/gui/kernel/qt_s60_p.h
+++ b/src/gui/kernel/qt_s60_p.h
@@ -163,6 +163,7 @@ public:
int partial_keyboardAutoTranslation : 1;
int partialKeyboardOpen : 1;
int handleStatusPaneResizeNotifications : 1;
+ int screenFurnitureFullyCreated : 1;
QApplication::QS60MainApplicationFactory s60ApplicationFactory; // typedef'ed pointer type
QPointer<QWidget> splitViewLastWidget;
@@ -198,6 +199,7 @@ public:
static inline void setButtonGroupContainer(CEikButtonGroupContainer* newCba);
static void setStatusPaneAndButtonGroupVisibility(bool statusPaneVisible, bool buttonGroupVisible);
static bool setRecursiveDecorationsVisibility(QWidget *window, Qt::WindowStates newState);
+ static void createStatusPaneAndCBA();
#endif
static void controlVisibilityChanged(CCoeControl *control, bool visible);
static TRect clientRect();
@@ -365,6 +367,7 @@ inline QS60Data::QS60Data()
partial_keyboardAutoTranslation(1),
partialKeyboardOpen(0),
handleStatusPaneResizeNotifications(1),
+ screenFurnitureFullyCreated(0),
s60ApplicationFactory(0)
#ifdef Q_OS_SYMBIAN
,s60InstalledTrapHandler(0)
diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp
index 00661ae..396c306 100644
--- a/src/gui/kernel/qwidget_s60.cpp
+++ b/src/gui/kernel/qwidget_s60.cpp
@@ -505,63 +505,41 @@ void QWidgetPrivate::show_sys()
#ifdef Q_WS_S60
// Lazily initialize the S60 screen furniture when the first window is shown.
if (q->isWindow() && !QApplication::testAttribute(Qt::AA_S60DontConstructApplicationPanes)
- && !S60->buttonGroupContainer() && !S60->statusPane()) {
-
- if (!q->testAttribute(Qt::WA_DontShowOnScreen)) {
-
- // Create the status pane and CBA here
- CEikAppUi *ui = static_cast<CEikAppUi *>(S60->appUi());
- MEikAppUiFactory *factory = CEikonEnv::Static()->AppUiFactory();
-
- QT_TRAP_THROWING(
- factory->CreateResourceIndependentFurnitureL(ui);
-
- CEikButtonGroupContainer *cba = CEikButtonGroupContainer::NewL(CEikButtonGroupContainer::ECba,
- CEikButtonGroupContainer::EHorizontal,ui,R_AVKON_SOFTKEYS_EMPTY_WITH_IDS);
- if (isFullscreen && !cbaRequested)
- cba->MakeVisible(false);
-
- CEikButtonGroupContainer *oldCba = factory->SwapButtonGroup(cba);
- Q_ASSERT(!oldCba);
- S60->setButtonGroupContainer(cba);
-
- // If the creation of the first widget is delayed, for example by doing it
- // inside the event loop, S60 somehow "forgets" to set the visibility of the
- // toolbar (the three middle softkeys) when you flip the phone over, so we
- // need to do it ourselves to avoid a "hole" in the application, even though
- // Qt itself does not use the toolbar directly..
- CAknAppUi *appui = dynamic_cast<CAknAppUi *>(CEikonEnv::Static()->AppUi());
- if (appui) {
- CAknToolbar *toolbar = appui->PopupToolbar();
- if (toolbar && !toolbar->IsVisible())
- toolbar->SetToolbarVisibility(ETrue);
- }
+ && !q->testAttribute(Qt::WA_DontShowOnScreen) && !S60->screenFurnitureFullyCreated) {
+ // Create the status pane and CBA here if not yet done. These could be created earlier
+ // if application was launched in "App-Lite" version
+ if (!S60->buttonGroupContainer() && !S60->statusPane())
+ S60->createStatusPaneAndCBA();
+
+ if (S60->buttonGroupContainer()) {
+ if (isFullscreen && !cbaRequested)
+ S60->buttonGroupContainer()->MakeVisible(false);
+ }
+
+ // If the creation of the first widget is delayed, for example by doing it
+ // inside the event loop, S60 somehow "forgets" to set the visibility of the
+ // toolbar (the three middle softkeys) when you flip the phone over, so we
+ // need to do it ourselves to avoid a "hole" in the application, even though
+ // Qt itself does not use the toolbar directly..
+ CAknAppUi *appui = dynamic_cast<CAknAppUi *>(CEikonEnv::Static()->AppUi());
+ if (appui) {
+ CAknToolbar *toolbar = appui->PopupToolbar();
+ if (toolbar && !toolbar->IsVisible())
+ toolbar->SetToolbarVisibility(ETrue);
+ }
- CEikMenuBar *menuBar = new(ELeave) CEikMenuBar;
- menuBar->ConstructL(ui, 0, R_AVKON_MENUPANE_EMPTY);
- menuBar->SetMenuType(CEikMenuBar::EMenuOptions);
- S60->appUi()->AddToStackL(menuBar,ECoeStackPriorityMenu,ECoeStackFlagRefusesFocus);
-
- CEikMenuBar *oldMenu = factory->SwapMenuBar(menuBar);
- Q_ASSERT(!oldMenu);
- )
-
- 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);
- if (isFullscreen) {
- const bool cbaVisible = S60->buttonGroupContainer() && S60->buttonGroupContainer()->IsVisible();
- S60->setStatusPaneAndButtonGroupVisibility(false, cbaVisible);
- if (cbaVisible) {
- // Fix window dimensions as without screen furniture they will have
- // defaulted to full screen dimensions initially.
- id->handleClientAreaChange();
- }
+ if (S60->statusPane()) {
+ if (isFullscreen) {
+ const bool cbaVisible = S60->buttonGroupContainer() && S60->buttonGroupContainer()->IsVisible();
+ S60->setStatusPaneAndButtonGroupVisibility(false, cbaVisible);
+ if (cbaVisible) {
+ // Fix window dimensions as without screen furniture they will have
+ // defaulted to full screen dimensions initially.
+ id->handleClientAreaChange();
}
}
}
+ S60->screenFurnitureFullyCreated = true;
}
#endif
diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def
index 16de776..335b94f 100644
--- a/src/s60installs/bwins/QtGuiu.def
+++ b/src/s60installs/bwins/QtGuiu.def
@@ -13983,4 +13983,7 @@ EXPORTS
?qt_static_metacall@QShortcut@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13982 NONAME ; void QShortcut::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *)
?endOfLine@QTextEngine@@AAEHH@Z @ 13983 NONAME ; int QTextEngine::endOfLine(int)
?queryKeyboardModifiers@QApplication@@SA?AV?$QFlags@W4KeyboardModifier@Qt@@@@XZ @ 13984 NONAME ; class QFlags<enum Qt::KeyboardModifier> QApplication::queryKeyboardModifiers(void)
+ ?resetFontEngineCache@QTextEngine@@QAEXXZ @ 13985 NONAME ; void QTextEngine::resetFontEngineCache(void)
+ ?symbianHandleLiteModeStartup@QApplicationPrivate@@QAEXXZ @ 13986 NONAME ; void QApplicationPrivate::symbianHandleLiteModeStartup(void)
+ ?_q_cleanupWinIds@QWidgetPrivate@@QAEXXZ @ 13987 NONAME ; void QWidgetPrivate::_q_cleanupWinIds(void)
diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def
index 4133773..3606f9c 100644
--- a/src/s60installs/eabi/QtGuiu.def
+++ b/src/s60installs/eabi/QtGuiu.def
@@ -12796,4 +12796,7 @@ EXPORTS
_ZTV20QBlittablePixmapData @ 12795 NONAME
_Zls6QDebugPK13QSymbianEvent @ 12796 NONAME
_ZN12QApplication22queryKeyboardModifiersEv @ 12797 NONAME
+ _ZN11QTextEngine20resetFontEngineCacheEv @ 12798 NONAME
+ _ZN14QWidgetPrivate16_q_cleanupWinIdsEv @ 12799 NONAME
+ _ZN19QApplicationPrivate28symbianHandleLiteModeStartupEv @ 12800 NONAME