Core: Use better suited file dialog when saving OutputWindow content

QFileDialog::saveFileContent opens a non-modal file dialog which can
disappear in the backgtound. Also, on Windows, the dialog is non-native.

Use FileUtils::getSaveFilePath and FileSaver, instead.

Task-number: QTCREATORBUG-31099
Change-Id: I0c84e149183f632e325b2e62ee9b1c7d7726f207
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Alessandro Portale
2024-07-10 23:15:56 +02:00
parent 1aef2e2591
commit 0fba429032

View File

@@ -13,9 +13,12 @@
#include <aggregation/aggregate.h>
#include <utils/fileutils.h>
#include <utils/outputformatter.h>
#include <utils/qtcassert.h>
#include <coreplugin/messagemanager.h>
#include <QAction>
#include <QCursor>
#include <QElapsedTimer>
@@ -294,7 +297,16 @@ void OutputWindow::contextMenuEvent(QContextMenuEvent *event)
menu->addSeparator();
QAction *saveAction = menu->addAction(Tr::tr("Save Contents..."));
connect(saveAction, &QAction::triggered, this, [this] {
QFileDialog::saveFileContent(toPlainText().toUtf8(), d->outputFileNameHint);
const FilePath file = FileUtils::getSaveFilePath(
ICore::dialogParent(), {}, FileUtils::homePath() / d->outputFileNameHint);
if (!file.isEmpty()) {
QString error;
Utils::TextFileFormat format;
format.codec = EditorManager::defaultTextCodec();
format.lineTerminationMode = EditorManager::defaultLineEnding();
if (!format.writeFile(file, toPlainText(), &error))
MessageManager::writeDisrupting(error);
}
});
saveAction->setEnabled(!document()->isEmpty());