diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoconstants.h b/src/plugins/qt4projectmanager/qt-maemo/maemoconstants.h index c0b3d610b4878b58215e9eadae4a65464a16ba2a..531703e282a7c07b9f2dd561a3d382c4b844a409 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemoconstants.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemoconstants.h @@ -69,6 +69,7 @@ static const QLatin1String ProFileKey(".ProFile"); static const QLatin1String ExportedLocalDirsKey(".ExportedLocalDirs"); static const QLatin1String RemoteMountPointsKey(".RemoteMountPoints"); static const QLatin1String MountPortsKey(".MountPorts"); +static const QLatin1String HostAddressFromDeviceKey(".HostAddressFromDevice"); } // namespace Internal } // namespace Qt4ProjectManager diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoremotemountsmodel.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemoremotemountsmodel.cpp index 991fbea28b8ecc82fc07458425eee695e06624ba..8bd045f65af290963684dda7fc55efd5ff986f8c 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemoremotemountsmodel.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemoremotemountsmodel.cpp @@ -35,9 +35,6 @@ namespace Qt4ProjectManager { namespace Internal { namespace { -const int LocalDirRow = 0; -const int RemoteMountPointRow = 1; -const int PortRow = 2; const QLatin1String InvalidMountPoint("/"); } // anonymous namespace @@ -46,7 +43,7 @@ MaemoRemoteMountsModel::MountSpecification::MountSpecification(const QString &l, bool MaemoRemoteMountsModel::MountSpecification::isValid() const { - return remoteMountPoint == InvalidMountPoint; + return remoteMountPoint != InvalidMountPoint; } @@ -81,6 +78,23 @@ void MaemoRemoteMountsModel::removeMountSpecificationAt(int pos) endRemoveRows(); } +void MaemoRemoteMountsModel::setLocalDir(int pos, const QString &localDir) +{ + Q_ASSERT(pos >= 0 && pos < rowCount()); + m_mountSpecs[pos].localDir = localDir; + const QModelIndex currentIndex = index(pos, LocalDirRow); + emit dataChanged(currentIndex, currentIndex); +} + +bool MaemoRemoteMountsModel::hasValidMountSpecifications() const +{ + foreach (const MountSpecification &m, m_mountSpecs) { + if (m.isValid()) + return true; + } + return false; +} + QVariantMap MaemoRemoteMountsModel::toMap() const { QVariantMap map; diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoremotemountsmodel.h b/src/plugins/qt4projectmanager/qt-maemo/maemoremotemountsmodel.h index 479087b5d5cf344fbd8b0cdee7bb9c60235fd203..ed7a9bcbdb7fe0ffecf422ba6cf0a61f8979159b 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemoremotemountsmodel.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemoremotemountsmodel.h @@ -54,13 +54,19 @@ public: explicit MaemoRemoteMountsModel(QObject *parent = 0); int mountSpecificationCount() const { return m_mountSpecs.count(); } MountSpecification mountSpecificationAt(int pos) const { return m_mountSpecs.at(pos); } + bool hasValidMountSpecifications() const; void addMountSpecification(const QString &localDir); void removeMountSpecificationAt(int pos); + void setLocalDir(int pos, const QString &localDir); QVariantMap toMap() const; void fromMap(const QVariantMap &map); + static const int LocalDirRow = 0; + static const int RemoteMountPointRow = 1; + static const int PortRow = 2; + private: virtual int columnCount(const QModelIndex& = QModelIndex()) const; virtual int rowCount(const QModelIndex& = QModelIndex()) const; diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp index 4998112f300fc54787f9f9a2ec443d01c255035e..47f38275ccf63a6ff7da1f0ce815b2d146e1b3ce 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp @@ -55,6 +55,8 @@ namespace Qt4ProjectManager { namespace Internal { +namespace { const QLatin1String DefaultHostAddress("192.168.2.14"); } + using namespace ProjectExplorer; MaemoRunConfiguration::MaemoRunConfiguration(Qt4Target *parent, @@ -79,6 +81,7 @@ void MaemoRunConfiguration::init() { m_devConfigModel = new MaemoDeviceConfigListModel(this); m_remoteMounts = new MaemoRemoteMountsModel(this); + m_hostAddressFromDevice = DefaultHostAddress; setDisplayName(QFileInfo(m_proFilePath).completeBaseName()); updateDeviceConfigurations(); @@ -136,6 +139,7 @@ QVariantMap MaemoRunConfiguration::toMap() const map.insert(ArgumentsKey, m_arguments); const QDir dir = QDir(target()->project()->projectDirectory()); map.insert(ProFileKey, dir.relativeFilePath(m_proFilePath)); + map.insert(HostAddressFromDeviceKey, m_hostAddressFromDevice); map.unite(m_devConfigModel->toMap()); map.unite(m_remoteMounts->toMap()); return map; @@ -149,6 +153,8 @@ bool MaemoRunConfiguration::fromMap(const QVariantMap &map) m_arguments = map.value(ArgumentsKey).toStringList(); const QDir dir = QDir(target()->project()->projectDirectory()); m_proFilePath = dir.filePath(map.value(ProFileKey).toString()); + m_hostAddressFromDevice = map.value(HostAddressFromDeviceKey, + DefaultHostAddress).toString(); m_devConfigModel->fromMap(map); m_remoteMounts->fromMap(map); @@ -192,8 +198,12 @@ MaemoDeployStep *MaemoRunConfiguration::deployStep() const QString MaemoRunConfiguration::localHostAddressFromDevice() const { - // TODO: From user - return QLatin1String("192.168.2.14"); + return m_hostAddressFromDevice; +} + +void MaemoRunConfiguration::setLocalHostAddressFromDevice(const QString &address) +{ + m_hostAddressFromDevice = address; } QString MaemoRunConfiguration::maddeRoot() const diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h index e7fa2c53e8d55c1370a7f0441df647548671e2db..28a05023a0191b90dd58687a83001a70525e8680 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h @@ -77,6 +77,7 @@ public: MaemoDeployStep *deployStep() const; MaemoRemoteMountsModel *remoteMounts() const { return m_remoteMounts; } QString localHostAddressFromDevice() const; + void setLocalHostAddressFromDevice(const QString &address); const MaemoToolChain *toolchain() const; QString maddeRoot() const; @@ -115,6 +116,7 @@ private: MaemoDeviceConfigListModel *m_devConfigModel; MaemoRemoteMountsModel *m_remoteMounts; QStringList m_arguments; + QString m_hostAddressFromDevice; }; } // namespace Internal diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp index 67ab8f6fb8b300873f1d5f8eeee10386d24699b2..19adbf8a4e5277649bf883d59461a097d8178ce7 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp @@ -36,20 +36,21 @@ #include "maemodeviceconfiglistmodel.h" #include "maemomanager.h" +#include "maemoremotemountsmodel.h" #include "maemorunconfiguration.h" #include "maemosettingspage.h" #include <coreplugin/icore.h> #include <QtGui/QComboBox> -#include <QtGui/QCheckBox> -#include <QtGui/QDesktopServices> +#include <QtGui/QFileDialog> #include <QtGui/QFormLayout> -#include <QtGui/QFrame> +#include <QtGui/QGroupBox> #include <QtGui/QHBoxLayout> +#include <QtGui/QHeaderView> #include <QtGui/QLabel> #include <QtGui/QLineEdit> -#include <QtGui/QRadioButton> +#include <QtGui/QTableView> #include <QtGui/QToolButton> namespace Qt4ProjectManager { @@ -59,12 +60,14 @@ MaemoRunConfigurationWidget::MaemoRunConfigurationWidget( MaemoRunConfiguration *runConfiguration, QWidget *parent) : QWidget(parent), m_runConfiguration(runConfiguration) { - QFormLayout *mainLayout = new QFormLayout; + QVBoxLayout *mainLayout = new QVBoxLayout; setLayout(mainLayout); - mainLayout->setFormAlignment(Qt::AlignLeft | Qt::AlignVCenter); + QFormLayout *formLayout = new QFormLayout; + mainLayout->addLayout(formLayout); + formLayout->setFormAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_configNameLineEdit = new QLineEdit(m_runConfiguration->displayName()); - mainLayout->addRow(tr("Run configuration name:"), m_configNameLineEdit); + formLayout->addRow(tr("Run configuration name:"), m_configNameLineEdit); QWidget *devConfWidget = new QWidget; QHBoxLayout *devConfLayout = new QHBoxLayout(devConfWidget); @@ -83,13 +86,53 @@ MaemoRunConfigurationWidget::MaemoRunConfigurationWidget( debuggerConfLabel->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred); devConfLayout->addWidget(debuggerConfLabel); - mainLayout->addRow(new QLabel(tr("Device configuration:")), devConfWidget); + formLayout->addRow(new QLabel(tr("Device configuration:")), devConfWidget); m_executableLabel = new QLabel(m_runConfiguration->localExecutableFilePath()); - mainLayout->addRow(tr("Executable:"), m_executableLabel); + formLayout->addRow(tr("Executable:"), m_executableLabel); m_argsLineEdit = new QLineEdit(m_runConfiguration->arguments().join(" ")); - mainLayout->addRow(tr("Arguments:"), m_argsLineEdit); + formLayout->addRow(tr("Arguments:"), m_argsLineEdit); + + mainLayout->addSpacing(20); + QGroupBox *mountViewBox = new QGroupBox; +#ifndef Q_OS_WIN + mainLayout->addWidget(mountViewBox); +#endif + mountViewBox->setTitle(tr("Local Directories to mount from device")); + QVBoxLayout *mountViewLayout = new QVBoxLayout(mountViewBox); + QHBoxLayout *hostAddressLayout = new QHBoxLayout; + mountViewLayout->addLayout(hostAddressLayout); + QLabel *hostNameLabel + = new QLabel(tr("This host's address from the device:")); + m_hostAddressLineEdit = new QLineEdit; + m_hostAddressLineEdit->setText(m_runConfiguration->localHostAddressFromDevice()); + connect(m_hostAddressLineEdit, SIGNAL(editingFinished()), this, + SLOT(handleHostAddressChanged())); + hostAddressLayout->addWidget(hostNameLabel); + hostAddressLayout->addWidget(m_hostAddressLineEdit); + hostAddressLayout->addStretch(1); + QHBoxLayout *tableLayout = new QHBoxLayout; + mountViewLayout->addLayout(tableLayout); + m_mountView = new QTableView; + m_mountView->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents); + m_mountView->setSelectionBehavior(QTableView::SelectRows); + m_mountView->setModel(m_runConfiguration->remoteMounts()); + tableLayout->addWidget(m_mountView); + QVBoxLayout *mountViewButtonsLayout = new QVBoxLayout; + tableLayout->addLayout(mountViewButtonsLayout); + QToolButton *addMountButton = new QToolButton; + QIcon plusIcon; + plusIcon.addFile(QLatin1String(":/core/images/plus.png")); + addMountButton->setIcon(plusIcon); + mountViewButtonsLayout->addWidget(addMountButton); + m_removeMountButton = new QToolButton; + QIcon minusIcon; + minusIcon.addFile(QLatin1String(":/core/images/minus.png")); + m_removeMountButton->setIcon(minusIcon); + mountViewButtonsLayout->addWidget(m_removeMountButton); + mountViewButtonsLayout->addStretch(1); handleCurrentDeviceConfigChanged(); + enableOrDisableRemoveButton(); connect(m_configNameLineEdit, SIGNAL(textEdited(QString)), this, SLOT(configNameEdited(QString))); connect(m_argsLineEdit, SIGNAL(textEdited(QString)), this, @@ -104,6 +147,13 @@ MaemoRunConfigurationWidget::MaemoRunConfigurationWidget( SLOT(showSettingsDialog(QString))); connect(debuggerConfLabel, SIGNAL(linkActivated(QString)), this, SLOT(showSettingsDialog(QString))); + connect(addMountButton, SIGNAL(clicked()), this, SLOT(addMount())); + connect(m_removeMountButton, SIGNAL(clicked()), this, SLOT(removeMount())); + connect(m_mountView, SIGNAL(doubleClicked(QModelIndex)), this, + SLOT(changeLocalMountDir(QModelIndex))); + connect(m_mountView->selectionModel(), + SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, + SLOT(enableOrDisableRemoveButton())); } void MaemoRunConfigurationWidget::configNameEdited(const QString &text) @@ -143,5 +193,54 @@ void MaemoRunConfigurationWidget::setCurrentDeviceConfig(int index) m_runConfiguration->deviceConfigModel()->setCurrentIndex(index); } +void MaemoRunConfigurationWidget::enableOrDisableRemoveButton() +{ + const QModelIndexList selectedRows + = m_mountView->selectionModel()->selectedRows(); + m_removeMountButton->setEnabled(!selectedRows.isEmpty()); +} + +void MaemoRunConfigurationWidget::addMount() +{ + const QString localDir = QFileDialog::getExistingDirectory(this, + tr("Choose directory to mount")); + if (!localDir.isEmpty()) { + MaemoRemoteMountsModel * const mountsModel + = m_runConfiguration->remoteMounts(); + mountsModel->addMountSpecification(localDir); + m_mountView->edit(mountsModel->index(mountsModel->mountSpecificationCount() - 1, + mountsModel->RemoteMountPointRow)); + } +} + +void MaemoRunConfigurationWidget::removeMount() +{ + const QModelIndexList selectedRows + = m_mountView->selectionModel()->selectedRows(); + if (!selectedRows.isEmpty()) { + m_runConfiguration->remoteMounts() + ->removeMountSpecificationAt(selectedRows.first().row()); + } +} + +void MaemoRunConfigurationWidget::changeLocalMountDir(const QModelIndex &index) +{ + if (index.column() == MaemoRemoteMountsModel::LocalDirRow) { + MaemoRemoteMountsModel * const mountsModel + = m_runConfiguration->remoteMounts(); + const QString oldDir + = mountsModel->mountSpecificationAt(index.row()).localDir; + const QString localDir = QFileDialog::getExistingDirectory(this, + tr("Choose directory to mount"), oldDir); + if (!localDir.isEmpty()) + mountsModel->setLocalDir(index.row(), localDir); + } +} + +void MaemoRunConfigurationWidget::handleHostAddressChanged() +{ + m_runConfiguration->setLocalHostAddressFromDevice(m_hostAddressLineEdit->text()); +} + } // namespace Internal } // namespace Qt4ProjectManager diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.h b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.h index 6607e59047db47d58c4296d73dabf221069b8057..ef84409d4a85a1200652ed5d660a9c3fb6663542 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.h @@ -41,6 +41,9 @@ QT_BEGIN_NAMESPACE class QComboBox; class QLabel; class QLineEdit; +class QModelIndex; +class QTableView; +class QToolButton; QT_END_NAMESPACE namespace Qt4ProjectManager { @@ -62,13 +65,20 @@ private slots: void updateTargetInformation(); void handleCurrentDeviceConfigChanged(); void setCurrentDeviceConfig(int index); + void addMount(); + void removeMount(); + void changeLocalMountDir(const QModelIndex &index); + void enableOrDisableRemoveButton(); + void handleHostAddressChanged(); private: QLineEdit *m_configNameLineEdit; QLineEdit *m_argsLineEdit; QLabel *m_executableLabel; - QLabel *m_debuggerLabel; QComboBox *m_devConfBox; + QLineEdit *m_hostAddressLineEdit; + QTableView *m_mountView; + QToolButton *m_removeMountButton; MaemoRunConfiguration *m_runConfiguration; }; diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.cpp index b79898b9896642545995a3737375ec04909498f1..5ab95cc117b5d1edd97016e16660993d78f85b70 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.cpp @@ -143,9 +143,12 @@ void MaemoSshRunner::cleanup(bool initialCleanup) const MaemoRemoteMountsModel * const remoteMounts = m_runConfig->remoteMounts(); for (int i = 0; i < remoteMounts->mountSpecificationCount(); ++i) { - remoteCall += QString::fromLocal8Bit("%1 umount %2;") - .arg(MaemoGlobal::remoteSudo(), - remoteMounts->mountSpecificationAt(i).remoteMountPoint); + const MaemoRemoteMountsModel::MountSpecification &mountSpec + = remoteMounts->mountSpecificationAt(i); + if (mountSpec.isValid()) { + remoteCall += QString::fromLocal8Bit("%1 umount %2;") + .arg(MaemoGlobal::remoteSudo(), mountSpec.remoteMountPoint); + } } remoteCall.remove(remoteCall.count() - 1, 1); // Get rid of trailing semicolon. @@ -177,7 +180,7 @@ void MaemoSshRunner::handleInitialCleanupFinished(int exitStatus) if (exitStatus != SshRemoteProcess::ExitedNormally) { emit error(tr("Initial cleanup failed: %1") .arg(m_initialCleaner->errorString())); - } else if (m_runConfig->remoteMounts()->mountSpecificationCount() != 0) { + } else if (m_runConfig->remoteMounts()->hasValidMountSpecifications()) { deployUtfsClient(); } else { emit readyForExecution(); @@ -215,7 +218,7 @@ void MaemoSshRunner::handleUploaderInitialized() Q_ASSERT_X(toolChain, Q_FUNC_INFO, "Impossible: Maemo run configuration has no Maemo Toolchain."); const QString localFile - = toolChain->maddeRoot() + QLatin1String("/madlib/utfs-client"); + = toolChain->maddeRoot() + QLatin1String("/madlib/armel/utfs-client"); m_uploadJobId = m_utfsClientUploader->uploadFile(localFile, utfsClientOnDevice(), SftpOverwriteExisting); @@ -247,19 +250,30 @@ void MaemoSshRunner::mount() { const MaemoRemoteMountsModel * const remoteMounts = m_runConfig->remoteMounts(); - QString remoteCall(QLatin1String(":")); + const QString chmodFuse + = MaemoGlobal::remoteSudo() + QLatin1String(" chmod a+r+w /dev/fuse"); + const QString chmodUtfsClient + = QLatin1String("chmod a+x ") + utfsClientOnDevice(); + const QLatin1String andOp(" && "); + QString remoteCall = chmodFuse + andOp + chmodUtfsClient; for (int i = 0; i < remoteMounts->mountSpecificationCount(); ++i) { const MaemoRemoteMountsModel::MountSpecification &mountSpec = remoteMounts->mountSpecificationAt(i); + if (!mountSpec.isValid()) + continue; QProcess * const utfsServerProc = new QProcess(this); + connect(utfsServerProc, SIGNAL(readyReadStandardError()), this, + SLOT(handleUtfsServerErrorOutput())); const QString port = QString::number(mountSpec.port); const QString localSecretOpt = QLatin1String("-l"); const QString remoteSecretOpt = QLatin1String("-r"); const QStringList utfsServerArgs = QStringList() << localSecretOpt - << port << remoteSecretOpt << port << QLatin1String("-b") << port; + << port << remoteSecretOpt << port << QLatin1String("-b") << port + << mountSpec.localDir; utfsServerProc->start(utfsServer(), utfsServerArgs); if (!utfsServerProc->waitForStarted()) { + delete utfsServerProc; emit error(tr("Could not start UTFS server: %1") .arg(utfsServerProc->errorString())); return; @@ -267,40 +281,47 @@ void MaemoSshRunner::mount() m_utfsServers << utfsServerProc; const QString mkdir = QString::fromLocal8Bit("%1 mkdir -p %2") .arg(MaemoGlobal::remoteSudo(), mountSpec.remoteMountPoint); + const QString chmod = QString::fromLocal8Bit("%1 chmod a+r+w+x %2") + .arg(MaemoGlobal::remoteSudo(), mountSpec.remoteMountPoint); const QString utfsClient = QString::fromLocal8Bit("%1 -l %2 -r %2 -c %3:%2 %4") .arg(utfsClientOnDevice()).arg(port) .arg(m_runConfig->localHostAddressFromDevice()) .arg(mountSpec.remoteMountPoint); - const QLatin1String andOp(" && "); - remoteCall += andOp + mkdir + andOp + utfsClient; + remoteCall += andOp + mkdir + andOp + chmod + andOp + utfsClient; } m_mountProcess = m_connection->createRemoteProcess(remoteCall.toUtf8()); - connect(m_mountProcess.data(), SIGNAL(started()), this, - SLOT(handleMountProcessStarted())); connect(m_mountProcess.data(), SIGNAL(closed(int)), this, - SLOT(handleRemoteProcessFinished(int))); + SLOT(handleMountProcessFinished(int))); + connect(m_mountProcess.data(), SIGNAL(errorOutputAvailable(QByteArray)), + this, SIGNAL(remoteErrorOutput(QByteArray))); m_mountProcess->start(); } -void MaemoSshRunner::handleMountProcessStarted() -{ - // TODO: Do we get "finished" from utfs-client when it goes into background? - // If so, remnove this slot; readyForExecution() should be emitted from - // handleRemoteProcessFinished() in that case. - if (!m_stop) - emit readyForExecution(); -} - void MaemoSshRunner::handleMountProcessFinished(int exitStatus) { if (m_stop) return; - if (exitStatus != SshRemoteProcess::ExitedNormally) { + switch (exitStatus) { + case SshRemoteProcess::FailedToStart: + emit error(tr("Could not execute mount request.")); + break; + case SshRemoteProcess::KilledBySignal: emit error(tr("Failure running UTFS client: %1") .arg(m_mountProcess->errorString())); + break; + case SshRemoteProcess::ExitedNormally: + if (m_mountProcess->exitCode() == 0) { + emit readyForExecution(); + } else { + emit error(tr("Could not execute mount request.")); + } + break; + default: + Q_ASSERT_X(false, Q_FUNC_INFO, + "Impossible SshRemoteProcess exit status."); } } @@ -338,6 +359,7 @@ void MaemoSshRunner::handleRemoteProcessFinished(int exitStatus) emit error(tr("Error running remote process: %1") .arg(m_runner->errorString())); } + cleanup(false); } QString MaemoSshRunner::utfsClientOnDevice() const @@ -355,6 +377,11 @@ QString MaemoSshRunner::utfsServer() const return toolChain->maddeRoot() + QLatin1String("/madlib/utfs-server"); } +void MaemoSshRunner::handleUtfsServerErrorOutput() +{ + emit remoteErrorOutput(qobject_cast<QProcess *>(sender())->readAllStandardError()); +} + } // namespace Internal } // namespace Qt4ProjectManager diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.h b/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.h index cbfcb36c164dbe33c94e6c1418bf7bf2acdcaa49..ca60ffdfb998ae8d2e6811589c550fc8a2174da2 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.h @@ -89,8 +89,8 @@ private slots: void handleUploaderInitialized(); void handleUploaderInitializationFailed(const QString &reason); void handleUploadFinished(Core::SftpJobId jobId, const QString &error); - void handleMountProcessStarted(); void handleMountProcessFinished(int exitStatus); + void handleUtfsServerErrorOutput(); private: void cleanup(bool initialCleanup);