From kde-commits Wed Nov 18 22:27:32 2009 From: David Faure Date: Wed, 18 Nov 2009 22:27:32 +0000 To: kde-commits Subject: KDE/kdebase/apps Message-Id: <1258583252.267770.18300.nullmailer () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=125858341804359 SVN commit 1051124 by dfaure: Warn when the unsuspecting user is about to create a directory that starts with a dot, like Sabine's ".csv test files" folder, which did not appear in the directory view after being created. M +4 -0 dolphin/src/dolphincontextmenu.cpp M +3 -1 dolphin/src/dolphinmainwindow.cpp M +2 -0 dolphin/src/dolphinpart.cpp M +12 -2 lib/konq/knewmenu.cpp M +7 -0 lib/konq/knewmenu.h M +47 -18 lib/konq/konq_operations.cpp M +12 -0 lib/konq/konq_operations.h --- trunk/KDE/kdebase/apps/dolphin/src/dolphincontextmenu.cpp #1051123:1051124 @@ -189,6 +189,8 @@ if (m_fileInfo.isDir() && (m_selectedUrls.count() == 1)) { // setup 'Create New' menu DolphinNewMenu* newMenu = new DolphinNewMenu(popup, m_mainWindow); + const DolphinView* view = m_mainWindow->activeViewContainer()->view(); + newMenu->setViewShowsHiddenFiles(view->showHiddenFiles()); newMenu->slotCheckUpToDate(); newMenu->setPopupFiles(m_fileInfo.url()); newMenu->setEnabled(capabilities().supportsWriting()); @@ -268,6 +270,8 @@ // setup 'Create New' menu KNewMenu* newMenu = m_mainWindow->newMenu(); + const DolphinView* view = m_mainWindow->activeViewContainer()->view(); + newMenu->setViewShowsHiddenFiles(view->showHiddenFiles()); newMenu->slotCheckUpToDate(); newMenu->setPopupFiles(m_baseUrl); popup->addMenu(newMenu->menu()); --- trunk/KDE/kdebase/apps/dolphin/src/dolphinmainwindow.cpp #1051123:1051124 @@ -552,12 +552,14 @@ void DolphinMainWindow::updateNewMenu() { + m_newMenu->setViewShowsHiddenFiles(activeViewContainer()->view()->showHiddenFiles()); m_newMenu->slotCheckUpToDate(); m_newMenu->setPopupFiles(activeViewContainer()->url()); } void DolphinMainWindow::createDirectory() { + m_newMenu->setViewShowsHiddenFiles(activeViewContainer()->view()->showHiddenFiles()); m_newMenu->setPopupFiles(activeViewContainer()->url()); m_newMenu->createDirectory(); } @@ -1658,7 +1660,7 @@ caption = url.protocol(); } } - + setCaption(caption); } --- trunk/KDE/kdebase/apps/dolphin/src/dolphinpart.cpp #1051123:1051124 @@ -535,6 +535,7 @@ { // As requested by KNewMenu : m_newMenu->slotCheckUpToDate(); + m_newMenu->setViewShowsHiddenFiles(m_view->showHiddenFiles()); // And set the files that the menu apply on : m_newMenu->setPopupFiles(url()); } @@ -551,6 +552,7 @@ void DolphinPart::createDirectory() { + m_newMenu->setViewShowsHiddenFiles(m_view->showHiddenFiles()); m_newMenu->setPopupFiles(url()); m_newMenu->createDirectory(); } --- trunk/KDE/kdebase/apps/lib/konq/knewmenu.cpp #1051123:1051124 @@ -112,7 +112,8 @@ { public: KNewMenuPrivate() - : menuItemsVersion(0) + : menuItemsVersion(0), + viewShowsHiddenFiles(false) {} KActionCollection * m_actionCollection; QWidget *m_parentWidget; @@ -120,6 +121,7 @@ QAction* m_newDirAction; int menuItemsVersion; + bool viewShowsHiddenFiles; /** * When the user pressed the right mouse button over an URL a popup menu @@ -421,7 +423,10 @@ if (d->popupFiles.isEmpty()) return; - KIO::SimpleJob* job = KonqOperations::newDir(d->m_parentWidget, d->popupFiles.first()); + KonqOperations::NewDirFlags newDirFlags; + if (d->viewShowsHiddenFiles) + newDirFlags |= KonqOperations::ViewShowsHiddenFile; + KIO::SimpleJob* job = KonqOperations::newDir(d->m_parentWidget, d->popupFiles.first(), newDirFlags); if (job) { // We want the error handling to be done by slotResult so that subclasses can reimplement it job->ui()->setAutoErrorHandlingEnabled(false); @@ -731,4 +736,9 @@ } } +void KNewMenu::setViewShowsHiddenFiles(bool b) +{ + d->viewShowsHiddenFiles = b; +} + #include "knewmenu.moc" --- trunk/KDE/kdebase/apps/lib/konq/knewmenu.h #1051123:1051124 @@ -64,6 +64,12 @@ virtual ~KNewMenu(); /** + * Set if the directory view currently shows dot files. + * @since 4.4 + */ + void setViewShowsHiddenFiles(bool b); + + /** * Set the files the popup is shown for * Call this before showing up the menu */ @@ -73,6 +79,7 @@ /** * Checks if updating the list is necessary * IMPORTANT : Call this in the slot for aboutToShow. + * And while you're there, you probably want to call setViewShowsHiddenFiles ;) */ void slotCheckUpToDate(); --- trunk/KDE/kdebase/apps/lib/konq/konq_operations.cpp #1051123:1051124 @@ -807,30 +807,59 @@ rename( parent, oldurl, newurl ); } -KIO::SimpleJob* KonqOperations::newDir( QWidget * parent, const KUrl & baseUrl ) +// Duplicated in libkfile's KDirOperator +static bool confirmCreatingHiddenDir(const QString& name, QWidget* parent) { + KGuiItem continueGuiItem(KStandardGuiItem::cont()); + continueGuiItem.setText(i18nc("@action:button", "Create directory")); + KGuiItem cancelGuiItem(KStandardGuiItem::cancel()); + cancelGuiItem.setText(i18nc("@action:button", "Enter a different name")); + return KMessageBox::warningContinueCancel( + parent, + i18n("The name \"%1\" starts with a dot and will therefore the directory will be hidden by default.", name), + i18n("Create hidden directory?"), + continueGuiItem, + cancelGuiItem, + "confirm_create_hidden_dir") == KMessageBox::Continue; +} + +KIO::SimpleJob* KonqOperations::newDir(QWidget * parent, const KUrl & baseUrl) +{ + return newDir(parent, baseUrl, NewDirFlags()); +} + +KIO::SimpleJob* KonqOperations::newDir(QWidget * parent, const KUrl & baseUrl, NewDirFlags flags) +{ + // Notice that kfile's KDirOperator::mkdir() is somewhat similar bool ok; QString name = i18n( "New Folder" ); if ( baseUrl.isLocalFile() && QFileInfo( baseUrl.toLocalFile( KUrl::AddTrailingSlash ) + name ).exists() ) - name = KIO::RenameDialog::suggestName( baseUrl, i18n( "New Folder" ) ); + name = KIO::RenameDialog::suggestName(baseUrl, name); - name = KInputDialog::getText ( i18n( "New Folder" ), - i18n( "Enter folder name:" ), name, &ok, parent ); - if ( ok && !name.isEmpty() ) - { - KUrl url; - if ((name[0] == '/') || (name[0] == '~')) - { - url.setPath(KShell::tildeExpand(name)); + bool askAgain; + do { + askAgain = false; + name = KInputDialog::getText ( i18n( "New Folder" ), + i18n( "Enter folder name:" ), name, &ok, parent ); + if ( ok && !name.isEmpty() ) { + KUrl url; + if ((name[0] == '/') || (name[0] == '~')) { + url.setPath(KShell::tildeExpand(name)); + } else { + const bool viewShowsHiddenFiles = (flags & ViewShowsHiddenFile); + if (!viewShowsHiddenFiles && name.startsWith('.')) { + if (!confirmCreatingHiddenDir(name, parent)) { + askAgain = true; + continue; + } + } + name = KIO::encodeFileName( name ); + url = baseUrl; + url.addPath( name ); + } + return KonqOperations::mkdir( parent, url ); } - else - { - name = KIO::encodeFileName( name ); - url = baseUrl; - url.addPath( name ); - } - return KonqOperations::mkdir( parent, url ); - } + } while (askAgain); return 0; } --- trunk/KDE/kdebase/apps/lib/konq/konq_operations.h #1051123:1051124 @@ -149,6 +149,18 @@ * @return the job used to create the directory or 0 if the creation was cancelled by the user */ static KIO::SimpleJob* newDir( QWidget * parent, const KUrl & baseUrl ); + enum NewDirFlag { ViewShowsHiddenFile = 1 }; + Q_DECLARE_FLAGS(NewDirFlags, NewDirFlag) + /** + * Ask for the name of a new directory and create it. + * Calls KonqOperations::mkdir. + * + * @param parent the parent widget + * @param baseUrl the directory to create the new directory in + * @param flags see NewDirFlags + * @return the job used to create the directory or 0 if the creation was cancelled by the user + */ + static KIO::SimpleJob* newDir( QWidget * parent, const KUrl & baseUrl, NewDirFlags flags ); /** * Get info about a given URL, and when that's done (it's asynchronous!),