From: David Faure Date: Sat, 17 Nov 2007 00:08:54 +0000 (+0000) Subject: Fix "delete" and "move to trash" actions in dolphinpart; moved all logic for those... X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/8578ad1e751d218b40c49a601934a23d8ecd027d Fix "delete" and "move to trash" actions in dolphinpart; moved all logic for those out of konqueror. Inside dolphin, the usual: moving code to DolphinView. Pressing shift while clicking on "Move to Trash" in konq (dolphinpart) offers to delete, as in kde3 (this bit of logic might be good for dolphin itself too? see DolphinPart::slotTrashActivated) CCMAIL: peter.penz@gmx.at svn path=/trunk/KDE/kdebase/apps/; revision=737682 --- diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index c38cc5ea3..540fe5e48 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -52,7 +52,6 @@ #include #include #include -#include #include #include #include @@ -488,28 +487,13 @@ void DolphinMainWindow::rename() void DolphinMainWindow::moveToTrash() { clearStatusBar(); - const KUrl::List selectedUrls = m_activeViewContainer->view()->selectedUrls(); - KonqOperations::del(this, KonqOperations::TRASH, selectedUrls); - m_undoCommandTypes.append(KonqFileUndoManager::TRASH); + m_activeViewContainer->view()->trashSelectedItems(); } void DolphinMainWindow::deleteItems() { clearStatusBar(); - - const KUrl::List list = m_activeViewContainer->view()->selectedUrls(); - const bool del = KonqOperations::askDeleteConfirmation(list, - KonqOperations::DEL, - KonqOperations::DEFAULT_CONFIRMATION, - this); - - if (del) { - KIO::Job* job = KIO::del(list); - connect(job, SIGNAL(result(KJob*)), - this, SLOT(slotHandleJobError(KJob*))); - connect(job, SIGNAL(result(KJob*)), - this, SLOT(slotDeleteFileFinished(KJob*))); - } + m_activeViewContainer->view()->deleteSelectedItems(); } void DolphinMainWindow::properties() @@ -533,24 +517,6 @@ void DolphinMainWindow::slotHandlePlacesError(const QString &message) } } -void DolphinMainWindow::slotHandleJobError(KJob* job) -{ - if (job->error() != 0) { - DolphinStatusBar* statusBar = m_activeViewContainer->statusBar(); - statusBar->setMessage(job->errorString(), - DolphinStatusBar::Error); - } -} - -void DolphinMainWindow::slotDeleteFileFinished(KJob* job) -{ - if (job->error() == 0) { - DolphinStatusBar* statusBar = m_activeViewContainer->statusBar(); - statusBar->setMessage(i18nc("@info:status", "Delete operation completed."), - DolphinStatusBar::OperationCompleted); - } -} - void DolphinMainWindow::slotUndoAvailable(bool available) { QAction* undoAction = actionCollection()->action(KStandardAction::stdName(KStandardAction::Undo)); @@ -1047,21 +1013,13 @@ void DolphinMainWindow::setupActions() newWindow->setShortcut(Qt::CTRL | Qt::Key_N); connect(newWindow, SIGNAL(triggered()), this, SLOT(openNewMainWindow())); - KAction* rename = actionCollection()->addAction("rename"); - rename->setText(i18nc("@action:inmenu File", "Rename...")); - rename->setShortcut(Qt::Key_F2); + KAction* rename = DolphinView::createRenameAction(actionCollection()); connect(rename, SIGNAL(triggered()), this, SLOT(rename())); - KAction* moveToTrash = actionCollection()->addAction("move_to_trash"); - moveToTrash->setText(i18nc("@action:inmenu File", "Move to Trash")); - moveToTrash->setIcon(KIcon("user-trash")); - moveToTrash->setShortcut(QKeySequence::Delete); + KAction* moveToTrash = DolphinView::createMoveToTrashAction(actionCollection()); connect(moveToTrash, SIGNAL(triggered()), this, SLOT(moveToTrash())); - KAction* deleteAction = actionCollection()->addAction("delete"); - deleteAction->setText(i18nc("@action:inmenu File", "Delete")); - deleteAction->setShortcut(Qt::SHIFT | Qt::Key_Delete); - deleteAction->setIcon(KIcon("edit-delete")); + KAction* deleteAction = DolphinView::createDeleteAction(actionCollection()); connect(deleteAction, SIGNAL(triggered()), this, SLOT(deleteItems())); KAction* properties = actionCollection()->addAction("properties"); diff --git a/src/dolphinmainwindow.h b/src/dolphinmainwindow.h index 1471b44e9..2f91f9553 100644 --- a/src/dolphinmainwindow.h +++ b/src/dolphinmainwindow.h @@ -199,18 +199,6 @@ private slots: */ void slotHandlePlacesError(const QString &message); - /** - * Shows the error information of the job \a job - * in the status bar. - */ - void slotHandleJobError(KJob* job); - - /** - * Indicates in the status bar that the delete operation - * of the job \a job has been finished. - */ - void slotDeleteFileFinished(KJob* job); - /** * Updates the state of the 'Undo' menu action dependent * from the parameter \a available. diff --git a/src/dolphinpart.cpp b/src/dolphinpart.cpp index a0871ce06..113b840e7 100644 --- a/src/dolphinpart.cpp +++ b/src/dolphinpart.cpp @@ -91,8 +91,9 @@ DolphinPart::DolphinPart(QWidget* parentWidget, QObject* parent, const QStringLi createActions(); updateViewActions(); + slotSelectionChanged(KFileItemList()); // initially disable selection-dependent actions - // TODO provide these actions in the menu, merged with the existing view-mode-actions somehow + // TODO provide the viewmode actions in the menu, merged with the existing view-mode-actions somehow // [Q_PROPERTY introspection?] // TODO sort_by_* actions @@ -104,8 +105,6 @@ DolphinPart::DolphinPart(QWidget* parentWidget, QObject* parent, const QStringLi // (sort of spacial navigation) // TODO MMB-click should do something like KonqDirPart::mmbClicked - - // TODO updating the trash and del actions too - or removing special handling of those from konq? } DolphinPart::~DolphinPart() @@ -121,11 +120,15 @@ void DolphinPart::createActions() viewModeActions->addAction(DolphinView::columnsModeAction(actionCollection())); connect(viewModeActions, SIGNAL(triggered(QAction*)), this, SLOT(slotViewModeActionTriggered(QAction*))); - KAction* renameAction = new KAction(i18nc("@action:inmenu", "Rename..."), this); + KAction* renameAction = DolphinView::createRenameAction(actionCollection()); connect(renameAction, SIGNAL(triggered()), m_view, SLOT(renameSelectedItems())); - renameAction->setEnabled(false); - renameAction->setShortcut(Qt::Key_F2); - actionCollection()->addAction("rename", renameAction); + + KAction* moveToTrashAction = DolphinView::createMoveToTrashAction(actionCollection()); + connect(moveToTrashAction, SIGNAL(triggered(Qt::MouseButtons, Qt::KeyboardModifiers)), + this, SLOT(slotTrashActivated(Qt::MouseButtons, Qt::KeyboardModifiers))); + + KAction* deleteAction = DolphinView::createDeleteAction(actionCollection()); + connect(deleteAction, SIGNAL(triggered()), m_view, SLOT(deleteSelectedItems())); } void DolphinPart::slotSelectionChanged(const KFileItemList& selection) @@ -136,13 +139,18 @@ void DolphinPart::slotSelectionChanged(const KFileItemList& selection) stateChanged("has_no_selection"); } else { stateChanged("has_selection"); + } - QAction* renameAction = actionCollection()->action("rename"); - Q_ASSERT(renameAction); - if (renameAction) { - renameAction->setEnabled(true); + QStringList actions; + actions << "rename" << "move_to_trash" << "delete"; + foreach(const QString& actionName, actions) { + QAction* action = actionCollection()->action(actionName); + Q_ASSERT(action); + if (action) { + action->setEnabled(hasSelection); } } + emit m_extension->enableAction("cut", hasSelection); emit m_extension->enableAction("copy", hasSelection); } @@ -251,6 +259,8 @@ void DolphinPart::slotOpenContextMenu(const KFileItem& _item, const KUrl&) KParts::BrowserExtension::ActionGroupMap actionGroups; QList editActions; editActions.append(actionCollection()->action("rename")); + editActions.append(actionCollection()->action("move_to_trash")); + editActions.append(actionCollection()->action("delete")); actionGroups.insert("editactions", editActions); KFileItemList items; items.append(item); @@ -295,4 +305,17 @@ void DolphinPartBrowserExtension::paste() m_part->view()->paste(); } +//// + +void DolphinPart::slotTrashActivated(Qt::MouseButtons, Qt::KeyboardModifiers modifiers) +{ + // Note: kde3's konq_mainwindow.cpp used to check + // reason == KAction::PopupMenuActivation && ... + // but this isn't supported anymore + if (modifiers & Qt::ShiftModifier) + m_view->deleteSelectedItems(); + else + m_view->trashSelectedItems(); +} + #include "dolphinpart.moc" diff --git a/src/dolphinpart.h b/src/dolphinpart.h index 114c21d31..5075702db 100644 --- a/src/dolphinpart.h +++ b/src/dolphinpart.h @@ -108,6 +108,11 @@ private Q_SLOTS: */ void updatePasteAction(); + /** + * Connected to the "move_to_trash" action; adds "shift means del" handling. + */ + void slotTrashActivated(Qt::MouseButtons, Qt::KeyboardModifiers); + private: void createActions(); diff --git a/src/dolphinpart.rc b/src/dolphinpart.rc index f1d4652e5..3344db227 100644 --- a/src/dolphinpart.rc +++ b/src/dolphinpart.rc @@ -1,9 +1,11 @@ - + - + + + diff --git a/src/dolphinui.rc b/src/dolphinui.rc index 80d720da8..707dd7c43 100644 --- a/src/dolphinui.rc +++ b/src/dolphinui.rc @@ -1,5 +1,5 @@ - + diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index 30b07ce42..51e2a0a57 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -1067,6 +1068,36 @@ void DolphinView::renameSelectedItems() } } +void DolphinView::trashSelectedItems() +{ + emit doingOperation(KonqFileUndoManager::TRASH); + KonqOperations::del(this, KonqOperations::TRASH, selectedUrls()); +} + +void DolphinView::deleteSelectedItems() +{ + const KUrl::List list = selectedUrls(); + const bool del = KonqOperations::askDeleteConfirmation(list, + KonqOperations::DEL, + KonqOperations::DEFAULT_CONFIRMATION, + this); + + if (del) { + KIO::Job* job = KIO::del(list); + connect(job, SIGNAL(result(KJob*)), + this, SLOT(slotDeleteFileFinished(KJob*))); + } +} + +void DolphinView::slotDeleteFileFinished(KJob* job) +{ + if (job->error() == 0) { + emit operationCompletedMessage(i18nc("@info:status", "Delete operation completed.")); + } else { + emit errorMessage(job->errorString()); + } +} + void DolphinView::cutSelectedItems() { QMimeData* mimeData = new QMimeData(); @@ -1156,4 +1187,30 @@ QPair DolphinView::pasteInfo() const return ret; } +KAction* DolphinView::createRenameAction(KActionCollection* collection) +{ + KAction* rename = collection->addAction("rename"); + rename->setText(i18nc("@action:inmenu File", "Rename...")); + rename->setShortcut(Qt::Key_F2); + return rename; +} + +KAction* DolphinView::createMoveToTrashAction(KActionCollection* collection) +{ + KAction* moveToTrash = collection->addAction("move_to_trash"); + moveToTrash->setText(i18nc("@action:inmenu File", "Move to Trash")); + moveToTrash->setIcon(KIcon("user-trash")); + moveToTrash->setShortcut(QKeySequence::Delete); + return moveToTrash; +} + +KAction* DolphinView::createDeleteAction(KActionCollection* collection) +{ + KAction* deleteAction = collection->addAction("delete"); + deleteAction->setIcon(KIcon("edit-delete")); + deleteAction->setText(i18nc("@action:inmenu File", "Delete")); + deleteAction->setShortcut(Qt::SHIFT | Qt::Key_Delete); + return deleteAction; +} + #include "dolphinview.moc" diff --git a/src/dolphinview.h b/src/dolphinview.h index c20ea10d2..f550fa513 100644 --- a/src/dolphinview.h +++ b/src/dolphinview.h @@ -38,6 +38,7 @@ #include #include +class KAction; class KToggleAction; class DolphinController; class KDirLister; @@ -339,6 +340,24 @@ public: */ static KToggleAction* columnsModeAction(KActionCollection* collection); + /** + * Creates the rename action. + * This code is here to share it between the mainwindow and the part + */ + static KAction* createRenameAction(KActionCollection* collection); + + /** + * Creates the "move to trash" action. + * This code is here to share it between the mainwindow and the part + */ + static KAction* createMoveToTrashAction(KActionCollection* collection); + + /** + * Creates the delete action. + * This code is here to share it between the mainwindow and the part + */ + static KAction* createDeleteAction(KActionCollection* collection); + /** * Returns the action name corresponding to the current view mode */ @@ -372,6 +391,16 @@ public slots: */ void renameSelectedItems(); + /** + * Moves all selected items to the trash. + */ + void trashSelectedItems(); + + /** + * Deletes all selected items. + */ + void deleteSelectedItems(); + /** * Copies all selected items to the clipboard and marks * the items as cutted. @@ -463,6 +492,12 @@ signals: */ void errorMessage(const QString& msg); + /** + * Is emitted if an "operation completed" message with the content \a msg + * should be shown. + */ + void operationCompletedMessage(const QString& msg); + /** * Is emitted after DolphinView::setUrl() has been invoked and * the path \a url is currently loaded. If this signal is emitted, @@ -573,6 +608,12 @@ private slots: */ void clearHoverInformation(); + /** + * Indicates in the status bar that the delete operation + * of the job \a job has been finished. + */ + void slotDeleteFileFinished(KJob* job); + private: void loadDirectory(const KUrl& url, bool reload = false); diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp index 7e28a30fe..26b4920e9 100644 --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -129,6 +129,8 @@ DolphinViewContainer::DolphinViewContainer(DolphinMainWindow* mainWindow, this, SLOT(showErrorMessage(const QString&))); connect(m_view, SIGNAL(infoMessage(const QString&)), this, SLOT(showInfoMessage(const QString&))); + connect(m_view, SIGNAL(operationCompletedMessage(const QString&)), + this, SLOT(showOperationCompletedMessage(const QString&))); connect(m_view, SIGNAL(itemTriggered(KFileItem)), this, SLOT(slotItemTriggered(KFileItem))); connect(m_view, SIGNAL(startedPathLoading(const KUrl&)), @@ -250,6 +252,11 @@ void DolphinViewContainer::showErrorMessage(const QString& msg) m_statusBar->setMessage(msg, DolphinStatusBar::Error); } +void DolphinViewContainer::showOperationCompletedMessage(const QString& msg) +{ + m_statusBar->setMessage(msg, DolphinStatusBar::OperationCompleted); +} + void DolphinViewContainer::closeFilterBar() { m_filterBar->hide(); diff --git a/src/dolphinviewcontainer.h b/src/dolphinviewcontainer.h index 5e252dcda..ac7fe315b 100644 --- a/src/dolphinviewcontainer.h +++ b/src/dolphinviewcontainer.h @@ -161,6 +161,9 @@ private slots: /** Shows the error message \a msg inside the statusbar. */ void showErrorMessage(const QString& msg); + /** Shows the "operation completed" message \a msg inside the statusbar. */ + void showOperationCompletedMessage(const QString& msg); + void closeFilterBar(); /**