diff --git a/src/partition.cpp b/src/partition.cpp index 3b5080d..8f8f289 100644 --- a/src/partition.cpp +++ b/src/partition.cpp @@ -86,6 +86,11 @@ bool Partition::mountFailed() const return d && d->mountFailed; } +bool Partition::isCryptoDevice() const +{ + return d ? d->isCryptoDevice : false; +} + Partition::StorageType Partition::storageType() const { return d ? d->storageType : Invalid; diff --git a/src/partition.h b/src/partition.h index 79c3190..42850cd 100644 --- a/src/partition.h +++ b/src/partition.h @@ -103,6 +103,7 @@ class SYSTEMSETTINGS_EXPORT Partition bool canMount() const; bool mountFailed() const; + bool isCryptoDevice() const; StorageType storageType() const; diff --git a/src/partition_p.h b/src/partition_p.h index c84d0af..c8c1ec5 100644 --- a/src/partition_p.h +++ b/src/partition_p.h @@ -48,6 +48,7 @@ class PartitionPrivate : public QSharedData , status(Partition::Unmounted) , readOnly(true) , canMount(false) + , isCryptoDevice(false) , mountFailed(false) , deviceRoot(false) , valid(false) @@ -74,6 +75,7 @@ class PartitionPrivate : public QSharedData Partition::Status status; bool readOnly; bool canMount; + bool isCryptoDevice; bool mountFailed; bool deviceRoot; // If valid, only mount status and available bytes will be checked diff --git a/src/partitionmodel.cpp b/src/partitionmodel.cpp index 7f222fa..e148e1e 100644 --- a/src/partitionmodel.cpp +++ b/src/partitionmodel.cpp @@ -267,7 +267,8 @@ QHash PartitionModel::roleNames() const { BytesAvailableRole, "bytesAvailable" }, { BytesTotalRole, "bytesTotal" }, { BytesFreeRole, "bytesFree" }, - { PartitionModelRole, "partitionModel" } + { PartitionModelRole, "partitionModel" }, + { IsCryptoDeviceRoles, "isCryptoDevice"}, }; return roleNames; @@ -314,6 +315,8 @@ QVariant PartitionModel::data(const QModelIndex &index, int role) const return partition.bytesFree(); case PartitionModelRole: return QVariant::fromValue(static_cast(const_cast((this)))); + case IsCryptoDeviceRoles: + return partition.isCryptoDevice(); default: return QVariant(); } diff --git a/src/partitionmodel.h b/src/partitionmodel.h index fee3723..c1d006a 100644 --- a/src/partitionmodel.h +++ b/src/partitionmodel.h @@ -61,7 +61,8 @@ class SYSTEMSETTINGS_EXPORT PartitionModel : public QAbstractListModel BytesAvailableRole, BytesTotalRole, BytesFreeRole, - PartitionModelRole + PartitionModelRole, + IsCryptoDeviceRoles, }; // For Status role diff --git a/src/udisks2monitor.cpp b/src/udisks2monitor.cpp index fd3917c..9799a2a 100644 --- a/src/udisks2monitor.cpp +++ b/src/udisks2monitor.cpp @@ -291,6 +291,7 @@ void UDisks2::Monitor::setPartitionProperties(QExplicitlySharedDataPointercanMount = blockDevice->isMountable() && m_manager->supportedFileSystems().contains(partition->filesystemType); partition->status = blockDevice->isEncrypted() ? Partition::Locked : blockDevice->mountPath().isEmpty() ? Partition::Unmounted : Partition::Mounted; + partition->isCryptoDevice = blockDevice->isEncrypted() || blockDevice->hasCryptoBackingDevice(); } void UDisks2::Monitor::updatePartitionProperties(const UDisks2::Block *blockDevice)