+void PlacesItem::setUrl(const QUrl &url)
+{
+ // The default check in KStandardItem::setDataValue()
+ // for equal values does not work with a custom value
+ // like QUrl. Hence do a manual check to prevent that
+ // setting an equal URL results in an itemsChanged()
+ // signal.
+ if (dataValue("url").toUrl() != url) {
+ delete m_trashDirLister;
+ if (url.scheme() == QLatin1String("trash")) {
+ // The trash icon must always be updated dependent on whether
+ // the trash is empty or not. We use a KDirLister that automatically
+ // watches for changes if the number of items has been changed.
+ // The update of the icon is handled in onTrashDirListerCompleted().
+ m_trashDirLister = new KDirLister();
+ m_trashDirLister->setAutoErrorHandlingEnabled(false, 0);
+ m_trashDirLister->setDelayedMimeTypes(true);
+ QObject::connect(m_trashDirLister.data(), static_cast<void(KDirLister::*)()>(&KDirLister::completed),
+ m_signalHandler.data(), &PlacesItemSignalHandler::onTrashDirListerCompleted);
+ m_trashDirLister->openUrl(url);
+ }
+
+ setDataValue("url", url);
+ }
+}
+
+QUrl PlacesItem::url() const
+{
+ return dataValue("url").toUrl();
+}
+
+void PlacesItem::setUdi(const QString& udi)
+{
+ setDataValue("udi", udi);
+}
+
+QString PlacesItem::udi() const
+{
+ return dataValue("udi").toString();
+}
+
+void PlacesItem::setHidden(bool hidden)
+{
+ setDataValue("isHidden", hidden);
+}
+
+bool PlacesItem::isHidden() const
+{
+ return dataValue("isHidden").toBool();
+}
+
+void PlacesItem::setSystemItem(bool isSystemItem)
+{
+ setDataValue("isSystemItem", isSystemItem);
+}
+
+bool PlacesItem::isSystemItem() const
+{
+ return dataValue("isSystemItem").toBool();
+}
+
+Solid::Device PlacesItem::device() const
+{
+ return m_device;
+}
+
+void PlacesItem::setBookmark(const KBookmark& bookmark)
+{
+ if (bookmark == m_bookmark) {
+ return;
+ }
+
+ m_bookmark = bookmark;
+
+ delete m_access;
+ delete m_volume;
+ delete m_disc;
+ delete m_mtp;
+
+
+ const QString udi = bookmark.metaDataItem(QStringLiteral("UDI"));