diff --git a/src/project/project.cpp b/src/project/project.cpp --- a/src/project/project.cpp +++ b/src/project/project.cpp @@ -253,7 +253,7 @@ void Project::removeCodeDocument(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 @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -40,12 +41,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 +105,8 @@ m_viewWidgets->setTabText(index, name); } } + +void CodeEditorWidget::closeTab(int index) +{ + m_project->removeCodeDocument(m_project->codeDocuments().at(index)); +}