diff --git a/src/panels/places/placesitemmodel.h b/src/panels/places/placesitemmodel.h --- a/src/panels/places/placesitemmodel.h +++ b/src/panels/places/placesitemmodel.h @@ -100,6 +100,7 @@ void requestEject(int index); void requestTearDown(int index); + void requestProperties(int index); bool storageSetupNeeded(int index) const; void requestStorageSetup(int index); @@ -231,6 +232,8 @@ KFilePlacesModel *m_sourceModel; QVector m_indexMap; + + QObject *m_parent; }; #endif diff --git a/src/panels/places/placesitemmodel.cpp b/src/panels/places/placesitemmodel.cpp --- a/src/panels/places/placesitemmodel.cpp +++ b/src/panels/places/placesitemmodel.cpp @@ -34,6 +34,7 @@ #include #include #include +#include #include #include @@ -60,7 +61,8 @@ m_hiddenItemsShown(false), m_deviceToTearDown(nullptr), m_storageSetupInProgress(), - m_sourceModel(DolphinPlacesModelSingleton::instance().placesModel()) + m_sourceModel(DolphinPlacesModelSingleton::instance().placesModel()), + m_parent(parent) { cleanupBookmarks(); loadBookmarks(); @@ -294,6 +296,16 @@ } } +void PlacesItemModel::requestProperties(int index) +{ + const PlacesItem* item = placesItem(index); + if (item) { + KPropertiesDialog* dialog = new KPropertiesDialog(item->url(), (QWidget *)m_parent); + dialog->setAttribute(Qt::WA_DeleteOnClose); + dialog->show(); + } +} + bool PlacesItemModel::storageSetupNeeded(int index) const { const PlacesItem* item = placesItem(index); diff --git a/src/panels/places/placespanel.cpp b/src/panels/places/placespanel.cpp --- a/src/panels/places/placespanel.cpp +++ b/src/panels/places/placespanel.cpp @@ -198,6 +198,10 @@ QAction* openInNewWindowAction = menu.addAction(QIcon::fromTheme("window-new"), i18nc("@item:inmenu", "Open in New Window")); QAction* openInNewTabAction = menu.addAction(QIcon::fromTheme("tab-new"), i18nc("@item:inmenu", "Open in New Tab")); + QAction* propertiesAction = nullptr; + if (item->url().isLocalFile()) { + propertiesAction = menu.addAction(QIcon::fromTheme(QStringLiteral("document-properties")), i18nc("@action:inmenu", "Properties")); + } if (!isDevice && !isTrash) { menu.addSeparator(); } @@ -247,6 +251,8 @@ m_model->requestTearDown(index); } else if (action == ejectAction) { m_model->requestEject(index); + } else if (action == propertiesAction) { + m_model->requestProperties(index); } } }