Commit 4ac72532 authored by dt's avatar dt

Merge remote branch 'origin/2.1'

Conflicts:
	share/qtcreator/static.pro
	src/plugins/cppeditor/cppeditor.cpp
	src/plugins/qmljseditor/qmljseditor.cpp
	src/plugins/qt4projectmanager/qt-maemo/maemodeployablelistmodel.cpp
	src/plugins/qt4projectmanager/qt-maemo/maemodeploystepwidget.cpp
	src/plugins/qt4projectmanager/qt-maemo/maemodeploystepwidget.ui
	src/plugins/qt4projectmanager/qtoutputformatter.cpp
	src/plugins/texteditor/generichighlighter/highlightersettings.cpp
parents f987eccd fb46c319
......@@ -50,7 +50,7 @@
#include <QDebug>
#include <QMessageBox>
#include "qdeclarativetester.h"
#include "private/qdeclarativedebughelper_p.h"
#include "qt_private/qdeclarativedebughelper_p.h"
QT_USE_NAMESPACE
......
......@@ -35,7 +35,8 @@ DATA_DIRS = \
qmldesigner \
qmlicons \
qml \
qml-type-descriptions
qml-type-descriptions \
generic-highlighter
!isEmpty(copydata) {
......
......@@ -9,7 +9,7 @@ int main(int argc, char *argv[])
viewer.addImportPath(QLatin1String("modules")); // ADDIMPORTPATH
viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto); // ORIENTATION
viewer.setMainQmlFile(QLatin1String("qml/app/main.qml")); // MAINQML
viewer.show();
viewer.showExpanded();
return app.exec();
}
......@@ -16,8 +16,10 @@ HEADERS += \
OTHER_FILES = qmldir
copy_qmldir.target = $$OUT_PWD/qmldir
copy_qmldir.depends = $$PWD/qmldir
copy_qmldir.commands = $(COPY_FILE) \"$$replace(copy_qmldir.depends, /, $$QMAKE_DIR_SEP)\" \"$$replace(copy_qmldir.target, /, $$QMAKE_DIR_SEP)\"
QMAKE_EXTRA_TARGETS += copy_qmldir
PRE_TARGETDEPS += $$copy_qmldir.target
!equals(_PRO_FILE_PWD_, $$OUT_PWD) {
copy_qmldir.target = $$OUT_PWD/qmldir
copy_qmldir.depends = $$_PRO_FILE_PWD_/qmldir
copy_qmldir.commands = $(COPY_FILE) \"$$replace(copy_qmldir.depends, /, $$QMAKE_DIR_SEP)\" \"$$replace(copy_qmldir.target, /, $$QMAKE_DIR_SEP)\"
QMAKE_EXTRA_TARGETS += copy_qmldir
PRE_TARGETDEPS += $$copy_qmldir.target
}
......@@ -193,6 +193,8 @@ void GradientLine::paintEvent(QPaintEvent *event)
int pos = qreal((width() - 16)) * m_stops.at(i) + 9;
p.setBrush(arrowColor);
QVector<QPointF> points;
if (localYOffset < -8)
p.setOpacity(0.5);
points.append(QPointF(pos + 0.5, 28.5 + localYOffset)); //triangle
points.append(QPointF(pos - 3.5, 22.5 + localYOffset));
points.append(QPointF(pos + 4.5, 22.5 + localYOffset));
......@@ -210,6 +212,7 @@ void GradientLine::paintEvent(QPaintEvent *event)
p.setBrush(Qt::NoBrush);
p.setPen(QColor(255, 255, 255, 30));
p.drawRect(pos - 4, 9 + localYOffset, 8, 9);
p.setOpacity(1);
}
}
}
......@@ -220,6 +223,7 @@ void GradientLine::mousePressEvent(QMouseEvent *event)
event->accept();
int xPos = event->pos().x();
int yPos = event->pos().y();
m_dragStart = event->pos();
int draggedIndex = -1;
m_create = false;
......@@ -227,10 +231,9 @@ void GradientLine::mousePressEvent(QMouseEvent *event)
if ((yPos > 10) && (yPos < 30))
for (int i =0; i < m_stops.size(); i++) {
int pos = qreal((width() - 16)) * m_stops.at(i) + 9;
if (((xPos + 5) > pos) && ((xPos - 5) < pos)) {
if (((xPos + 8) > pos) && ((xPos - 8) < pos)) {
draggedIndex = i;
m_dragActive = true;
m_dragStart = event->pos();
setCurrentIndex(draggedIndex);
update();
}
......@@ -253,6 +256,22 @@ void GradientLine::mouseReleaseEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton) {
event->accept();
if (m_dragActive) {
m_yOffset += event->pos().y() - 14;
if (m_yOffset > 0) {
m_yOffset = 0;
} else if ((m_yOffset < - 8) && (currentColorIndex()) != 0 && (currentColorIndex() < m_stops.size() - 1)) {
m_yOffset = 0;
m_dragActive = false;
m_stops.removeAt(currentColorIndex());
m_colorList.removeAt(currentColorIndex());
updateGradient();
setCurrentIndex(0);
//delete item
}
}
if (m_dragActive == false && m_create) {
qreal stopPos = qreal(event->pos().x() - 9) / qreal((width() - 15));
int index = -1;
......@@ -260,7 +279,7 @@ void GradientLine::mouseReleaseEvent(QMouseEvent *event)
if ((stopPos > m_stops.at(i)) && (index == -1))
index = i +1;
}
if (index != -1 && (m_useGradient)) { //creating of items only in base state
if (index != -1 && (m_useGradient) && abs(m_dragStart.x() - event->pos().x()) < 10) { //creating of items only in base state
m_stops.insert(index, stopPos);
m_colorList.insert(index, QColor(Qt::white));
setCurrentIndex(index);
......@@ -278,32 +297,24 @@ void GradientLine::mouseMoveEvent(QMouseEvent *event)
{
if (m_dragActive) {
event->accept();
int xPos = event->pos().x();
int pos = qreal((width() - 20)) * m_stops.at(currentColorIndex()) + 8;
int offset = m_dragOff ? 2 : 20;
if (xPos < pos + offset && xPos > pos - offset) {
m_dragOff = false;
int xDistance = event->pos().x() - m_dragStart.x();
qreal distance = qreal(xDistance) / qreal((width() - 20));
qreal newStop = m_stops.at(currentColorIndex()) + distance;
if ((newStop >=0) && (newStop <= 1))
m_stops[currentColorIndex()] = newStop;
m_yOffset += event->pos().y() - m_dragStart.y();
if (m_yOffset > 0) { //deleting only in base state
m_yOffset = 0;
} else if ((m_yOffset < - 12) && (currentColorIndex()) != 0 && (currentColorIndex() < m_stops.size() - 1)) {
m_yOffset = 0;
m_dragActive = false;
m_stops.removeAt(currentColorIndex());
m_colorList.removeAt(currentColorIndex());
updateGradient();
setCurrentIndex(0);
//delete item
}
} else {
m_dragOff = true;
}
m_dragStart = event->pos();
m_dragOff = false;
int xDistance = event->pos().x() - pos;
qreal distance = qreal(xDistance) / qreal((width() - 20));
qreal newStopPosition = m_stops.at(currentColorIndex()) + distance;
if (newStopPosition > 0.98) //snap to 1
newStopPosition = 1;
if (newStopPosition < 0.02) //snap to 0
newStopPosition = 0;
if ((newStopPosition >=0) && (newStopPosition <= 1))
m_stops[currentColorIndex()] = newStopPosition;
m_yOffset += event->pos().y() - 14;
if (m_yOffset > 0)
m_yOffset = 0;
else if ((m_yOffset < - 10))
m_yOffset = -10;
update();
}
}
......
......@@ -415,9 +415,9 @@ CPPEditor::CPPEditor(QWidget *parent)
setParenthesesMatchingEnabled(true);
setMarksVisible(true);
setCodeFoldingSupported(true);
setCodeFoldingVisible(true);
setIndenter(new CppQtStyleIndenter);
setAutoCompleter(new CppAutoCompleter);
baseTextDocument()->setSyntaxHighlighter(new CppHighlighter);
m_modelManager = CppTools::CppModelManagerInterface::instance();
......
......@@ -1133,6 +1133,40 @@ void CppCodeCompletion::globalCompletion(Scope *currentScope)
addMacros(context.thisDocument()->fileName(), context.snapshot());
}
static Scope *enclosingNonTemplateScope(Symbol *symbol)
{
if (symbol) {
if (Scope *scope = symbol->enclosingScope()) {
if (Template *templ = scope->asTemplate())
return templ->enclosingScope();
return scope;
}
}
return 0;
}
static Function *asFunctionOrTemplateFunctionType(FullySpecifiedType ty)
{
if (Function *funTy = ty->asFunctionType())
return funTy;
else if (Template *templ = ty->asTemplateType()) {
if (Symbol *decl = templ->declaration())
return decl->asFunction();
}
return 0;
}
static Class *asClassOrTemplateClassType(FullySpecifiedType ty)
{
if (Class *classTy = ty->asClassType())
return classTy;
else if (Template *templ = ty->asTemplateType()) {
if (Symbol *decl = templ->declaration())
return decl->asClass();
}
return 0;
}
bool CppCodeCompletion::completeConstructorOrFunction(const QList<LookupItem> &results,
int endOfExpression, bool toolTipOnly)
{
......@@ -1142,10 +1176,10 @@ bool CppCodeCompletion::completeConstructorOrFunction(const QList<LookupItem> &r
foreach (const LookupItem &result, results) {
FullySpecifiedType exprTy = result.type().simplified();
if (Class *klass = exprTy->asClassType()) {
if (Class *klass = asClassOrTemplateClassType(exprTy)) {
const Name *className = klass->name();
if (! className)
continue; // nothing to do for anonymoous classes.
continue; // nothing to do for anonymous classes.
for (unsigned i = 0; i < klass->memberCount(); ++i) {
Symbol *member = klass->memberAt(i);
......@@ -1173,11 +1207,11 @@ bool CppCodeCompletion::completeConstructorOrFunction(const QList<LookupItem> &r
foreach (const LookupItem &result, results) {
FullySpecifiedType ty = result.type().simplified();
if (Function *fun = ty->asFunctionType()) {
if (Function *fun = asFunctionOrTemplateFunctionType(ty)) {
if (! fun->name())
continue;
else if (! functions.isEmpty() && functions.first()->enclosingScope() != fun->enclosingScope())
else if (! functions.isEmpty() && enclosingNonTemplateScope(functions.first()) != enclosingNonTemplateScope(fun))
continue; // skip fun, it's an hidden declaration.
bool newOverload = true;
......
......@@ -80,7 +80,6 @@ GLSLTextEditor::GLSLTextEditor(QWidget *parent) :
setParenthesesMatchingEnabled(true);
setMarksVisible(true);
setCodeFoldingSupported(true);
setCodeFoldingVisible(true);
//setIndenter(new Indenter);
m_updateDocumentTimer = new QTimer(this);
......
......@@ -271,13 +271,13 @@ void QmlAnchorBindingProxy::resetLayout() {
m_fxItemNode.anchors().removeAnchors();
m_fxItemNode.anchors().removeMargins();
if (qFuzzyCompare(m_fxItemNode.instancePosition().x(), 0.0))
if (qFuzzyCompare(m_fxItemNode.instancePosition().x(), 0.0) && m_fxItemNode.modelNode().hasAuxiliaryData(auxDataString + "x"))
m_fxItemNode.setVariantProperty("x", m_fxItemNode.modelNode().auxiliaryData(auxDataString + "x"));
if (qFuzzyCompare(m_fxItemNode.instancePosition().y(), 0.0))
if (qFuzzyCompare(m_fxItemNode.instancePosition().y(), 0.0) && m_fxItemNode.modelNode().hasAuxiliaryData(auxDataString + "y"))
m_fxItemNode.setVariantProperty("y", m_fxItemNode.modelNode().auxiliaryData(auxDataString + "y"));
if (qFuzzyCompare(m_fxItemNode.instanceSize().width(), 0.0))
if (qFuzzyCompare(m_fxItemNode.instanceSize().width(), 0.0) && m_fxItemNode.modelNode().hasAuxiliaryData(auxDataString + "width"))
m_fxItemNode.setVariantProperty("width", m_fxItemNode.modelNode().auxiliaryData(auxDataString + "width"));
if (qFuzzyCompare(m_fxItemNode.instanceSize().height(), 0.0))
if (qFuzzyCompare(m_fxItemNode.instanceSize().height(), 0.0) && m_fxItemNode.modelNode().hasAuxiliaryData(auxDataString + "height"))
m_fxItemNode.setVariantProperty("height", m_fxItemNode.modelNode().auxiliaryData(auxDataString + "height"));
emit topAnchorChanged();
......
......@@ -256,7 +256,7 @@ bool PropertyMetaInfo::isValueType() const
throw InvalidMetaInfoException(__LINE__, Q_FUNC_INFO, __FILE__);
}
QDeclarativeValueType *valueType(QDeclarativeValueTypeFactory::valueType(variantTypeId()));
QScopedPointer<QDeclarativeValueType> valueType(QDeclarativeValueTypeFactory::valueType(variantTypeId()));
return valueType;
}
......
......@@ -21,6 +21,7 @@
<property name="width" type="int" value="80"/>
<property name="height" type="int" value="20"/>
<property name="text" type="QString" value="text"/>
<property name="font.pixelSize" type="int" value="12"/>
</itemlibraryentry>
</node>
<node name="Qt/TextEdit" isContainer="false" icon=":/qtquickplugin/images/text-edit-icon16.png">
......@@ -30,6 +31,7 @@
<property name="width" type="int" value="80"/>
<property name="height" type="int" value="20"/>
<property name="text" type="QString" value="textEdit"/>
<property name="font.pixelSize" type="int" value="12"/>
</itemlibraryentry>
</node>
<node name="Qt/TextInput" isContainer="false" icon=":/qtquickplugin/images/text-input-icon16.png">
......@@ -39,6 +41,7 @@
<property name="width" type="int" value="80"/>
<property name="height" type="int" value="20"/>
<property name="text" type="QString" value="textInput"/>
<property name="font.pixelSize" type="int" value="12"/>
</itemlibraryentry>
</node>
<node name="Qt/MouseArea" icon=":/qtquickplugin/images/mouse-area-icon16.png">
......
......@@ -613,7 +613,6 @@ QmlJSTextEditor::QmlJSTextEditor(QWidget *parent) :
setParenthesesMatchingEnabled(true);
setMarksVisible(true);
setCodeFoldingSupported(true);
setCodeFoldingVisible(true);
setIndenter(new Indenter);
setAutoCompleter(new AutoCompleter);
......
......@@ -566,6 +566,13 @@ QString InspectorUi::filenameForShadowBuildFile(const QString &filename) const
if (projectDir.exists() && buildDir.exists() && fileInfo.exists()) {
if (fileInfo.absoluteFilePath().startsWith(buildDir.canonicalPath())) {
QString fileRelativePath = fileInfo.canonicalFilePath().mid(debugProjectBuildDirectory().length());
#ifdef Q_OS_MACX
// Qt Quick Applications by default copy the qml directory to buildDir()/X.app/Contents/Resources
static QRegExp resourceBundlePattern(QLatin1String("^.*\\.app/Contents/Resources/"));
fileRelativePath.remove(resourceBundlePattern);
#endif
QFileInfo projectFile(projectDir.canonicalPath() + QLatin1Char('/') + fileRelativePath);
if (projectFile.exists())
......
......@@ -85,16 +85,29 @@ GettingStartedWelcomePageWidget::GettingStartedWelcomePageWidget(QWidget *parent
connect(ui->tutorialTreeWidget, SIGNAL(activated(QString)), SLOT(slotOpenHelpPage(const QString&)));
ui->tutorialTreeWidget->addItem(tr("The Qt Creator User Interface"),
QLatin1String("qthelp://com.nokia.qtcreator/doc/creator-quick-tour.html"));
ui->tutorialTreeWidget->addItem(tr("Building and Running an Example"),
QLatin1String("qthelp://com.nokia.qtcreator/doc/creator-build-example-application.html?view=split"));
ui->tutorialTreeWidget->addItem(tr("Creating a Qt C++ Application"),
QLatin1String("qthelp://com.nokia.qtcreator/doc/creator-writing-program.html?view=split"));
ui->tutorialTreeWidget->addItem(tr("Creating a Mobile Application"),
QLatin1String("qthelp://com.nokia.qtcreator/doc/creator-mobile-example.html?view=split"));
ui->tutorialTreeWidget->addItem(tr("Creating a Qt Quick Application"),
QLatin1String("qthelp://com.nokia.qtcreator/doc/creator-qml-application.html?view=split"));
QFontMetrics fm = fontMetrics();
const int margins = 30;
int width = ui->tutorialTreeWidget->minimumWidth() - margins;
QString itemText = tr("The Qt Creator User Interface");
QString url = QLatin1String("qthelp://com.nokia.qtcreator/doc/creator-quick-tour.html");
ui->tutorialTreeWidget->addItem(fm.elidedText(itemText, Qt::ElideRight, width), url, itemText);
itemText = tr("Building and Running an Example");
url = QLatin1String("qthelp://com.nokia.qtcreator/doc/creator-build-example-application.html?view=split");
ui->tutorialTreeWidget->addItem(fm.elidedText(itemText, Qt::ElideRight, width), url, itemText);
itemText = tr("Creating a Qt C++ Application");
url = QLatin1String("qthelp://com.nokia.qtcreator/doc/creator-writing-program.html?view=split");
ui->tutorialTreeWidget->addItem(fm.elidedText(itemText, Qt::ElideRight, width), url, itemText);
itemText = tr("Creating a Mobile Application");
url = QLatin1String("qthelp://com.nokia.qtcreator/doc/creator-mobile-example.html?view=split");
ui->tutorialTreeWidget->addItem(fm.elidedText(itemText, Qt::ElideRight, width), url, itemText);
itemText = tr("Creating a Qt Quick Application");
url = QLatin1String("qthelp://com.nokia.qtcreator/doc/creator-qml-application.html?view=split");
ui->tutorialTreeWidget->addItem(fm.elidedText(itemText, Qt::ElideRight, width), url, itemText);
srand(QDateTime::currentDateTime().toTime_t());
QStringList tips = tipsOfTheDay();
......
......@@ -52,7 +52,20 @@
</widget>
</item>
<item row="1" column="0">
<widget class="Utils::WelcomeModeTreeWidget" name="tutorialTreeWidget" native="true"/>
<widget class="Utils::WelcomeModeTreeWidget" name="tutorialTreeWidget" native="true">
<property name="minimumSize">
<size>
<width>260</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>260</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
</layout>
</widget>
......@@ -67,20 +80,26 @@
</property>
<property name="minimumSize">
<size>
<width>230</width>
<width>240</width>
<height>0</height>
</size>
</property>
<property name="styleSheet">
<string notr="true"/>
<property name="maximumSize">
<size>
<width>240</width>
<height>16777215</height>
</size>
</property>
<layout class="QGridLayout" name="gridLayout_11">
<property name="leftMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="verticalSpacing">
<number>12</number>
</property>
<property name="rightMargin">
<number>9</number>
</property>
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
......@@ -248,6 +267,9 @@
</sizepolicy>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="topMargin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="Utils::WelcomeModeLabel" name="demoTitleLabel_4">
<property name="text">
......@@ -316,7 +338,7 @@
</layout>
</widget>
</item>
<item row="3" column="0" colspan="2">
<item row="2" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>6</number>
......@@ -368,22 +390,6 @@
</item>
</layout>
</item>
<item row="2" column="0">
<spacer name="verticalSpacer_8">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::MinimumExpanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
......@@ -457,28 +463,27 @@ border-bottom: 1px solid &quot;#C9C9C9&quot;;
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>24</width>
<height>38</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="detailsLabel">
<property name="text">
<string notr="true"/>
</property>
</widget>
</item>
</layout>
<spacer name="verticalSpacer_8">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>6</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="detailsLabel">
<property name="text">
<string notr="true"/>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_5">
......
......@@ -279,7 +279,7 @@ void QmlDumpTool::pathAndEnvironment(ProjectExplorer::Project *project, QString
path = Qt4ProjectManager::QmlDumpTool::toolForProject(project);
QtVersion *version = qtVersionForProject(project);
if (version && path.isEmpty()) {
if (version && path.isEmpty() && QmlDumpTool::canBuild(version)) {
QmlDumpBuildTask *qmlDumpBuildTask = qmlDumpBuilds()->value(version->uniqueId());
if (qmlDumpBuildTask) {
if (!qmlDumpBuildTask->hasFailed())
......
......@@ -22,7 +22,6 @@ MaemoDeployStepWidget::MaemoDeployStepWidget(MaemoDeployStep *step) :
m_step(step)
{
ui->setupUi(this);
ui->tableView->setTextElideMode(Qt::ElideMiddle);
ui->modelComboBox->setModel(m_step->deployables().data());
connect(m_step->deployables().data(), SIGNAL(modelAboutToBeReset()),
SLOT(handleModelListToBeReset()));
......
......@@ -110,6 +110,18 @@
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QTableView" name="tableView">
<property name="minimumSize">
<size>
<width>0</width>
<height>150</height>
</size>
</property>
<property name="textElideMode">
<enum>Qt::ElideMiddle</enum>
</property>
<property name="horizontalScrollMode">
<enum>QAbstractItemView::ScrollPerPixel</enum>
</property>
<property name="showGrid">
<bool>false</bool>
</property>
......@@ -119,6 +131,9 @@
<attribute name="horizontalHeaderDefaultSectionSize">
<number>400</number>
</attribute>
<attribute name="horizontalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderMinimumSectionSize">
<number>100</number>
</attribute>
......
......@@ -168,18 +168,6 @@ void MaemoRemoteMounter::handleUnmountProcessFinished(int exitStatus)
void MaemoRemoteMounter::stop()
{
setState(Inactive);
if (m_utfsClientUploader) {
disconnect(m_utfsClientUploader.data(), 0, this, 0);
m_utfsClientUploader->closeChannel();
}
if (m_mountProcess) {
disconnect(m_mountProcess.data(), 0, this, 0);
m_mountProcess->closeChannel();
}
if (m_unmountProcess) {
disconnect(m_unmountProcess.data(), 0, this, 0);
m_unmountProcess->closeChannel();
}
}
void MaemoRemoteMounter::deployUtfsClient()
......@@ -449,8 +437,21 @@ void MaemoRemoteMounter::handleUtfsServerTimeout()
void MaemoRemoteMounter::setState(State newState)
{
if (newState == Inactive)
if (newState == Inactive) {
m_utfsServerTimer->stop();
if (m_utfsClientUploader) {
disconnect(m_utfsClientUploader.data(), 0, this, 0);
m_utfsClientUploader->closeChannel();
}
if (m_mountProcess) {
disconnect(m_mountProcess.data(), 0, this, 0);
m_mountProcess->closeChannel();
}
if (m_unmountProcess) {
disconnect(m_unmountProcess.data(), 0, this, 0);
m_unmountProcess->closeChannel();
}