diff --git a/src/filewidgets/knewfilemenu.h b/src/filewidgets/knewfilemenu.h --- a/src/filewidgets/knewfilemenu.h +++ b/src/filewidgets/knewfilemenu.h @@ -186,7 +186,7 @@ Q_PRIVATE_SLOT(d, void _k_slotAbortDialog()) Q_PRIVATE_SLOT(d, void _k_slotActionTriggered(QAction *)) Q_PRIVATE_SLOT(d, void _k_slotCreateDirectory(bool writeHiddenDir = false)) - Q_PRIVATE_SLOT(d, void _k_slotCreateHiddenDirectory()) + Q_PRIVATE_SLOT(d, void _k_slotCreateHiddenTildeDirectory()) Q_PRIVATE_SLOT(d, void _k_slotFillTemplates()) Q_PRIVATE_SLOT(d, void _k_slotOtherDesktopFile()) Q_PRIVATE_SLOT(d, void _k_slotOtherDesktopFileClosed()) diff --git a/src/filewidgets/knewfilemenu.cpp b/src/filewidgets/knewfilemenu.cpp --- a/src/filewidgets/knewfilemenu.cpp +++ b/src/filewidgets/knewfilemenu.cpp @@ -249,9 +249,9 @@ bool checkSourceExists(const QString &src); /** - * Asks user whether to create a hidden directory with a dialog + * Asks user depending on whether they wants to create a hidden directory or a directory named "~" with a dialog */ - void confirmCreatingHiddenDir(const QString &name); + void confirmCreatingDir(const QString &name); /** * The strategy used for other desktop files than Type=Link. Example: Application, Device. @@ -304,10 +304,10 @@ void _k_slotCreateDirectory(bool writeHiddenDir = false); /** - * Callback function that reads in directory name from dialog and processes it. This will wirte - * a hidden directory without further questions + * Callback function that reads in directory name from dialog and processes it. This will write + * a hidden directory or a directory named ~(tilde) without further questions */ - void _k_slotCreateHiddenDirectory(); + void _k_slotCreateHiddenTildeDirectory(); /** * Fills the templates list. @@ -405,10 +405,10 @@ return true; } -void KNewFileMenuPrivate::confirmCreatingHiddenDir(const QString &name) +void KNewFileMenuPrivate::confirmCreatingDir(const QString &name) { - if (!KMessageBox::shouldBeShownContinue(QStringLiteral("confirm_create_hidden_dir"))) { - _k_slotCreateHiddenDirectory(); + if (!KMessageBox::shouldBeShownContinue(QStringLiteral("confirm_create_hidden_tilde_dir"))) { + _k_slotCreateHiddenTildeDirectory(); return; } @@ -419,23 +419,33 @@ cancelGuiItem.setIcon(QIcon::fromTheme(QStringLiteral("edit-rename"))); QDialog *confirmDialog = new QDialog(m_parentWidget); - confirmDialog->setWindowTitle(i18n("Create hidden directory?")); confirmDialog->setModal(m_modal); confirmDialog->setAttribute(Qt::WA_DeleteOnClose); QDialogButtonBox *buttonBox = new QDialogButtonBox(confirmDialog); buttonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); KGuiItem::assign(buttonBox->button(QDialogButtonBox::Ok), continueGuiItem); KGuiItem::assign(buttonBox->button(QDialogButtonBox::Cancel), cancelGuiItem); - KMessageBox::createKMessageBox(confirmDialog, buttonBox, QMessageBox::Warning, + if (name.startsWith(QLatin1Char('.'))) { + confirmDialog->setWindowTitle(i18n("Create hidden directory?")); + KMessageBox::createKMessageBox(confirmDialog, buttonBox, QMessageBox::Warning, i18n("The name \"%1\" starts with a dot, so the directory will be hidden by default.", name), QStringList(), i18n("Do not ask again"), nullptr, KMessageBox::NoExec); + } else if (name == QLatin1String("~")) { + confirmDialog->setWindowTitle(i18n("Create directory named ~?")); + KMessageBox::createKMessageBox(confirmDialog, buttonBox, QMessageBox::Warning, + i18n("Naming a folder \"%1\" is not recommended because it may be confusing or dangerous when using the terminal to delete things.", name), + QStringList(), + i18n("Do not ask again"), + nullptr, + KMessageBox::NoExec); + } - QObject::connect(buttonBox, SIGNAL(accepted()), q, SLOT(_k_slotCreateHiddenDirectory())); + QObject::connect(buttonBox, SIGNAL(accepted()), q, SLOT(_k_slotCreateHiddenTildeDirectory())); QObject::connect(buttonBox, &QDialogButtonBox::rejected, q, &KNewFileMenu::createDirectory); m_fileDialog = confirmDialog; @@ -856,7 +866,7 @@ QUrl url; QUrl baseUrl = m_popupFiles.first(); - QString name = expandTilde(m_text); + QString name = m_text; if (!name.isEmpty()) { if (QDir::isAbsolutePath(name)) { @@ -890,9 +900,10 @@ _k_slotAbortDialog(); return; } - if (!m_viewShowsHiddenFiles && name.startsWith(QLatin1Char('.'))) { + + if ((!m_viewShowsHiddenFiles && name.startsWith(QLatin1Char('.'))) || (name == QLatin1String("~"))) { if (!writeHiddenDir) { - confirmCreatingHiddenDir(name); + confirmCreatingDir(name); return; } } @@ -923,7 +934,7 @@ _k_slotAbortDialog(); } -void KNewFileMenuPrivate::_k_slotCreateHiddenDirectory() +void KNewFileMenuPrivate::_k_slotCreateHiddenTildeDirectory() { _k_slotCreateDirectory(true); }