--- plasma-widget-quickaccess-0.8-orig/itemview.cpp 2009-04-25 01:30:40.000000000 +0200 +++ plasma-widget-quickaccess-0.8/itemview.cpp 2009-04-26 23:16:04.000000000 +0200 @@ -38,6 +38,8 @@ #include #include #include +#include +#include #include @@ -54,7 +56,8 @@ QRect backArrowRect() const; void updateScrollBarRange(); QPainterPath trianglePath(qreal width = 5, qreal height = 10) const; - + KUrl::List selectedUrls() const; + public: ItemView * const q; bool backArrowHover; @@ -74,6 +77,8 @@ QTimeLine *scrollTimeLine; int scrollBarValue; int wheelScrollLines; + KAction *trash; + KAction *del; private: @@ -104,6 +109,11 @@ connect(KGlobalSettings::self(), SIGNAL(settingsChanged(int)), this, SLOT(wheelScrollLinesChanged(int))); wheelScrollLinesChanged(KGlobalSettings::SETTINGS_MOUSE); + + connect(d->trash, SIGNAL(triggered(Qt::MouseButtons, Qt::KeyboardModifiers)), + SLOT(moveToTrash(Qt::MouseButtons, Qt::KeyboardModifiers))); + connect(d->del, SIGNAL(triggered()), SLOT(deleteSelectedFiles())); + } @@ -423,6 +433,22 @@ d->wheelScrollLines = group.readEntry("WheelScrollLines", 3); } +void ItemView::moveToTrash(Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers) +{ + Q_UNUSED(buttons) + + KonqOperations::Operation op = (modifiers & Qt::ShiftModifier) ? + KonqOperations::DEL : KonqOperations::TRASH; + + KonqOperations::del(this, op, d->selectedUrls()); +} + +void ItemView::deleteSelectedFiles() +{ + KonqOperations::del(this, KonqOperations::DEL, d->selectedUrls()); +} + + void ItemView::dropEvent(QDropEvent *event) { d->dragEnterTimer->stop(); @@ -476,6 +502,22 @@ } } + bool hasRemoteFiles = false; + bool isTrashLink = false; + + foreach (const KFileItem &item, items) { + hasRemoteFiles |= item.localPath().isEmpty(); + } + + // Check if we're showing the menu for the trash link + if (items.count() == 1 && items.at(0).isDesktopFile()) { + KDesktopFile file(items.at(0).localPath()); + if (file.readType() == "Link" && file.readUrl() == "trash:/") { + isTrashLink = true; + } + } + + KParts::BrowserExtension::PopupFlags flags = KParts::BrowserExtension::ShowUrlOperations | KParts::BrowserExtension::ShowProperties; @@ -485,7 +527,31 @@ flags |= KParts::BrowserExtension::ShowUrlOperations; } + KConfigGroup configGroup(KGlobal::config(), "KDE"); + bool showDeleteCommand = configGroup.readEntry("ShowDeleteCommand", false); + KActionCollection coll(this); + coll.addAction("trash", d->trash); + coll.addAction("del", d->trash); + + QList editActions; + + // Don't add the "Move to Trash" action if we're showing the menu for the trash link + if (!isTrashLink) { + if (!hasRemoteFiles) { + editActions.append(d->trash); + } else { + showDeleteCommand = true; + } + } + + if (showDeleteCommand) { + editActions.append(d->del); + } + + KParts::BrowserExtension::ActionGroupMap actionGroups; + actionGroups.insert("editactions", editActions); + KDirSortFilterProxyModel *proxyModel = dynamic_cast(model()); DirModel *model = dynamic_cast(proxyModel->sourceModel()); @@ -493,9 +559,10 @@ KonqPopupMenu *contextMenu = new KonqPopupMenu(items, item.url() , coll, 0 , KonqPopupMenu::ShowNewWindow, flags, this, - KBookmarkManager::userBookmarksManager()); - - if(contextMenu->exec(event->globalPos()) != 0){ + KBookmarkManager::userBookmarksManager(), + actionGroups); + QAction *action = contextMenu->exec(event->globalPos()); + if ( (action != 0) && (action != d->trash) && (action != d->del) ) { qobject_cast(parent())->hide(); } delete contextMenu; @@ -808,6 +875,10 @@ animationTimeLine->setDuration(ANIMATION_TIME); animationTimeLine->setDirection(QTimeLine::Backward); scrollTimeLine->setDuration(ANIMATION_TIME); + + trash = new KAction(KIcon("user-trash"), i18n("&Move to Trash"), q); + del = new KAction(i18n("&Delete"), q); + del->setIcon(KIcon("edit-delete")); } ItemView::Private::~Private() @@ -815,6 +886,8 @@ delete animationTimeLine; delete dragEnterTimer; delete scrollTimeLine; + delete trash; + delete del; } void ItemView::Private::drawBackArrow(QPainter *painter, QStyle::State state) const @@ -883,5 +956,26 @@ } +KUrl::List ItemView::Private::selectedUrls() const +{ + + KUrl::List urls; + QModelIndexList list = q->selectionModel()->selectedIndexes(); + + foreach(const QModelIndex &i, list) { + KFileItem selectedItem = i.data(KDirModel::FileItemRole).value(); + if(!selectedItem.isNull()) { + const QString path = selectedItem.localPath(); + if (!path.isEmpty()) { + urls.append(path); + } else { + urls.append(selectedItem.url()); + } + } + } + return urls; +} + + #include "itemview.moc" Nur in plasma-widget-quickaccess-0.8: itemview.cpp~. diff -ru plasma-widget-quickaccess-0.8-orig/itemview.h plasma-widget-quickaccess-0.8/itemview.h --- plasma-widget-quickaccess-0.8-orig/itemview.h 2009-04-25 01:30:40.000000000 +0200 +++ plasma-widget-quickaccess-0.8/itemview.h 2009-04-26 23:17:05.000000000 +0200 @@ -94,6 +94,8 @@ void dragEnter(); void scrollBarValueChanged(int value); void wheelScrollLinesChanged(int category); + void moveToTrash(Qt::MouseButtons, Qt::KeyboardModifiers); + void deleteSelectedFiles(); private: class Private;