diff --git a/src/autotests/test_project.cpp b/src/autotests/test_project.cpp --- a/src/autotests/test_project.cpp +++ b/src/autotests/test_project.cpp @@ -54,7 +54,7 @@ QCOMPARE(project.codeDocuments().length(), 2); // check correct adding QVERIFY(project.codeDocuments().first()->url().toLocalFile().startsWith(project.workingDir())); // check working dir QVERIFY(codeDoc1->url().toLocalFile() != codeDoc2->url().toLocalFile()); // check for distinct names - project.removeCodeDocument(codeDoc1); // check removal + project.tryToRemoveCodeDocument(codeDoc1); // check removal QCOMPARE(project.codeDocuments().length(), 1); QCOMPARE(project.documentName(codeDoc1), QString("Test")); diff --git a/src/project/project.h b/src/project/project.h --- a/src/project/project.h +++ b/src/project/project.h @@ -102,7 +102,7 @@ /** * Remove the script file @p document from the project */ - void removeCodeDocument(KTextEditor::Document *document); + void tryToRemoveCodeDocument(KTextEditor::Document *document); /** * @return project dependent document name diff --git a/src/project/project.cpp b/src/project/project.cpp --- a/src/project/project.cpp +++ b/src/project/project.cpp @@ -250,10 +250,11 @@ return document; } -void Project::removeCodeDocument(KTextEditor::Document *document) +void Project::tryToRemoveCodeDocument(KTextEditor::Document *document) { QString path = document->url().toString(); - document->closeUrl(); + if(!document->closeUrl()) + return; int index = d->m_codeDocuments.indexOf(document); emit codeDocumentAboutToBeRemoved(index, index); disconnect(document, &KTextEditor::Document::modifiedChanged, diff --git a/src/ui/codeeditorwidget.h b/src/ui/codeeditorwidget.h --- a/src/ui/codeeditorwidget.h +++ b/src/ui/codeeditorwidget.h @@ -47,6 +47,7 @@ void onCodeDocumentAboutToBeAdded(KTextEditor::Document *document, int index); void onCodeDocumentAboutToBeRemoved(int start, int end); void showDocumentNameDialog(int index); + void closeTab(int index); private: QTabWidget *m_viewWidgets; diff --git a/src/ui/codeeditorwidget.cpp b/src/ui/codeeditorwidget.cpp --- a/src/ui/codeeditorwidget.cpp +++ b/src/ui/codeeditorwidget.cpp @@ -40,12 +40,12 @@ qCritical() << "KTextEditor could not be found, please check your installation"; } m_viewWidgets = new QTabWidget(this); - m_viewWidgets->setTabsClosable(false); + m_viewWidgets->setTabsClosable(true); layout->addWidget(m_viewWidgets); layout->setSpacing(0); setLayout(layout); - connect(m_viewWidgets, &QTabWidget::tabBarDoubleClicked, this, &CodeEditorWidget::showDocumentNameDialog); + connect(m_viewWidgets, &QTabWidget::tabCloseRequested, this, &CodeEditorWidget::closeTab); } void CodeEditorWidget::setProject(Project *project) @@ -104,3 +104,8 @@ m_viewWidgets->setTabText(index, name); } } + +void CodeEditorWidget::closeTab(int index) +{ + m_project->tryToRemoveCodeDocument(m_project->codeDocuments().at(index)); +}