From ea20a7c157c36447499967930fae044c9e2241dd Mon Sep 17 00:00:00 2001 From: Luca Beltrame Date: Wed, 2 Dec 2015 00:44:18 +0100 Subject: [PATCH 1/3] Use AA_DontCreateNativeWidgetSiblings to prevent rendering issues Start supporting kfiledialog:// URLs --- src/mainwindow.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 7fcee46..02ca0b6 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -45,6 +45,7 @@ #include #include #include +#include #ifdef WITH_KFILEMETADATA #include @@ -93,6 +94,8 @@ DanbooruMainWindow::DanbooruMainWindow(QWidget *parent) m_service->setParent(this); setCentralWidget(m_view); + qApp->setAttribute(Qt::AA_DontCreateNativeWidgetSiblings, true); + qmlRegisterType("DanbooruClient", 1, 0, "DanbooruPost"); qmlRegisterType("DanbooruClient", 1, 0, "DanbooruService"); qRegisterMetaType(); @@ -485,10 +488,15 @@ void DanbooruMainWindow::slotHandleDownload(const QUrl &url, const QVariant tags QString remoteFile = url.fileName(); QPointer saveDialog = new QFileDialog(this, i18n("Save image")); + QString recentClass; saveDialog->setAcceptMode(QFileDialog::AcceptSave); saveDialog->setFileMode(QFileDialog::AnyFile); - saveDialog->setDirectory(QStandardPaths::writableLocation(QStandardPaths::PicturesLocation)); + saveDialog->setDirectoryUrl(KFileWidget::getStartUrl( + QUrl(QStringLiteral("kfiledialog://danbooru-client")), recentClass)); + + + saveDialog->setOption(QFileDialog::DontConfirmOverwrite, false); QStringList filters; @@ -514,6 +522,8 @@ void DanbooruMainWindow::slotHandleDownload(const QUrl &url, const QVariant tags if (result) { + // TODO: KRecentDirs + QUrl localFile = saveDialog->selectedUrls().at(0); if (!localFile.isEmpty()) { From fa9bc0918e1b22d8f6eac044966bfadfc1c9c1a2 Mon Sep 17 00:00:00 2001 From: Luca Beltrame Date: Wed, 2 Dec 2015 00:45:11 +0100 Subject: [PATCH 2/3] Update CMakeLists with the right KIO link Needed to use KFileWidget. --- src/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f4024cb..6fb6e25 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -48,6 +48,7 @@ target_link_libraries(danbooru_client PUBLIC KF5::XmlGui KF5::ConfigWidgets KF5::KIOCore + KF5::KIOFileWidgets KF5::Wallet KF5::Declarative PRIVATE From a560b6f7c843ba15f5acf4bb284c2b2dbfec74de Mon Sep 17 00:00:00 2001 From: Luca Beltrame Date: Thu, 3 Dec 2015 07:36:43 +0100 Subject: [PATCH 3/3] Use KRecentDirs to "remember" the right directory for saving --- src/mainwindow.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 02ca0b6..7b2384e 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -46,6 +46,7 @@ #include #include #include +#include #ifdef WITH_KFILEMETADATA #include @@ -493,9 +494,8 @@ void DanbooruMainWindow::slotHandleDownload(const QUrl &url, const QVariant tags saveDialog->setAcceptMode(QFileDialog::AcceptSave); saveDialog->setFileMode(QFileDialog::AnyFile); saveDialog->setDirectoryUrl(KFileWidget::getStartUrl( - QUrl(QStringLiteral("kfiledialog://danbooru-client")), recentClass)); - - + QUrl(QStringLiteral("kfiledialog:///danbooru-client")).toLocalFile(), + recentClass)); saveDialog->setOption(QFileDialog::DontConfirmOverwrite, false); @@ -518,13 +518,18 @@ void DanbooruMainWindow::slotHandleDownload(const QUrl &url, const QVariant tags saveDialog->selectFile(remoteFile); saveDialog->open(); - connect(saveDialog, &QFileDialog::finished, [this, tagList, saveDialog, url](int result) { + connect(saveDialog, &QFileDialog::finished, [this, tagList, saveDialog, url, recentClass](int result) { if (result) { // TODO: KRecentDirs QUrl localFile = saveDialog->selectedUrls().at(0); + + if (!recentClass.isEmpty()) { + KRecentDirs::add(recentClass, QFileInfo(localFile.toLocalFile()).absoluteFilePath()); + } + if (!localFile.isEmpty()) { KIO::FileCopyJob *job = KIO::file_copy(url, localFile, -1, KIO::DefaultFlags);