X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/de289800b22c654e8e3d8fbaea7bdb496a021b88..dd07a327:/src/panels/places/placespanel.cpp diff --git a/src/panels/places/placespanel.cpp b/src/panels/places/placespanel.cpp index de7137747..cb3f3183b 100644 --- a/src/panels/places/placespanel.cpp +++ b/src/panels/places/placespanel.cpp @@ -11,12 +11,11 @@ #include "placespanel.h" -#include "dolphinplacesmodelsingleton.h" #include "dolphin_generalsettings.h" #include "dolphin_placespanelsettings.h" -#include "global.h" -#include "views/draganddrophelper.h" +#include "dolphinplacesmodelsingleton.h" #include "settings/dolphinsettingsdialog.h" +#include "views/draganddrophelper.h" #include #include @@ -31,12 +30,11 @@ #include -PlacesPanel::PlacesPanel(QWidget* parent) +PlacesPanel::PlacesPanel(QWidget *parent) : KFilePlacesView(parent) { setDropOnPlaceEnabled(true); - connect(this, &PlacesPanel::urlsDropped, - this, &PlacesPanel::slotUrlsDropped); + connect(this, &PlacesPanel::urlsDropped, this, &PlacesPanel::slotUrlsDropped); setAutoResizeItemsEnabled(false); @@ -44,6 +42,14 @@ PlacesPanel::PlacesPanel(QWidget* parent) slotTearDownRequested(index); }); + m_openInSplitView = new QAction(QIcon::fromTheme(QStringLiteral("view-split-left-right")), i18nc("@action:inmenu", "Open in Split View")); + m_openInSplitView->setPriority(QAction::HighPriority); + connect(m_openInSplitView, &QAction::triggered, this, [this]() { + const QUrl url = currentIndex().data(KFilePlacesModel::UrlRole).toUrl(); + Q_EMIT openInSplitViewRequested(url); + }); + addAction(m_openInSplitView); + m_configureTrashAction = new QAction(QIcon::fromTheme(QStringLiteral("configure")), i18nc("@action:inmenu", "Configure Trash…")); m_configureTrashAction->setPriority(QAction::HighPriority); connect(m_configureTrashAction, &QAction::triggered, this, &PlacesPanel::slotConfigureTrash); @@ -51,13 +57,13 @@ PlacesPanel::PlacesPanel(QWidget* parent) connect(this, &PlacesPanel::contextMenuAboutToShow, this, &PlacesPanel::slotContextMenuAboutToShow); - connect(this, &PlacesPanel::iconSizeChanged, this, [this](const QSize &newSize) { + connect(this, &PlacesPanel::iconSizeChanged, this, [](const QSize &newSize) { int iconSize = qMin(newSize.width(), newSize.height()); if (iconSize == 0) { // Don't store 0 size, let's keep -1 for default/small/automatic iconSize = -1; } - PlacesPanelSettings* settings = PlacesPanelSettings::self(); + PlacesPanelSettings *settings = PlacesPanelSettings::self(); settings->setIconSize(iconSize); settings->save(); }); @@ -73,7 +79,7 @@ void PlacesPanel::setUrl(const QUrl &url) KFilePlacesView::setUrl(url); } -QList PlacesPanel::customContextMenuActions() const +QList PlacesPanel::customContextMenuActions() const { return m_customContextMenuActions; } @@ -105,7 +111,7 @@ void PlacesPanel::readSettings() setIconSize(QSize(iconSize, iconSize)); } -void PlacesPanel::showEvent(QShowEvent* event) +void PlacesPanel::showEvent(QShowEvent *event) { if (!event->spontaneous() && !model()) { readSettings(); @@ -143,16 +149,20 @@ static bool isInternalDrag(const QMimeData *mimeData) void PlacesPanel::dragMoveEvent(QDragMoveEvent *event) { - const QModelIndex index = indexAt(event->pos()); + const QModelIndex index = indexAt(event->position().toPoint()); if (index.isValid()) { auto *placesModel = static_cast(model()); // Reject drag ontop of a non-writable protocol // We don't know whether we're dropping inbetween or ontop of a place // so still allow internal drag events so that re-arranging still works. - const QUrl url = placesModel->url(index); - if (url.isValid() && !isInternalDrag(event->mimeData()) && !KProtocolManager::supportsWriting(url)) { - event->setDropAction(Qt::IgnoreAction); + if (!isInternalDrag(event->mimeData())) { + const QUrl url = placesModel->url(index); + if (!url.isValid() || !KProtocolManager::supportsWriting(url)) { + event->setDropAction(Qt::IgnoreAction); + } else { + DragAndDropHelper::updateDropAction(event, url); + } } } @@ -163,13 +173,13 @@ void PlacesPanel::slotConfigureTrash() { const QUrl url = currentIndex().data(KFilePlacesModel::UrlRole).toUrl(); - DolphinSettingsDialog* settingsDialog = new DolphinSettingsDialog(url, this); + DolphinSettingsDialog *settingsDialog = new DolphinSettingsDialog(url, this); settingsDialog->setCurrentPage(settingsDialog->trashSettings); settingsDialog->setAttribute(Qt::WA_DeleteOnClose); settingsDialog->show(); } -void PlacesPanel::slotUrlsDropped(const QUrl& dest, QDropEvent* event, QWidget* parent) +void PlacesPanel::slotUrlsDropped(const QUrl &dest, QDropEvent *event, QWidget *parent) { KIO::DropJob *job = DragAndDropHelper::dropUrls(dest, event, parent); if (job) { @@ -190,6 +200,7 @@ void PlacesPanel::slotContextMenuAboutToShow(const QModelIndex &index, QMenu *me const Solid::Device device = placesModel->deviceForIndex(index); m_configureTrashAction->setVisible(url.scheme() == QLatin1String("trash")); + m_openInSplitView->setVisible(url.isValid()); // show customContextMenuActions only on the view's context menu if (!url.isValid() && !device.isValid()) { @@ -225,7 +236,7 @@ void PlacesPanel::slotTearDownRequested(const QModelIndex &index) void PlacesPanel::slotTearDownRequestedExternally(const QString &udi) { Q_UNUSED(udi); - auto *storageAccess = static_cast(sender()); + auto *storageAccess = static_cast(sender()); Q_EMIT storageTearDownExternallyRequested(storageAccess->filePath()); } @@ -246,7 +257,7 @@ void PlacesPanel::slotTearDownDone(const QModelIndex &index, Solid::ErrorType er void PlacesPanel::slotRowsInserted(const QModelIndex &parent, int first, int last) { for (int i = first; i <= last; ++i) { - connectDeviceSignals(model()->index(first, 0, parent)); + connectDeviceSignals(model()->index(i, 0, parent)); } } @@ -277,3 +288,5 @@ void PlacesPanel::connectDeviceSignals(const QModelIndex &index) connect(storageAccess, &Solid::StorageAccess::teardownRequested, this, &PlacesPanel::slotTearDownRequestedExternally); } + +#include "moc_placespanel.cpp"