OSDN Git Service

Merge remote branch 'origin/2.1'
authordt <qtc-committer@nokia.com>
Mon, 4 Oct 2010 14:07:46 +0000 (16:07 +0200)
committerdt <qtc-committer@nokia.com>
Mon, 4 Oct 2010 14:07:46 +0000 (16:07 +0200)
Conflicts:
share/qtcreator/templates/mobileapp/app.pro
share/qtcreator/templates/qmlapp/app.pro
src/plugins/cpptools/cpptools.pro

13 files changed:
1  2 
doc/qtcreator.qdoc
share/qtcreator/templates/mobileapp/app.pro
share/qtcreator/templates/qmlapp/app.pro
src/plugins/cpptools/cpptools.pro
src/plugins/debugger/debuggerengine.cpp
src/plugins/debugger/gdb/gdbengine.cpp
src/plugins/debugger/gdb/tcftrkgdbadapter.cpp
src/plugins/debugger/qml/qmlengine.cpp
src/plugins/debugger/qml/qmlengine.h
src/plugins/fakevim/fakevimhandler.cpp
src/plugins/plugins.pro
src/plugins/qt4projectmanager/wizards/mobileapp.cpp
tests/manual/gdbdebugger/simple/simple_gdbtest_app.cpp

diff --combined doc/qtcreator.qdoc
@@@ -39,7 -39,7 +39,7 @@@
  
      \title Qt Creator Manual
  
 -    \section1 Version 2.0.91
 +    \section1 Version 2.1.81
  
      Qt Creator provides a cross-platform, complete integrated development
      environment (IDE) for application developers to create applications for
  
      You use wizards to create and import several types of projects and files, such
      as Qt GUI or console applications and Qt Quick applications.
-     You can also use
-     wizards to add individual files to your projects. For example, you can create
-     the following types of files:
-     \list
-         \o Qt resource files, which allow you to store binary files in the
-         application executable
-         \o \QD forms and Qt QML files, which specify parts of application user
-         interfaces
-         \o C++ class, source, or header files
-     \endlist
+     You can use wizards also to add individual files to your projects.
  
      The wizards prompt you to enter the settings needed
      for that particular type of project and create the necessary files for you.
             path.
  
             \image qtcreator-intro-and-location.png
+         \o Select the Qt versions to use as build targets for your project, and click
+            \gui{Next}.
+            \image qtcreator-new-project-qt-versions.png "Target setting dialog"
+            \note If you have only one Qt version installed, this dialog is skipped.
          \o Specify the name of the class you want to create and using the
             drop-down menu select its base class type.
  
             \image qtcreator-new-project-summary.png
      \endlist
  
+     \section1 Adding Files to Projects
+     You can create the following types of files:
+     \list
+         \o Qt resource files, which allow you to store binary files in the
+         application executable
+         \o \QD forms and Qt QML files, which specify parts of application user
+         interfaces
+         \o C++ class, source, or header files
+         \o Text files
+     \endlist
+     \section2 Creating C++ Classes
+     The \gui {C++ Class Wizard} allows you to create a C++ header and source file for
+     a new class that you can add to a C++ project. Specify the class name, base
+     class, and header and source files for the class.
+     The  wizard supports namespaces. To use a namespace, enter a qualified
+     class name in the \gui {Class name} field. For example:
+     MyNamespace::MySubNamespace::MyClass.
+     \image qtcreator-cpp-class-wizard.png "Enter Class Name dialog"
+     The names of the header and source file are based on the class name. To change the
+     default suffix of a file, click \gui Configure.
      You can create your own project and class wizards. For more information,
      see \l{Adding New Custom Wizards}.
  
