diff options
16 files changed, 301 insertions, 299 deletions
diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf index 3ba2a8c..abc8a7a 100644 --- a/mkspecs/common/symbian/symbian.conf +++ b/mkspecs/common/symbian/symbian.conf @@ -64,14 +64,14 @@ QMAKE_LINK_OBJECT_SCRIPT= object_script QMAKE_LIBS = -llibc -llibm -leuser -llibdl QMAKE_LIBS_CORE = $$QMAKE_LIBS -llibpthread -lefsrv -QMAKE_LIBS_GUI = $$QMAKE_LIBS_CORE -lfbscli -lbitgdi -lhal -lgdi -lws32 -lapgrfx -lcone -leikcore -lmediaclientaudio +QMAKE_LIBS_GUI = $$QMAKE_LIBS_CORE -lfbscli -lbitgdi -lhal -lgdi -lws32 -lapgrfx -lcone -leikcore -lmediaclientaudio -leikcoctl -leiksrv -lapparc QMAKE_LIBS_NETWORK = QMAKE_LIBS_EGL = -llibEGL QMAKE_LIBS_OPENGL = QMAKE_LIBS_OPENVG = -llibOpenVG QMAKE_LIBS_COMPAT = QMAKE_LIBS_QT_ENTRY = -llibcrt0.lib -QMAKE_LIBS_S60 = -lavkon -leikcoctl +QMAKE_LIBS_S60 = -lavkon !isEmpty(QMAKE_SH) { QMAKE_COPY = cp diff --git a/mkspecs/features/symbian/default_post.prf b/mkspecs/features/symbian/default_post.prf index 3c2944c..7c9e8ee 100644 --- a/mkspecs/features/symbian/default_post.prf +++ b/mkspecs/features/symbian/default_post.prf @@ -4,7 +4,7 @@ contains(TEMPLATE, ".*app") { contains(CONFIG, stdbinary) { QMAKE_LIBS += } else:contains(QT, gui):contains(CONFIG,qt) { - S60MAIN_LIBS = -leuser -lavkon -leikcore -leiksrv -lws32 -lapparc -lcone -leikcoctl -lbafl -lefsrv + S60MAIN_LIBS = -leuser QMAKE_LIBS += -lqtmain.lib $$S60MAIN_LIBS } else { QMAKE_LIBS += $$QMAKE_LIBS_QT_ENTRY diff --git a/src/gui/gui.pro b/src/gui/gui.pro index eb3a33f..7c24002 100644 --- a/src/gui/gui.pro +++ b/src/gui/gui.pro @@ -17,7 +17,10 @@ x11:include(kernel/x11.pri) mac:include(kernel/mac.pri) win32:include(kernel/win.pri) embedded:include(embedded/embedded.pri) -symbian:include(kernel/symbian.pri) +symbian { + include(kernel/symbian.pri) + include(s60framework/s60framework.pri) +} #modules include(animation/animation.pri) diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index 648a5d5..160c71c 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -63,10 +63,13 @@ #include "apgwgnam.h" // For CApaWindowGroupName #include <MdaAudioTonePlayer.h> // For CMdaAudioToneUtility -#if !defined(QT_NO_IM) && defined(Q_WS_S60) -#include "qinputcontext.h" -#include <private/qcoefepinputcontext_p.h> -#endif // !defined(QT_NO_IM) && defined(Q_WS_S60) +#if defined(Q_WS_S60) +# if !defined(QT_NO_IM) +# include "qinputcontext.h" +# include <private/qcoefepinputcontext_p.h> +# endif +# include <private/qs60mainapplication_p.h> +#endif #include "private/qstylesheetstyle_p.h" @@ -723,6 +726,22 @@ TTypeUid::Ptr QSymbianControl::MopSupplyObject(TTypeUid id) void qt_init(QApplicationPrivate * /* priv */, int) { + if (!CCoeEnv::Static()) { + // The S60 framework has not been initalized. We need to do it. + TApaApplicationFactory factory(NewApplication); + CApaCommandLine* commandLine = 0; + TInt err = CApaCommandLine::GetCommandLineFromProcessEnvironment(commandLine); + // After this construction, CEikonEnv will be available from CEikonEnv::Static(). + // (much like our qApp). + CEikonEnv* coe = new CEikonEnv; + QT_TRAP_THROWING(coe->ConstructAppFromCommandLineL(factory,*commandLine)); + delete commandLine; + + S60->qtOwnsS60Environment = true; + } else { + S60->qtOwnsS60Environment = false; + } + #ifdef QT_NO_DEBUG if (!qgetenv("QT_S60_AUTO_FLUSH_WSERV").isEmpty()) #endif @@ -774,6 +793,13 @@ void qt_cleanup() // it dies. delete QApplicationPrivate::inputContext; QApplicationPrivate::inputContext = 0; + + if (S60->qtOwnsS60Environment) { + CEikonEnv* coe = CEikonEnv::Static(); + coe->PrepareToExit(); + // The CEikonEnv itself is destroyed in here. + coe->DestroyEnvironment(); + } } void QApplicationPrivate::initializeWidgetPaletteHash() diff --git a/src/gui/kernel/qt_s60_p.h b/src/gui/kernel/qt_s60_p.h index 1523bcf..af5171b 100644 --- a/src/gui/kernel/qt_s60_p.h +++ b/src/gui/kernel/qt_s60_p.h @@ -95,6 +95,7 @@ public: int screenHeightInTwips; int defaultDpiX; int defaultDpiY; + int qtOwnsS60Environment : 1; static inline void updateScreenSize(); static inline RWsSession& wsSession(); static inline RWindowGroup& windowGroup(); diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp index d28e2c0..572ace8 100644 --- a/src/gui/kernel/qwidget_s60.cpp +++ b/src/gui/kernel/qwidget_s60.cpp @@ -722,7 +722,9 @@ void QWidgetPrivate::setWindowIcon_sys(bool forceReset) // The API to get title_pane graphics size is not public -> assume square space based // on titlebar font height. CAknBitmap would be optimum, wihtout setting the size, since // then title pane would automatically scale the bitmap. Unfortunately it is not public API - const CFont * font = AknLayoutUtils::FontFromId(EAknLogicalFontTitleFont); + // Also this function is leaving, although it is not named as such. + const CFont * font; + QT_TRAP_THROWING(font = AknLayoutUtils::FontFromId(EAknLogicalFontTitleFont)); TSize iconSize(font->HeightInPixels(), font->HeightInPixels()); QIcon icon = q->windowIcon(); diff --git a/src/s60main/qts60mainapplication.cpp b/src/gui/s60framework/qs60mainapplication.cpp index 11ade1b..1831bce 100644 --- a/src/s60main/qts60mainapplication.cpp +++ b/src/gui/s60framework/qs60mainapplication.cpp @@ -41,44 +41,54 @@ // INCLUDE FILES #include <exception> -#include "qts60maindocument_p.h" -#include "qts60mainapplication_p.h" +#include "qs60maindocument_p.h" +#include "qs60mainapplication_p.h" #include <bautils.h> #include <coemain.h> +QT_BEGIN_NAMESPACE + +/** + * factory function to create the QtS60Main application class + */ +CApaApplication* NewApplication() +{ + return new QS60MainApplication; +} + // ============================ MEMBER FUNCTIONS =============================== _LIT(KQtWrapperResourceFile, "\\resource\\apps\\s60main.rsc"); // ----------------------------------------------------------------------------- -// CQtS60MainApplication::CreateDocumentL() +// QS60MainApplication::CreateDocumentL() // Creates CApaDocument object // ----------------------------------------------------------------------------- // -CApaDocument* CQtS60MainApplication::CreateDocumentL() +CApaDocument* QS60MainApplication::CreateDocumentL() { // Create an QtS60Main document, and return a pointer to it - return (static_cast<CApaDocument*>(CQtS60MainDocument::NewL(*this))); + return (static_cast<CApaDocument*>(QS60MainDocument::NewL(*this))); } // ----------------------------------------------------------------------------- -// CQtS60MainApplication::AppDllUid() +// QS60MainApplication::AppDllUid() // Returns application UID // ----------------------------------------------------------------------------- // -TUid CQtS60MainApplication::AppDllUid() const +TUid QS60MainApplication::AppDllUid() const { // Return the UID for the QtS60Main application return ProcessUid(); } // ----------------------------------------------------------------------------- -// CQtS60MainApplication::ResourceFileName() +// QS60MainApplication::ResourceFileName() // Returns application resource filename // ----------------------------------------------------------------------------- // -TFileName CQtS60MainApplication::ResourceFileName() const +TFileName QS60MainApplication::ResourceFileName() const { TFindFile finder(iCoeEnv->FsSession()); TInt err = finder.FindByDir(KQtWrapperResourceFile, KNullDesC); @@ -87,5 +97,6 @@ TFileName CQtS60MainApplication::ResourceFileName() const return KNullDesC(); } +QT_END_NAMESPACE // End of File diff --git a/src/s60main/qts60mainapplication_p.h b/src/gui/s60framework/qs60mainapplication_p.h index 0d662ff..52a5e37 100644 --- a/src/s60main/qts60mainapplication_p.h +++ b/src/gui/s60framework/qs60mainapplication_p.h @@ -39,8 +39,8 @@ ** ****************************************************************************/ -#ifndef __QtS60MainAPPLICATION_H__ -#define __QtS60MainAPPLICATION_H__ +#ifndef QS60MAINAPPLICATION_P_H +#define QS60MAINAPPLICATION_P_H // // W A R N I N G @@ -56,49 +56,57 @@ // INCLUDES #include <aknapp.h> +#include <qglobal.h> + // CLASS DECLARATION +QT_BEGIN_NAMESPACE + +CApaApplication* NewApplication(); + static TUid ProcessUid() - { +{ RProcess me; TSecureId securId = me.SecureId(); me.Close(); return securId.operator TUid(); - } +} /** -* CQtS60MainApplication application class. +* QS60MainApplication application class. * Provides factory to create concrete document object. -* An instance of CQtS60MainApplication is the application part of the +* An instance of QS60MainApplication is the application part of the * AVKON application framework for the QtS60Main example application. */ -class CQtS60MainApplication : public CAknApplication - { - public: // Functions from base classes - - /** - * From CApaApplication, AppDllUid. - * @return Application's UID (KUidQtS60MainApp). - */ - TUid AppDllUid() const; - - /** - * From CApaApplication, ResourceFileName - * @return Application's resource filename (KUidQtS60MainApp). - */ - TFileName ResourceFileName() const; - - protected: // Functions from base classes - - /** - * From CApaApplication, CreateDocumentL. - * Creates CQtS60MainDocument document object. The returned - * pointer in not owned by the CQtS60MainApplication object. - * @return A pointer to the created document object. - */ - CApaDocument* CreateDocumentL(); - }; - -#endif // __QtS60MainAPPLICATION_H__ +class QS60MainApplication : public CAknApplication +{ +public: // Functions from base classes + + /** + * From CApaApplication, AppDllUid. + * @return Application's UID (KUidQtS60MainApp). + */ + TUid AppDllUid() const; + + /** + * From CApaApplication, ResourceFileName + * @return Application's resource filename (KUidQtS60MainApp). + */ + TFileName ResourceFileName() const; + +protected: // Functions from base classes + + /** + * From CApaApplication, CreateDocumentL. + * Creates QS60MainDocument document object. The returned + * pointer in not owned by the QS60MainApplication object. + * @return A pointer to the created document object. + */ + CApaDocument* CreateDocumentL(); +}; + +QT_END_NAMESPACE + +#endif // QS60MAINAPPLICATION_P_H // End of File diff --git a/src/s60main/qts60mainappui.cpp b/src/gui/s60framework/qs60mainappui.cpp index 2f3d925..cb56ce6 100644 --- a/src/s60main/qts60mainappui.cpp +++ b/src/gui/s60framework/qs60mainappui.cpp @@ -48,20 +48,22 @@ #include <s60main.rsg> #include <avkon.rsg> -#include "qts60mainappui_p.h" +#include "qs60mainappui_p.h" #include <QtGui/qapplication.h> #include <QtGui/qmenu.h> #include <QtGui/private/qt_s60_p.h> +QT_BEGIN_NAMESPACE + // ============================ MEMBER FUNCTIONS =============================== // ----------------------------------------------------------------------------- -// CQtS60MainAppUi::ConstructL() +// QS60MainAppUi::ConstructL() // Symbian 2nd phase constructor can leave. // ----------------------------------------------------------------------------- // -void CQtS60MainAppUi::ConstructL() +void QS60MainAppUi::ConstructL() { // Cone's heap and handle checks on app destruction are not suitable for Qt apps, as many // objects can still exist in static data at that point. Instead we will print relevant information @@ -76,51 +78,44 @@ void CQtS60MainAppUi::ConstructL() CEikButtonGroupContainer* nativeContainer = Cba(); nativeContainer->SetCommandSetL(R_AVKON_SOFTKEYS_EMPTY_WITH_IDS); - - // Create async callback to call Qt main, - // this is required to give S60 app FW to finish starting correctly - TCallBack callBack(OpenCMainStaticCallBack, this); - iAsyncCallBack = new(ELeave) CAsyncCallBack(callBack, CActive::EPriorityIdle); - iAsyncCallBack->Call(); } // ----------------------------------------------------------------------------- -// CQtS60MainAppUi::CQtS60MainAppUi() +// QS60MainAppUi::QS60MainAppUi() // C++ default constructor can NOT contain any code, that might leave. // ----------------------------------------------------------------------------- // -CQtS60MainAppUi::CQtS60MainAppUi() +QS60MainAppUi::QS60MainAppUi() { // No implementation required } // ----------------------------------------------------------------------------- -// CQtS60MainAppUi::~CQtS60MainAppUi() +// QS60MainAppUi::~QS60MainAppUi() // Destructor. // ----------------------------------------------------------------------------- // -CQtS60MainAppUi::~CQtS60MainAppUi() +QS60MainAppUi::~QS60MainAppUi() { - delete iAsyncCallBack; } // ----------------------------------------------------------------------------- -// CQtS60MainAppUi::HandleCommandL() +// QS60MainAppUi::HandleCommandL() // Takes care of command handling. // ----------------------------------------------------------------------------- // -void CQtS60MainAppUi::HandleCommandL(TInt aCommand) +void QS60MainAppUi::HandleCommandL(TInt aCommand) { if (qApp) qApp->symbianHandleCommand(aCommand); } // ----------------------------------------------------------------------------- -// CQtS60MainAppUi::HandleResourceChangeL() +// QS60MainAppUi::HandleResourceChangeL() // Takes care of event handling. // ----------------------------------------------------------------------------- // -void CQtS60MainAppUi::HandleResourceChangeL(TInt aType) +void QS60MainAppUi::HandleResourceChangeL(TInt aType) { CAknAppUi::HandleResourceChangeL(aType); @@ -128,7 +123,7 @@ void CQtS60MainAppUi::HandleResourceChangeL(TInt aType) qApp->symbianResourceChange(aType); } -void CQtS60MainAppUi::HandleWsEventL(const TWsEvent& aEvent, CCoeControl *control) +void QS60MainAppUi::HandleWsEventL(const TWsEvent& aEvent, CCoeControl *control) { int result = 0; if (qApp) @@ -147,44 +142,17 @@ void CQtS60MainAppUi::HandleWsEventL(const TWsEvent& aEvent, CCoeControl *contro // AppView // ----------------------------------------------------------------------------- // -void CQtS60MainAppUi::HandleStatusPaneSizeChange() +void QS60MainAppUi::HandleStatusPaneSizeChange() { HandleResourceChangeL(KInternalStatusPaneChange); HandleStackedControlsResourceChange(KInternalStatusPaneChange); } -// ----------------------------------------------------------------------------- -// Called asynchronously from ConstructL() - passes call to nan static method -// ----------------------------------------------------------------------------- -// -TInt CQtS60MainAppUi::OpenCMainStaticCallBack(TAny* aObject) -{ - CQtS60MainAppUi* myObj = static_cast<CQtS60MainAppUi*>(aObject); - myObj->OpenCMainCallBack(); - return 0; -} - -#include "qtS60main_mcrt0.cpp" - -// ----------------------------------------------------------------------------- -// Invokes Qt main, the Qt main will block and when we return from there -// application should be closed. -> Call Exit(); -// ----------------------------------------------------------------------------- -// -void CQtS60MainAppUi::OpenCMainCallBack() +void QS60MainAppUi::DynInitMenuBarL(TInt, CEikMenuBar *) { - TInt ret; - TRAPD(err, ret = QtMainWrapper()); - Q_UNUSED(ret); - Q_UNUSED(err); - Exit(); } -void CQtS60MainAppUi::DynInitMenuBarL(TInt, CEikMenuBar *) -{ -} - -void CQtS60MainAppUi::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane *aMenuPane) +void QS60MainAppUi::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane *aMenuPane) { if (aResourceId == R_QT_WRAPPERAPP_MENU) { if (aMenuPane->NumberOfItemsInPane() <= 1) @@ -195,7 +163,7 @@ void CQtS60MainAppUi::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane *aMenuPane } } -void CQtS60MainAppUi::RestoreMenuL(CCoeControl* aMenuWindow, TInt aMenuId, TMenuType aMenuType) +void QS60MainAppUi::RestoreMenuL(CCoeControl* aMenuWindow, TInt aMenuId, TMenuType aMenuType) { if ((aMenuId == R_QT_WRAPPERAPP_MENUBAR) || (aMenuId == R_AVKON_MENUPANE_FEP_DEFAULT)) { TResourceReader reader; @@ -210,4 +178,6 @@ void CQtS60MainAppUi::RestoreMenuL(CCoeControl* aMenuWindow, TInt aMenuId, TMenu DynInitMenuBarL(aMenuId, (CEikMenuBar*)aMenuWindow); } +QT_END_NAMESPACE + // End of File diff --git a/src/s60main/qts60mainappui_p.h b/src/gui/s60framework/qs60mainappui_p.h index 737dcda..784d0cf 100644 --- a/src/s60main/qts60mainappui_p.h +++ b/src/gui/s60framework/qs60mainappui_p.h @@ -39,8 +39,8 @@ ** ****************************************************************************/ -#ifndef __QtS60MainAPPUI_H__ -#define __QtS60MainAPPUI_H__ +#ifndef QS60MAINAPPUI_P_H +#define QS60MAINAPPUI_P_H // // W A R N I N G @@ -56,91 +56,75 @@ // INCLUDES #include <aknappui.h> +#include <qglobal.h> + +QT_BEGIN_NAMESPACE + // FORWARD DECLARATIONS // CLASS DECLARATION /** -* CQtS60MainAppUi application UI class. +* QS60MainAppUi application UI class. * Interacts with the user through the UI and request message processing * from the handler class */ -class CQtS60MainAppUi : public CAknAppUi - { - public: // Constructors and destructor - - /** - * ConstructL. - * 2nd phase constructor. - */ - void ConstructL(); - - /** - * CQtS60MainAppUi. - * C++ default constructor. This needs to be public due to - * the way the framework constructs the AppUi - */ - CQtS60MainAppUi(); - - /** - * ~CQtS60MainAppUi. - * Virtual Destructor. - */ - virtual ~CQtS60MainAppUi(); - - protected: - void RestoreMenuL(CCoeControl* aMenuWindow,TInt aMenuId,TMenuType aMenuType); - void DynInitMenuBarL(TInt aResourceId, CEikMenuBar *aMenuBar); - void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane *aMenuPane); - - private: // Functions from base classes - - /** - * From CEikAppUi, HandleCommandL. - * Takes care of command handling. - * @param aCommand Command to be handled. - */ - void HandleCommandL( TInt aCommand ); - - /** - * From CAknAppUi, HandleResourceChangeL - * Handles resource change events such as layout switches in global level. - * @param aType event type. - */ - void HandleResourceChangeL(TInt aType); - - /** - * HandleStatusPaneSizeChange. - * Called by the framework when the application status pane - * size is changed. - */ - void HandleStatusPaneSizeChange(); - - /** - * Static callback method for invoking Qt main. - * Called asynchronously from ConstructL() - passes call to non static method. - */ - static TInt OpenCMainStaticCallBack( TAny* aObject ); - - /** - * Callback method for invoking Qt main. - * Called from static OpenCMainStaticCallBack. - */ - void OpenCMainCallBack(); - - protected: - void HandleWsEventL(const TWsEvent& aEvent, CCoeControl* aDestination); - - - private: // Data - - /** - * Async callback object to call Qt main - * Owned by CQtS60MainAppUi - */ - CAsyncCallBack* iAsyncCallBack; - - }; - -#endif // __QtS60MainAPPUI_H__ +class QS60MainAppUi : public CAknAppUi +{ +public: // Constructors and destructor + + /** + * ConstructL. + * 2nd phase constructor. + */ + void ConstructL(); + + /** + * QS60MainAppUi. + * C++ default constructor. This needs to be public due to + * the way the framework constructs the AppUi + */ + QS60MainAppUi(); + + /** + * ~QS60MainAppUi. + * Virtual Destructor. + */ + virtual ~QS60MainAppUi(); + +protected: + void RestoreMenuL(CCoeControl* aMenuWindow,TInt aMenuId,TMenuType aMenuType); + void DynInitMenuBarL(TInt aResourceId, CEikMenuBar *aMenuBar); + void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane *aMenuPane); + +private: // Functions from base classes + + /** + * From CEikAppUi, HandleCommandL. + * Takes care of command handling. + * @param aCommand Command to be handled. + */ + void HandleCommandL( TInt aCommand ); + + /** + * From CAknAppUi, HandleResourceChangeL + * Handles resource change events such as layout switches in global level. + * @param aType event type. + */ + void HandleResourceChangeL(TInt aType); + + /** + * HandleStatusPaneSizeChange. + * Called by the framework when the application status pane + * size is changed. + */ + void HandleStatusPaneSizeChange(); + +protected: + void HandleWsEventL(const TWsEvent& aEvent, CCoeControl* aDestination); +}; + +QT_END_NAMESPACE + +#endif // QS60MAINAPPUI_P_H // End of File diff --git a/src/s60main/qts60maindocument.cpp b/src/gui/s60framework/qs60maindocument.cpp index a42fe59..fa663b4 100644 --- a/src/s60main/qts60maindocument.cpp +++ b/src/gui/s60framework/qs60maindocument.cpp @@ -41,77 +41,81 @@ // INCLUDE FILES #include <exception> -#include "qts60mainappui_p.h" -#include "qts60maindocument_p.h" +#include "qs60mainappui_p.h" +#include "qs60maindocument_p.h" + +QT_BEGIN_NAMESPACE // ============================ MEMBER FUNCTIONS =============================== // ----------------------------------------------------------------------------- -// CQtS60MainDocument::NewL() +// QS60MainDocument::NewL() // Two-phased constructor. // ----------------------------------------------------------------------------- // -CQtS60MainDocument* CQtS60MainDocument::NewL(CEikApplication& aApp) +QS60MainDocument* QS60MainDocument::NewL(CEikApplication& aApp) { - CQtS60MainDocument* self = NewLC(aApp); + QS60MainDocument* self = NewLC(aApp); CleanupStack::Pop(self); return self; } // ----------------------------------------------------------------------------- -// CQtS60MainDocument::NewLC() +// QS60MainDocument::NewLC() // Two-phased constructor. // ----------------------------------------------------------------------------- // -CQtS60MainDocument* CQtS60MainDocument::NewLC(CEikApplication& aApp) +QS60MainDocument* QS60MainDocument::NewLC(CEikApplication& aApp) { - CQtS60MainDocument* self = new(ELeave) CQtS60MainDocument(aApp); + QS60MainDocument* self = new(ELeave) QS60MainDocument(aApp); CleanupStack::PushL(self); self->ConstructL(); return self; } // ----------------------------------------------------------------------------- -// CQtS60MainDocument::ConstructL() +// QS60MainDocument::ConstructL() // Symbian 2nd phase constructor can leave. // ----------------------------------------------------------------------------- // -void CQtS60MainDocument::ConstructL() +void QS60MainDocument::ConstructL() { // No implementation required } // ----------------------------------------------------------------------------- -// CQtS60MainDocument::CQtS60MainDocument() +// QS60MainDocument::QS60MainDocument() // C++ default constructor can NOT contain any code, that might leave. // ----------------------------------------------------------------------------- // -CQtS60MainDocument::CQtS60MainDocument(CEikApplication& aApp) +QS60MainDocument::QS60MainDocument(CEikApplication& aApp) : CAknDocument(aApp) { // No implementation required } // --------------------------------------------------------------------------- -// CQtS60MainDocument::~CQtS60MainDocument() +// QS60MainDocument::~QS60MainDocument() // Destructor. // --------------------------------------------------------------------------- // -CQtS60MainDocument::~CQtS60MainDocument() +QS60MainDocument::~QS60MainDocument() { // No implementation required } // --------------------------------------------------------------------------- -// CQtS60MainDocument::CreateAppUiL() +// QS60MainDocument::CreateAppUiL() // Constructs CreateAppUi. // --------------------------------------------------------------------------- // -CEikAppUi* CQtS60MainDocument::CreateAppUiL() +CEikAppUi* QS60MainDocument::CreateAppUiL() { // Create the application user interface, and return a pointer to it; // the framework takes ownership of this object - return (static_cast <CEikAppUi*>(new(ELeave)CQtS60MainAppUi)); + return (static_cast <CEikAppUi*>(new(ELeave)QS60MainAppUi)); } +QT_END_NAMESPACE + // End of File diff --git a/src/s60main/qts60maindocument_p.h b/src/gui/s60framework/qs60maindocument_p.h index dfdac5f..5b638cc 100644 --- a/src/s60main/qts60maindocument_p.h +++ b/src/gui/s60framework/qs60maindocument_p.h @@ -39,8 +39,8 @@ ** ****************************************************************************/ -#ifndef __QTS60MAINDOCUMENT_H__ -#define __QTS60MAINDOCUMENT_H__ +#ifndef QS60MAINDOCUMENT_P_H +#define QS60MAINDOCUMENT_P_H // // W A R N I N G @@ -56,78 +56,84 @@ // INCLUDES #include <akndoc.h> -// FORWARD DECLARATIONS -class CQtS60MainAppUi; +#include <qglobal.h> + class CEikApplication; +QT_BEGIN_NAMESPACE + +// FORWARD DECLARATIONS +class QS60MainAppUi; // CLASS DECLARATION /** -* CQtS60MainDocument application class. -* An instance of class CQtS60MainDocument is the Document part of the +* QS60MainDocument application class. +* An instance of class QS60MainDocument is the Document part of the * AVKON application framework for the QtS60Main application. */ -class CQtS60MainDocument : public CAknDocument - { - public: // Constructors and destructor - - /** - * NewL. - * Two-phased constructor. - * Construct a CQtS60MainDocument for the AVKON application aApp - * using two phase construction, and return a pointer - * to the created object. - * @param aApp Application creating this document. - * @return A pointer to the created instance of CQtS60MainDocument. - */ - static CQtS60MainDocument* NewL( CEikApplication& aApp ); - - /** - * NewLC. - * Two-phased constructor. - * Construct a CQtS60MainDocument for the AVKON application aApp - * using two phase construction, and return a pointer - * to the created object. - * @param aApp Application creating this document. - * @return A pointer to the created instance of CQtS60MainDocument. - */ - static CQtS60MainDocument* NewLC( CEikApplication& aApp ); - - /** - * ~CQtS60MainDocument - * Virtual Destructor. - */ - virtual ~CQtS60MainDocument(); - - public: // Functions from base classes - - /** - * CreateAppUiL - * From CEikDocument, CreateAppUiL. - * Create a CQtS60MainAppUi object and return a pointer to it. - * The object returned is owned by the Uikon framework. - * @return Pointer to created instance of AppUi. - */ - CEikAppUi* CreateAppUiL(); - - private: // Constructors - - /** - * ConstructL - * 2nd phase constructor. - */ - void ConstructL(); - - /** - * CQtS60MainDocument. - * C++ default constructor. - * @param aApp Application creating this document. - */ - CQtS60MainDocument( CEikApplication& aApp ); - - }; - -#endif // __QTS60MAINDOCUMENT_H__ +class QS60MainDocument : public CAknDocument +{ +public: // Constructors and destructor + + /** + * NewL. + * Two-phased constructor. + * Construct a QS60MainDocument for the AVKON application aApp + * using two phase construction, and return a pointer + * to the created object. + * @param aApp Application creating this document. + * @return A pointer to the created instance of QS60MainDocument. + */ + static QS60MainDocument* NewL( CEikApplication& aApp ); + + /** + * NewLC. + * Two-phased constructor. + * Construct a QS60MainDocument for the AVKON application aApp + * using two phase construction, and return a pointer + * to the created object. + * @param aApp Application creating this document. + * @return A pointer to the created instance of QS60MainDocument. + */ + static QS60MainDocument* NewLC( CEikApplication& aApp ); + + /** + * ~QS60MainDocument + * Virtual Destructor. + */ + virtual ~QS60MainDocument(); + +public: // Functions from base classes + + /** + * CreateAppUiL + * From CEikDocument, CreateAppUiL. + * Create a QS60MainAppUi object and return a pointer to it. + * The object returned is owned by the Uikon framework. + * @return Pointer to created instance of AppUi. + */ + CEikAppUi* CreateAppUiL(); + +private: // Constructors + + /** + * ConstructL + * 2nd phase constructor. + */ + void ConstructL(); + + /** + * QS60MainDocument. + * C++ default constructor. + * @param aApp Application creating this document. + */ + QS60MainDocument( CEikApplication& aApp ); + +}; + +QT_END_NAMESPACE + +#endif // QS60MAINDOCUMENT_P_H // End of File diff --git a/src/gui/s60framework/s60framework.pri b/src/gui/s60framework/s60framework.pri new file mode 100644 index 0000000..f9a6d95 --- /dev/null +++ b/src/gui/s60framework/s60framework.pri @@ -0,0 +1,7 @@ +SOURCES += s60framework/qs60mainapplication.cpp \ + s60framework/qs60mainappui.cpp \ + s60framework/qs60maindocument.cpp + +HEADERS += s60framework/qs60mainapplication_p.h \ + s60framework/qs60mainappui_p.h \ + s60framework/qs60maindocument_p.h diff --git a/src/s60main/qts60main.cpp b/src/s60main/qts60main.cpp index c6e74c3..2436dee 100644 --- a/src/s60main/qts60main.cpp +++ b/src/s60main/qts60main.cpp @@ -40,20 +40,10 @@ ****************************************************************************/ // INCLUDE FILES -#include <exception> -#include <eikstart.h> -#include <apparc.h> -#include <eikenv.h> +#include <e32base.h> +#include <qglobal.h> -#include "qts60mainapplication_p.h" - -/** - * factory function to create the QtS60Main application class - */ -LOCAL_C CApaApplication* NewApplication() -{ - return new CQtS60MainApplication; -} +GLDEF_C TInt QtMainWrapper(); /** * A normal Symbian OS executable provides an E32Main() function which is @@ -61,17 +51,10 @@ LOCAL_C CApaApplication* NewApplication() */ GLDEF_C TInt E32Main() { - TApaApplicationFactory factory(NewApplication); - CApaCommandLine* commandLine=NULL; - TInt err = CApaCommandLine::GetCommandLineFromProcessEnvironment(commandLine); - CEikonEnv* coe=new CEikonEnv; - TRAP(err, coe->ConstructAppFromCommandLineL(factory,*commandLine)); - delete commandLine; - - CActiveScheduler::Start(); - - coe->PrepareToExit(); - coe->DestroyEnvironment(); + CTrapCleanup *cleanupStack = q_check_ptr(CTrapCleanup::New()); + TInt err = 0; + TRAP(err, QtMainWrapper()); + delete cleanupStack; - return 0; + return err; } diff --git a/src/s60main/qts60main_mcrt0.cpp b/src/s60main/qts60main_mcrt0.cpp index c250b61..22321e6 100644 --- a/src/s60main/qts60main_mcrt0.cpp +++ b/src/s60main/qts60main_mcrt0.cpp @@ -51,6 +51,9 @@ #include <e32base.h> #include "estlib.h" +// Needed for QT_TRYCATCH_LEAVING. +#include <qglobal.h> + #ifdef __ARMCC__ __asm int CallMain(int argc, char *argv[], char *envp[]) { diff --git a/src/s60main/s60main.pro b/src/s60main/s60main.pro index a4833af..cc3c547 100644 --- a/src/s60main/s60main.pro +++ b/src/s60main/s60main.pro @@ -14,13 +14,7 @@ symbian { CONFIG -= jpeg INCLUDEPATH += tmp $$QMAKE_INCDIR_QT/QtCore $$MW_LAYER_SYSTEMINCLUDE SOURCES = qts60main.cpp \ - qts60mainapplication.cpp \ - qts60mainappui.cpp \ - qts60maindocument.cpp - - HEADERS = qts60mainapplication_p.h \ - qts60mainappui_p.h \ - qts60maindocument_p.h + qts60main_mcrt0.cpp # This block serves the minimalistic resource file for S60 3.1 platforms. # Note there is no way to ifdef S60 version in mmp file, that is why the resource |