diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfigurationssettingswidget.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfigurationssettingswidget.cpp index 9662ce7329c..0ed5892aa9f 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfigurationssettingswidget.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceconfigurationssettingswidget.cpp @@ -340,7 +340,7 @@ void MaemoDeviceConfigurationsSettingsWidget::showGenerateSshKeyDialog() void MaemoDeviceConfigurationsSettingsWidget::showRemoteProcesses() { - MaemoRemoteProcessesDialog dlg(currentConfig()->sshParameters(), this); + MaemoRemoteProcessesDialog dlg(currentConfig(), this); dlg.exec(); } diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocessesdialog.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocessesdialog.cpp index cd4b2ab07d1..5bf1eb6a7f3 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocessesdialog.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocessesdialog.cpp @@ -41,6 +41,7 @@ #include "maemoremoteprocessesdialog.h" #include "ui_maemoremoteprocessesdialog.h" +#include "maemodeviceconfigurations.h" #include "maemoremoteprocesslist.h" #include @@ -49,11 +50,11 @@ namespace Qt4ProjectManager { namespace Internal { -MaemoRemoteProcessesDialog::MaemoRemoteProcessesDialog(const Core::SshConnectionParameters ¶ms, - QWidget *parent) : +MaemoRemoteProcessesDialog::MaemoRemoteProcessesDialog(const MaemoDeviceConfig::ConstPtr &devConfig, + QWidget *parent): QDialog(parent), m_ui(new Ui::MaemoRemoteProcessesDialog), - m_processList(new MaemoRemoteProcessList(params, this)), + m_processList(new MaemoRemoteProcessList(devConfig, this)), m_proxyModel(new QSortFilterProxyModel(this)) { m_ui->setupUi(this); @@ -64,7 +65,12 @@ MaemoRemoteProcessesDialog::MaemoRemoteProcessesDialog(const Core::SshConnection m_ui->tableView->setModel(m_proxyModel); connect(m_ui->processFilterLineEdit, SIGNAL(textChanged(QString)), m_proxyModel, SLOT(setFilterRegExp(QString))); - m_ui->processFilterLineEdit->setText(QLatin1String("[^ ]+")); + + // Manually gathered process information is missing the command line for + // some system processes. Dont's show these lines by default. + if (devConfig->osVersion() == MaemoGlobal::Maemo5) + m_ui->processFilterLineEdit->setText(QLatin1String("[^ ]+")); + connect(m_ui->tableView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), SLOT(handleSelectionChanged())); diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocessesdialog.h b/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocessesdialog.h index c8cc4a705fe..05841a0ef5d 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocessesdialog.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocessesdialog.h @@ -41,8 +41,8 @@ #ifndef MAEMOREMOTEPROCESSDIALOG_H #define MAEMOREMOTEPROCESSDIALOG_H +#include #include -#include QT_BEGIN_NAMESPACE namespace Ui { @@ -53,6 +53,7 @@ QT_END_NAMESPACE namespace Qt4ProjectManager { namespace Internal { +class MaemoDeviceConfig; class MaemoRemoteProcessList; class MaemoRemoteProcessesDialog : public QDialog @@ -60,7 +61,7 @@ class MaemoRemoteProcessesDialog : public QDialog Q_OBJECT public: - explicit MaemoRemoteProcessesDialog(const Core::SshConnectionParameters ¶ms, + explicit MaemoRemoteProcessesDialog(const QSharedPointer &devConfig, QWidget *parent = 0); ~MaemoRemoteProcessesDialog(); diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocesslist.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocesslist.cpp index 441bea0f59e..1d27d0852fe 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocesslist.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocesslist.cpp @@ -41,6 +41,8 @@ #include "maemoremoteprocesslist.h" +#include "maemodeviceconfigurations.h" + #include #include @@ -55,11 +57,12 @@ const QByteArray LineSeparator2("QTCENDOFLINE---"); const QByteArray LineSeparator = LineSeparator1 + LineSeparator2; } // anonymous namespace -MaemoRemoteProcessList::MaemoRemoteProcessList(const Core::SshConnectionParameters ¶ms, +MaemoRemoteProcessList::MaemoRemoteProcessList(const MaemoDeviceConfig::ConstPtr &devConfig, QObject *parent) - : QAbstractTableModel(parent), - m_process(SshRemoteProcessRunner::create(params)), - m_state(Inactive) + : QAbstractTableModel(parent), + m_process(SshRemoteProcessRunner::create(devConfig->sshParameters())), + m_state(Inactive), + m_devConfig(devConfig) { } @@ -73,17 +76,25 @@ void MaemoRemoteProcessList::update() } beginResetModel(); m_remoteProcs.clear(); - const QByteArray command = QByteArray() - + "sep1=" + LineSeparator1 + '\n' - + "sep2=" + LineSeparator2 + '\n' - + "pidlist=`ls /proc |grep -E '^[[:digit:]]+$' |sort -n`; " - + "for pid in $pidlist\n" - + "do\n" - + " echo -n \"$pid \"\n" - + " tr '\\0' ' ' < /proc/$pid/cmdline\n" - + " echo -n \"$sep1$sep2\"\n" - + "done\n" - + "echo ''"; + QByteArray command; + + // The ps command on Fremantle ignores all command line options, so + // we have to collect the information in /proc manually. + if (m_devConfig->osVersion() == MaemoGlobal::Maemo5) { + command = "sep1=" + LineSeparator1 + '\n' + + "sep2=" + LineSeparator2 + '\n' + + "pidlist=`ls /proc |grep -E '^[[:digit:]]+$' |sort -n`; " + + "for pid in $pidlist\n" + + "do\n" + + " echo -n \"$pid \"\n" + + " tr '\\0' ' ' < /proc/$pid/cmdline\n" + + " echo -n \"$sep1$sep2\"\n" + + "done\n" + + "echo ''"; + } else { + command = "ps -eo pid,args"; + } + startProcess(command, Listing); } @@ -191,21 +202,25 @@ void MaemoRemoteProcessList::stop() void MaemoRemoteProcessList::buildProcessList() { + const bool isFremantle = m_devConfig->osVersion() == MaemoGlobal::Maemo5; const QString remoteOutput = QString::fromUtf8(m_remoteStdout); - const QStringList &lines - = remoteOutput.split(QString::fromUtf8(LineSeparator)); + const QByteArray lineSeparator = isFremantle ? LineSeparator : "\n"; + QStringList lines = remoteOutput.split(QString::fromUtf8(lineSeparator)); + if (!isFremantle) + lines.removeFirst(); // column headers foreach (const QString &line, lines) { - const int pidEndPos = line.indexOf(' '); + const QString &trimmedLine = line.trimmed(); + const int pidEndPos = trimmedLine.indexOf(' '); if (pidEndPos == -1) continue; bool isNumber; - const int pid = line.left(pidEndPos).toInt(&isNumber); + const int pid = trimmedLine.left(pidEndPos).toInt(&isNumber); if (!isNumber) { qDebug("%s: Non-integer value where pid was expected. Line was: '%s'", - Q_FUNC_INFO, qPrintable(line)); + Q_FUNC_INFO, qPrintable(trimmedLine)); continue; } - m_remoteProcs << RemoteProc(pid, line.mid(pidEndPos)); + m_remoteProcs << RemoteProc(pid, trimmedLine.mid(pidEndPos)); } } diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocesslist.h b/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocesslist.h index eed63de39cd..81fddb25d9a 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocesslist.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemoremoteprocesslist.h @@ -47,17 +47,17 @@ #include #include #include -#include #include namespace Qt4ProjectManager { namespace Internal { +class MaemoDeviceConfig; class MaemoRemoteProcessList : public QAbstractTableModel { Q_OBJECT public: - explicit MaemoRemoteProcessList(const Core::SshConnectionParameters ¶ms, + explicit MaemoRemoteProcessList(const QSharedPointer &devConfig, QObject *parent = 0); ~MaemoRemoteProcessList(); void update(); @@ -100,6 +100,7 @@ private: QString cmdLine; }; QList m_remoteProcs; + const QSharedPointer m_devConfig; }; } // namespace Internal