Fix issue when deleting items with the context menu

Thanks to Jekyll Wu for the analyses of the issue!

BUG: 290307
BUG: 269096
BUG: 290954
BUG: 264583
FIXED-IN: 4.8.0
This commit is contained in:
Peter Penz 2012-01-14 20:02:11 +01:00
parent 6d621d299d
commit a0115f912a
2 changed files with 21 additions and 9 deletions

View file

@ -159,10 +159,10 @@ void DolphinContextMenu::slotKeyModifierPressed(Qt::Key key, bool pressed)
void DolphinContextMenu::slotRemoveActionTriggered()
{
const KActionCollection* collection = m_mainWindow->actionCollection();
if (m_shiftPressed) {
collection->action("delete")->trigger();
} else {
if (moveToTrash()) {
collection->action("move_to_trash")->trigger();
} else {
collection->action("delete")->trigger();
}
}
@ -449,7 +449,7 @@ QAction* DolphinContextMenu::createPasteAction()
return action;
}
KFileItemListProperties& DolphinContextMenu::selectedItemsProperties()
KFileItemListProperties& DolphinContextMenu::selectedItemsProperties() const
{
if (!m_selectedItemsProperties) {
m_selectedItemsProperties = new KFileItemListProperties(m_selectedItems);
@ -541,13 +541,12 @@ void DolphinContextMenu::addCustomActions()
void DolphinContextMenu::updateRemoveAction()
{
const KActionCollection* collection = m_mainWindow->actionCollection();
const bool moveToTrash = selectedItemsProperties().isLocal() && !m_shiftPressed;
// Using m_removeAction->setText(action->text()) does not apply the &-shortcut.
// This is only done until the original action has been shown at least once. To
// bypass this issue, the text and &-shortcut is applied manually.
const QAction* action = 0;
if (moveToTrash) {
if (moveToTrash()) {
action = collection->action("move_to_trash");
m_removeAction->setText(i18nc("@action:inmenu", "&Move to Trash"));
} else {
@ -558,4 +557,9 @@ void DolphinContextMenu::updateRemoveAction()
m_removeAction->setShortcuts(action->shortcuts());
}
bool DolphinContextMenu::moveToTrash() const
{
return selectedItemsProperties().isLocal() && !m_shiftPressed;
}
#include "dolphincontextmenu.moc"

View file

@ -139,7 +139,7 @@ private:
QAction* createPasteAction();
KFileItemListProperties& selectedItemsProperties();
KFileItemListProperties& selectedItemsProperties() const;
/**
* Returns the file item for m_baseUrl.
@ -170,10 +170,18 @@ private:
/**
* Updates m_removeAction to represent the 'Delete'-action if the shift-key
* has been pressed. Otherwise it represents the 'Move to Trash'-action.
* has been pressed or the selection is not local. Otherwise it represents
* the 'Move to Trash'-action.
*/
void updateRemoveAction();
/**
* @return True if no shift key has been pressed and the selection represents
* only local files.
* @see updateRemoveAction(), slotRemoveActionTriggered()
*/
bool moveToTrash() const;
private:
struct Entry
{
@ -201,7 +209,7 @@ private:
KFileItem* m_baseFileItem; /// File item for m_baseUrl
KFileItemList m_selectedItems;
KFileItemListProperties* m_selectedItemsProperties;
mutable KFileItemListProperties* m_selectedItemsProperties;
int m_context;
KonqCopyToMenu m_copyToMenu;