diff --git a/kerfuffle/createdialog.cpp b/kerfuffle/createdialog.cpp
--- a/kerfuffle/createdialog.cpp
+++ b/kerfuffle/createdialog.cpp
@@ -83,7 +83,6 @@
m_vlayout->addWidget(m_fileWidget);
m_fileWidget->setMode(KFile::File | KFile::LocalOnly);
- m_fileWidget->setConfirmOverwrite(true);
m_fileWidget->setOperationMode(KFileWidget::Saving);
m_fileWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
m_fileWidget->setFilter(filterFromMimeTypes(Kerfuffle::supportedWriteMimeTypes()));
diff --git a/part/part.h b/part/part.h
--- a/part/part.h
+++ b/part/part.h
@@ -83,6 +83,12 @@
*/
bool isLocalFileValid();
+ /**
+ * Ask the user whether to overwrite @p targetFile, when creating a new archive with the same path.
+ * @return True if the file has been successfully removed upon user's will. False otherwise.
+ */
+ bool confirmAndDelete(const QString& targetFile);
+
public slots:
void extractSelectedFilesTo(const QString& localPath);
diff --git a/part/part.cpp b/part/part.cpp
--- a/part/part.cpp
+++ b/part/part.cpp
@@ -600,12 +600,14 @@
if (creatingNewArchive) {
if (localFileInfo.exists()) {
- int overwrite = KMessageBox::questionYesNo(widget(), xi18nc("@info", "The archive %1 already exists. Would you like to open it instead?", localFile), i18nc("@title:window", "File Exists"), KGuiItem(i18n("Open File")), KStandardGuiItem::cancel());
-
- if (overwrite == KMessageBox::No) {
+ if (!confirmAndDelete(localFile)) {
+ displayMsgWidget(KMessageWidget::Error, xi18nc("@info",
+ "Could not overwrite %1. Check whether you have write permission.",
+ localFile));
return false;
}
}
+
displayMsgWidget(KMessageWidget::Information, xi18nc("@info", "The archive %1 will be created as soon as you add a file.", localFile));
} else {
if (!localFileInfo.exists()) {
@@ -622,6 +624,26 @@
return true;
}
+bool Part::confirmAndDelete(const QString &targetFile)
+{
+ QFileInfo targetInfo(targetFile);
+ const auto buttonCode = KMessageBox::warningYesNo(widget(),
+ xi18nc("@info",
+ "The archive %1 already exists. Do you wish to overwrite it?",
+ targetInfo.fileName()),
+ i18nc("@title:window", "File Exists"),
+ KGuiItem(i18nc("@action:button", "Overwrite")),
+ KStandardGuiItem::cancel());
+
+ if (buttonCode != KMessageBox::Yes || !targetInfo.isWritable()) {
+ return false;
+ }
+
+ qCDebug(ARK) << "Removing file" << targetFile;
+
+ return QFile(targetFile).remove();
+}
+
void Part::slotLoadingStarted()
{
}