-     \section1 Displaying Additional File Types in Projects Pane
+     \section2 Displaying Additional File Types in Projects Pane
  
      Qt Creator determines whether to display files from the project folder
      in the \gui Projects pane depending on the file type (.pro, .pri, .cpp,
  
      This also makes the files available in the \gui Locator.
  
+     \section1 Adding Subprojects to Projects
+     When you create a new project, you can add it to another project as a subproject
+     in the \gui{Project Management} dialog. However, you first have to edit the
+     .pro file of the parent project to specify that qmake uses the \c subdirs template
+     to build the project.
+     The \c subdirs template creates a Makefile for building subprojects. They can be
+     located either in subdirectories of the project directory or in any other directory.
+     The location of the targets is specified using the SUBDIRS variable. If the project file
+     has the same name as the directory, you can just specify the directory name. If the project
+     name and directory name are different, you must specify the project file name (.pro).
+     For more information on the SUBDIRS variable, see the
+     \l{http://doc.qt.nokia.com/4.7/qmake-variable-reference.html#subdirs}{qmake Variable Reference}.
+     For example, the following code specifies that plugin_coreplugin/plugin_coreplugin.pro
+     and mylogin.pro belong to the project:
+     \code
+     TEMPLATE  = subdirs
+     SUBDIRS = plugin_coreplugin \
+     ../another/plugin/myplugin.pro
+     \endcode
+     To specify dependencies, use the \gui{Add Library} wizard. For more information,
+     see \l{Adding Libraries to qmake Projects}.
  */
  
  
                 \note Shadow building is not supported by the Symbian build system.
                 Also, shadow building on Windows is not supported for Maemo.
                 If you only build for one target platform, you can deselect
-                the \gui{Shadow Build} checkbox.
+                the \gui{Shadow build} checkbox.
          \endlist
      \endlist
  
  
      \image qtcreator-build-steps.png "Build steps"
  
+     \section2 Adding Custom Build Steps
+     To add custom steps to the build settings, select \gui {Add Build Step >
+     Custom Process Step}.
+     By default, custom steps are disabled. To activate a custom step, select
+     the \gui{Enable custom process step} check-box.
+     \image qtcreator-build-steps-custom.png "Custom Process Step"
+     You can use any environment variables as values in the fields. For a list
+     of variable names, click \gui {Build Environment > Details}. You can specify
+     variables as ${VARNAME} or %VARNAME%. For example, ${BUILDDIR} or %BUILDDIR%.
+     \note Qt Creator sets SOURCEDIR and BUILDDIR as part of the build environment.
+     For more information, see \l{Build Environment}.
      \section1 Clean Steps
  
      You can use the cleaning process to remove intermediate files. This process
      You can define the cleaning steps for your builds in the \gui{Clean Steps}:
      \list
          \o To add a clean step using make or a custom process, click
-            \gui{Add clean step} and select the type of step you want to add.
+            \gui{Add Clean Step} and select the type of step you want to add.
  
-            By default, custom steps are disabled. Activate custom steps by
-            checking the \gui{Enable custom process step} check-box.
+            By default, custom steps are disabled. To activate a custom step,
+            select the \gui{Enable custom process step} check-box.
          \o To remove a clean step, click \gui{Remove Item}.
          \o To change the order of steps, click
             \inlineimage qtcreator-movestep.png
      variables or add, reset and unset new variables based on your project
      requirements.
  
+     \image qtcreator-build-environment.png "Build Environment"
  */
  
  
      \title Managing Sessions
  
      When you exit Qt Creator, a snapshot of your current workspace is stored
-     as a session.
-     A session is a collection of:
+     as a \e session. A session is an arbitrary collection of:
  
      \list
-         \o Open projects with their dependencies
+         \o Open projects with their dependencies (including SUBDIRS projects)
          \o Open editors
          \o Breakpoints and watches
          \o Bookmarks
      \endlist
  
-     If you work on a project and need to switch to another project for a
+     A session is  personal, that is, not meant to be shared. It is not
+     supposed to reflect the project structure. It contains personal data, such as
+     bookmarks and breakpoints that are usually not of interest to other developers
+     working on the same projects.
+     For example, if you work on a project and need to switch to another project for a
      while, you can save your workspace as a session. This makes it easier
      to return to working on the first project later.
  
@@@ -15,19 -15,10 +15,17 @@@ DEFINES += NETWORKACCES
  # TARGETUID3 #
  symbian:TARGET.UID3 = 0xE1111234
  
- symbian:ICON = symbianicon.svg
 +# Smart Installer package's UID
 +# This UID is from the protected range 
 +# and therefore the package will fail to install if self-signed
 +# By default qmake uses the unprotected range value if unprotected UID is defined for the application
 +# and 0x2002CCCF value if protected UID is given to the application
 +#symbian:DEPLOYMENT.installer_header = 0x2002CCCF
 +
  SOURCES += main.cpp mainwindow.cpp
  HEADERS += mainwindow.h
  FORMS += mainwindow.ui
  
+ # Please do not modify the following two lines. Required for deployment.
  include(../shared/deployment.pri)
  qtcAddDeployment()
@@@ -20,15 -20,6 +20,13 @@@ DEFINES += NETWORKACCES
  # TARGETUID3 #
  symbian:TARGET.UID3 = 0xE1111234
  
- symbian:ICON = symbianicon.svg
 +# Smart Installer package's UID
 +# This UID is from the protected range 
 +# and therefore the package will fail to install if self-signed
 +# By default qmake uses the unprotected range value if unprotected UID is defined for the application
 +# and 0x2002CCCF value if protected UID is given to the application
 +#symbian:DEPLOYMENT.installer_header = 0x2002CCCF
 +
  # Define QMLJSDEBUGGER to enable basic debugging (setting breakpoints etc)
  # Define QMLOBSERVER for advanced features (requires experimental QmlInspector plugin!)
  #DEFINES += QMLJSDEBUGGER
@@@ -37,7 -28,8 +35,8 @@@
  # The .cpp file which was generated for your project. Feel free to hack it.
  SOURCES += main.cpp
  
- # Please do not modify the following three lines. Required for deployment.
+ # Please do not modify the following two lines. Required for deployment.
  include(qmlapplicationviewer/qmlapplicationviewer.pri)
+ # INCLUDE_DEPLOYMENT_PRI (wizard will remove the include and append deployment.pri to qmlapplicationviewer.pri, instead) #
  include(../shared/deployment.pri)
  qtcAddDeployment()
@@@ -26,7 -26,8 +26,9 @@@ HEADERS += completionsettingspage.h 
      cppfindreferences.h \
      cppcodeformatter.h \
      symbolsfindfilter.h \
-     uicodecompletionsupport.h
++    uicodecompletionsupport.h \
+     insertionpointlocator.h \
+     cpprefactoringchanges.h
  
  SOURCES += completionsettingspage.cpp \
      cppclassesfilter.cpp \
@@@ -44,7 -45,8 +46,9 @@@
      cppfindreferences.cpp \
      cppcodeformatter.cpp \
      symbolsfindfilter.cpp \
-     uicodecompletionsupport.cpp
++    uicodecompletionsupport.cpp \
+     insertionpointlocator.cpp \
+     cpprefactoringchanges.cpp
  
  FORMS += completionsettingspage.ui \
      cppfilesettingspage.ui
  #include <coreplugin/progressmanager/futureprogress.h>
  
  #include <projectexplorer/debugginghelper.h>
 -#include <projectexplorer/project.h>
 -#include <projectexplorer/projectexplorerconstants.h>
 -#include <projectexplorer/target.h>
 -#include <projectexplorer/buildconfiguration.h>
 -#include <projectexplorer/applicationrunconfiguration.h> // For LocalApplication*
 +#include <projectexplorer/toolchain.h>
  
  #include <qt4projectmanager/qt4projectmanagerconstants.h>
  
@@@ -322,7 -326,7 +322,7 @@@ void DebuggerEnginePrivate::breakpointS
      QAction *act = qobject_cast<QAction *>(sender());
      QTC_ASSERT(act, return);
      QList<QVariant> list = act->data().toList();
-     QTC_ASSERT(list.size() >= 3, return);
+     QTC_ASSERT(list.size() >= 3, qDebug() << list; return);
      const QString fileName = list.at(0).toString();
      const int lineNumber = list.at(1).toInt();
      const quint64 address = list.at(2).toULongLong();
@@@ -334,7 -338,7 +334,7 @@@ void DebuggerEnginePrivate::breakpointE
      QAction *act = qobject_cast<QAction *>(sender());
      QTC_ASSERT(act, return);
      QList<QVariant> list = act->data().toList();
-     QTC_ASSERT(list.size() == 2, return);
+     QTC_ASSERT(list.size() == 3, qDebug() << list; return);
      const QString fileName = list.at(0).toString();
      const int lineNumber = list.at(1).toInt();
      m_breakHandler.toggleBreakpointEnabled(fileName, lineNumber);
  void DebuggerEnginePrivate::handleContextMenuRequest(const QVariant &parameters)
  {
      const QList<QVariant> list = parameters.toList();
-     QTC_ASSERT(list.size() == 3, return);
+     QTC_ASSERT(list.size() == 3, qDebug() << list; return);
      TextEditor::ITextEditor *editor =
          (TextEditor::ITextEditor *)(list.at(0).value<quint64>());
      int lineNumber = list.at(1).toInt();
@@@ -1692,11 -1696,6 +1692,11 @@@ void DebuggerEngine::attemptBreakpointS
  {
  }
  
 +bool DebuggerEngine::acceptsBreakpoint(const BreakpointData *)
 +{
 +    return true;
 +}
 +
  void DebuggerEngine::selectThread(int)
  {
  }
@@@ -230,6 -230,7 +230,7 @@@ void GdbEngine::initializeVariables(
      m_isMacGdb = false;
      m_hasPython = false;
      m_registerNamesListed = false;
+     m_hasInferiorThreadList = false;
  
      m_fullToShortName.clear();
      m_shortToFullName.clear();
@@@ -2608,11 -2609,6 +2609,11 @@@ void GdbEngine::attemptBreakpointSynchr
      handler->updateMarkers();
  }
  
 +bool GdbEngine::acceptsBreakpoint(const Internal::BreakpointData *br)
 +{
 +    return !( br->fileName.endsWith(QLatin1String("js")) || br->fileName.endsWith(QLatin1String("qml")) );
 +}
 +
  
  //////////////////////////////////////////////////////////////////////
  //
@@@ -113,6 -113,7 +113,7 @@@ static inline QString startMsg(const tr
  TcfTrkGdbAdapter::TcfTrkGdbAdapter(GdbEngine *engine) :
      AbstractGdbAdapter(engine),
      m_running(false),
+     m_stopReason(0),
      m_trkDevice(new TcfTrkDevice(this)),
      m_gdbAckMode(true),
      m_uid(0),
@@@ -315,9 -316,8 +316,9 @@@ void TcfTrkGdbAdapter::tcftrkEvent(cons
                  static_cast<const TcfTrkRunControlContextSuspendedEvent &>(e);
              const unsigned threadId = RunControlContext::threadIdFromTcdfId(se.id());
              const QString reason = QString::fromUtf8(se.reasonID());
 -            showMessage(_("Reset snapshot (Thread 0x%1 stopped: '%2')").
 -                        arg(threadId, 0, 16).arg(reason));
 +            const QString message = QString::fromUtf8(se.message()).replace(QLatin1String("\n"), QLatin1String(", "));
 +            showMessage(_("Thread %1 stopped: '%2': %3").
 +                        arg(threadId).arg(reason, message), LogMisc);
              // Stopped in a new thread: Add.
              m_snapshot.reset();
              m_session.tid = threadId;
              m_snapshot.setThreadState(threadId, reason);
              // Update registers first, then report stopped
              m_running = false;
+             m_stopReason = reason.contains(QLatin1String("exception"), Qt::CaseInsensitive)
+                            || reason.contains(QLatin1String("panic"), Qt::CaseInsensitive) ?
+                            gdbServerSignalSegfault : gdbServerSignalTrap;
              m_trkDevice->sendRegistersGetMRangeCommand(
                  TcfTrkCallback(this, &TcfTrkGdbAdapter::handleAndReportReadRegistersAfterStop),
                  currentThreadContextId(), 0,
@@@ -689,7 -692,7 +693,7 @@@ void TcfTrkGdbAdapter::handleGdbServerC
          } else {
              //qDebug() << "Fetching single register";
              m_trkDevice->sendRegistersGetMRangeCommand(
-                 TcfTrkCallback(this, &TcfTrkGdbAdapter::handleAndReportReadRegistersAfterStop),
+                 TcfTrkCallback(this, &TcfTrkGdbAdapter::handleAndReportReadRegister),
                  currentThreadContextId(), registerNumber, 1);
          }
      }
@@@ -1038,7 -1041,6 +1042,7 @@@ void TcfTrkGdbAdapter::setupInferior(
  
  void TcfTrkGdbAdapter::addThread(unsigned id)
  {
 +    showMessage(QString::fromLatin1("Thread %1 reported").arg(id), LogMisc);
      // Make thread known, register as main if it is the first one.
      if (m_snapshot.indexOfThread(id) == -1) {
          m_snapshot.addThread(id);
@@@ -1306,7 -1308,7 +1310,7 @@@ void TcfTrkGdbAdapter::handleAndReportR
      handleReadRegisters(result);
      handleReadRegisters(result);
      const bool reportThread = m_session.tid != m_session.mainTid;
-     sendGdbServerMessage(m_snapshot.gdbStopMessage(m_session.tid, reportThread), stopMessage());
+     sendGdbServerMessage(m_snapshot.gdbStopMessage(m_session.tid, m_stopReason, reportThread), stopMessage());
  }
  
  void TcfTrkGdbAdapter::handleAndReportSetBreakpoint(const TcfTrkCommandResult &result)
@@@ -218,6 -218,12 +218,12 @@@ void QmlEngine::connectionError(QAbstra
          plugin()->showMessage(tr("QML Debugger: Remote host closed connection."), StatusBar);
  }
  
+ void QmlEngine::serviceConnectionError(const QString &serviceName)
+ {
+     plugin()->showMessage(tr("QML Debugger: Couldn't connect to service '%1'.").arg(serviceName), StatusBar);
+ }
  void QmlEngine::runEngine()
  {
      QTC_ASSERT(state() == EngineRunRequested, qDebug() << state());
@@@ -327,6 -333,7 +333,7 @@@ void QmlEngine::setupEngine(
      d->m_adapter->setConnectionAttemptInterval(ConnectionAttemptDefaultInterval);
      connect(d->m_adapter, SIGNAL(connectionError(QAbstractSocket::SocketError)),
              SLOT(connectionError(QAbstractSocket::SocketError)));
+     connect(d->m_adapter, SIGNAL(serviceConnectionError(QString)), SLOT(serviceConnectionError(QString)));
      connect(d->m_adapter, SIGNAL(connected()), SLOT(connectionEstablished()));
      connect(d->m_adapter, SIGNAL(connectionStartupFailed()), SLOT(connectionStartupFailed()));
  
@@@ -460,11 -467,6 +467,11 @@@ void QmlEngine::attemptBreakpointSynchr
      }
  }
  
 +bool QmlEngine::acceptsBreakpoint(const Internal::BreakpointData *br)
 +{
 +    return (br->fileName.endsWith(QLatin1String("qml")) || br->fileName.endsWith(QLatin1String("js")));
 +}
 +
  void QmlEngine::loadSymbols(const QString &moduleName)
  {
      Q_UNUSED(moduleName)
@@@ -659,9 -661,34 +666,34 @@@ void QmlEngine::messageReceived(const Q
                  tr("<p>An Uncaught Exception occured in <i>%1</i>:</p><p>%2</p>")
                      .arg(stackFrames.value(0).file, Qt::escape(error));
              showMessageBox(QMessageBox::Information, tr("Uncaught Exception"), msg);
-         }
+         } else {
+             //
+             // Make breakpoint non-pending
+             //
+             QString file;
+             int line = -1;
+             if (!stackFrames.isEmpty()) {
+                 file = stackFrames.at(0).file;
+                 line = stackFrames.at(0).line;
+                 if (isShadowBuildProject()) {
+                     file = fromShadowBuildFilename(file);
+                 }
+             }
  
+             Internal::BreakHandler *handler = breakHandler();
+             for (int index = 0; index != handler->size(); ++index) {
+                 Internal::BreakpointData *data = handler->at(index);
+                 QString processedFilename = data->fileName;
  
+                 if (processedFilename == file
+                         && data->lineNumber == line) {
+                     data->pending = false;
+                     data->updateMarker();
+                 }
+             }
+         }
      } else if (command == "RESULT") {
          Internal::WatchData data;
          QByteArray iname;
@@@ -93,7 -93,6 +93,7 @@@ private
      void selectThread(int index);
  
      void attemptBreakpointSynchronization();
 +    bool acceptsBreakpoint(const Internal::BreakpointData *br);
  
      void assignValueInDebugger(const Internal::WatchData *w, const QString &expr, const QVariant &value);
      void loadSymbols(const QString &moduleName);
@@@ -118,6 -117,7 +118,7 @@@ private slots
      void connectionEstablished();
      void connectionStartupFailed();
      void connectionError(QAbstractSocket::SocketError error);
+     void serviceConnectionError(const QString &service);
  
  private:
      void expandObject(const QByteArray &iname, quint64 objectId);
@@@ -400,7 -400,9 +400,7 @@@ public
  
      bool is(int c) const
      {
 -        return m_xkey == c && (m_modifiers == 0
 -                || m_modifiers == Qt::ShiftModifier
 -                || m_modifiers == Qt::GroupSwitchModifier);
 +        return m_xkey == c && m_modifiers != Qt::ControlModifier;
      }
  
      bool isControl(int c) const
@@@ -2657,6 -2659,8 +2657,8 @@@ EventResult FakeVimHandler::Private::ha
          enterCommandMode();
          m_submode = NoSubMode;
          m_ctrlVActive = false;
+         m_opcount.clear();
+         m_mvcount.clear();
      } else if (m_ctrlVActive) {
          insertInInsertMode(input.raw());
      } else if (input.isControl('v')) {
diff --combined src/plugins/plugins.pro
@@@ -38,20 -38,22 +38,22 @@@ SUBDIRS   = plugin_coreplugin 
              plugin_tasklist \
              debugger/dumper.pro
  
- contains(QT_CONFIG, declarative) {
+ include(../../qtcreator.pri)
  
+ contains(QT_CONFIG, declarative) {
      SUBDIRS += \
              plugin_qmlprojectmanager \
              plugin_qmljsinspector
  
      include(../private_headers.pri)
      exists($${QT_PRIVATE_HEADERS}/QtDeclarative/private/qdeclarativecontext_p.h) {
-         isEqual(QT_MINOR_VERSION, 7):greaterThan(QT_PATCH_VERSION, 0) {
+         minQtVersion(4, 7, 1) {
              SUBDIRS += plugin_qmldesigner 
          } else {
              warning()
              warning("QmlDesigner plugin has been disabled.")
-             warning("Qt Version has to be 4.7.x with x > 0")
+             warning("QmlDesigner requires Qt 4.7.1 or later.")
          }
      } else {
          warning()
@@@ -87,7 -89,7 +89,7 @@@ plugin_imageviewer.subdir = imageviewe
  plugin_imageviewer.depends = plugin_coreplugin
  
  plugin_designer.subdir = designer
 -plugin_designer.depends = plugin_coreplugin plugin_cppeditor plugin_projectexplorer
 +plugin_designer.depends = plugin_coreplugin plugin_cpptools plugin_projectexplorer plugin_texteditor
  
  plugin_vcsbase.subdir = vcsbase
  plugin_vcsbase.depends = plugin_find
@@@ -125,6 -127,8 +127,6 @@@ plugin_qt4projectmanager.subdir = qt4pr
  plugin_qt4projectmanager.depends = plugin_texteditor
  plugin_qt4projectmanager.depends += plugin_projectexplorer
  plugin_qt4projectmanager.depends += plugin_cpptools
 -plugin_qt4projectmanager.depends += plugin_cppeditor
 -plugin_qt4projectmanager.depends += plugin_qmljseditor
  plugin_qt4projectmanager.depends += plugin_designer
  plugin_qt4projectmanager.depends += plugin_debugger
  plugin_qt4projectmanager.depends += plugin_qmljseditor
@@@ -179,17 -183,19 +181,17 @@@ plugin_regexp.depends = plugin_coreplug
  plugin_cpaster.subdir = cpaster
  plugin_cpaster.depends = plugin_texteditor
  plugin_cpaster.depends += plugin_coreplugin
 -plugin_cpaster.depends += plugin_projectexplorer
  
  plugin_cmakeprojectmanager.subdir = cmakeprojectmanager
  plugin_cmakeprojectmanager.depends = plugin_texteditor
  plugin_cmakeprojectmanager.depends += plugin_projectexplorer
  plugin_cmakeprojectmanager.depends += plugin_cpptools
 -plugin_cmakeprojectmanager.depends += plugin_cppeditor
 +plugin_cmakeprojectmanager.depends += plugin_designer
  
  plugin_genericprojectmanager.subdir = genericprojectmanager
  plugin_genericprojectmanager.depends = plugin_texteditor
  plugin_genericprojectmanager.depends += plugin_projectexplorer
  plugin_genericprojectmanager.depends += plugin_cpptools
 -plugin_genericprojectmanager.depends += plugin_cppeditor
  
  plugin_qmljseditor.subdir = qmljseditor
  plugin_qmljseditor.depends = plugin_texteditor
@@@ -94,6 -94,7 +94,7 @@@ Core::GeneratedFiles MobileApp::generat
  {
      Core::GeneratedFiles files = AbstractMobileApp::generateFiles(errorMessage);
  
+     files.append(file(generateFile(AbstractGeneratedFileInfo::DeploymentPriFile, errorMessage), path(DeploymentPri)));
      files.append(file(generateFile(MobileAppGeneratedFileInfo::MainWindowCppFile, errorMessage), path(MainWindowCpp)));
      files.append(file(generateFile(MobileAppGeneratedFileInfo::MainWindowHFile, errorMessage), path(MainWindowH)));
      files.append(file(generateFile(MobileAppGeneratedFileInfo::MainWindowUiFile, errorMessage), path(MainWindowUi)));
@@@ -137,7 -138,7 +138,7 @@@ QString MobileApp::mainWindowClassName(
  
  int MobileApp::stubVersionMinor() const { return StubVersion; }
  
 -const int MobileApp::StubVersion = 1;
 +const int MobileApp::StubVersion = 2;
  
  } // namespace Internal
  } // namespace Qt4ProjectManager
@@@ -61,8 -61,6 +61,8 @@@
  #include <QtGui/QPainterPath>
  #include <QtGui/QRegion>
  #include <QtGui/QStandardItemModel>
 +#include <QtGui/QTextCursor>
 +#include <QtGui/QTextDocument>
  
  #include <QtNetwork/QHostAddress>
  
@@@ -937,13 -935,13 +937,13 @@@ void testPlugin(
      QLibrary lib(dir + "/libsimple_gdbtest_plugin.dylib");
  #endif
  #ifdef Q_OS_WIN
-     QLibrary lib(dir + "/libsimple_gdbtest_plugin.dll");
+     QLibrary lib(dir + "/debug/simple_gdbtest_plugin.dll");
  #endif
  #ifdef Q_OS_SYMBIAN
      QLibrary lib(dir + "/libsimple_gdbtest_plugin.dll");
  #endif
      int (*foo)() = (int(*)()) lib.resolve("pluginTest");
-     qDebug() << "library resolve: " << foo;
+     qDebug() << "library resolve: " << foo << lib.fileName();
      if (foo) {
          int res = foo();
          res += 1;
@@@ -1423,20 -1421,6 +1423,20 @@@ private
      int m_id;
  };
  
 +void testQTextCursor()
 +{
 +    //int argc = 0;
 +    //char *argv[] = { "xxx", 0 };
 +    //QApplication app(argc, argv);
 +    QTextDocument doc;
 +    doc.setPlainText("Hallo\nWorld");
 +    QTextCursor tc = doc.find("all");
 +    int pos = tc.position();
 +    int anc = tc.anchor();
 +    Q_UNUSED(pos);
 +    Q_UNUSED(anc);
 +}
 +
  void testQThread()
  {
      Thread thread1(1);
@@@ -2039,7 -2023,6 +2039,7 @@@ int main(int argc, char *argv[]
      testFunction();
      testQImage();
      testNoArgumentName(1, 2, 3);
 +    testQTextCursor();
      testInput();
      testOutput();
      testHidden();
  
      Q_UNUSED(s);
      Q_UNUSED(w);
+     return 0;
  }
  
  QT_BEGIN_NAMESPACE