diff --git a/klipper/historyimageitem.h b/klipper/historyimageitem.h index 7ae1710b2..f6afa5d41 100644 --- a/klipper/historyimageitem.h +++ b/klipper/historyimageitem.h @@ -18,6 +18,12 @@ public: ~HistoryImageItem() override { } + + HistoryItemType type() const override + { + return HistoryItemType::Image; + } + QString text() const override; bool operator==(const HistoryItem &rhs) const override { diff --git a/klipper/historyitem.h b/klipper/historyitem.h index cd0667685..1de984e37 100644 --- a/klipper/historyitem.h +++ b/klipper/historyitem.h @@ -15,6 +15,13 @@ class QDataStream; class HistoryItem; typedef QSharedPointer HistoryItemPtr; typedef QSharedPointer HistoryItemConstPtr; + +enum class HistoryItemType { + Text, + Image, + Url, +}; + /** * An entry in the clipboard history. */ @@ -24,6 +31,11 @@ public: explicit HistoryItem(const QByteArray &uuid); virtual ~HistoryItem(); + /** + * Returns the item type. + */ + virtual HistoryItemType type() const = 0; + /** * Return the current item as text * An image would be returned as a descriptive @@ -112,3 +124,4 @@ inline QDataStream &operator<<(QDataStream &lhs, HistoryItem const *const rhs) Q_DECLARE_METATYPE(HistoryItem *) Q_DECLARE_METATYPE(HistoryItemPtr) Q_DECLARE_METATYPE(HistoryItemConstPtr) +Q_DECLARE_METATYPE(HistoryItemType) diff --git a/klipper/historymodel.cpp b/klipper/historymodel.cpp index ecf33507c..d4bfeaf83 100644 --- a/klipper/historymodel.cpp +++ b/klipper/historymodel.cpp @@ -56,14 +56,6 @@ QVariant HistoryModel::data(const QModelIndex &index, int role) const } QSharedPointer item = m_items.at(index.row()); - HistoryItemType type = HistoryItemType::Text; - if (dynamic_cast(item.data())) { - type = HistoryItemType::Text; - } else if (dynamic_cast(item.data())) { - type = HistoryItemType::Image; - } else if (dynamic_cast(item.data())) { - type = HistoryItemType::Url; - } switch (role) { case Qt::DisplayRole: @@ -75,11 +67,11 @@ QVariant HistoryModel::data(const QModelIndex &index, int role) const case UuidRole: return item->uuid(); case TypeRole: - return QVariant::fromValue(type); + return QVariant::fromValue(item->type()); case Base64UuidRole: return item->uuid().toBase64(); case TypeIntRole: - return int(type); + return int(item->type()); } return QVariant(); } diff --git a/klipper/historymodel.h b/klipper/historymodel.h index 2344c9d63..1f588249e 100644 --- a/klipper/historymodel.h +++ b/klipper/historymodel.h @@ -10,12 +10,6 @@ class HistoryItem; -enum class HistoryItemType { - Text, - Image, - Url, -}; - class HistoryModel : public QAbstractListModel { Q_OBJECT @@ -80,5 +74,3 @@ inline void HistoryModel::setDisplayImages(bool show) { m_displayImages = show; } - -Q_DECLARE_METATYPE(HistoryItemType) diff --git a/klipper/historystringitem.h b/klipper/historystringitem.h index 2336ab530..b9c136089 100644 --- a/klipper/historystringitem.h +++ b/klipper/historystringitem.h @@ -19,6 +19,12 @@ public: ~HistoryStringItem() override { } + + HistoryItemType type() const override + { + return HistoryItemType::Text; + } + QString text() const override; bool operator==(const HistoryItem &rhs) const override { diff --git a/klipper/historyurlitem.h b/klipper/historyurlitem.h index 409c35cfc..89aa86ee6 100644 --- a/klipper/historyurlitem.h +++ b/klipper/historyurlitem.h @@ -16,6 +16,12 @@ class HistoryURLItem : public HistoryItem { public: HistoryURLItem(const QList &urls, const KUrlMimeData::MetaDataMap &metaData, bool cut); + + HistoryItemType type() const override + { + return HistoryItemType::Url; + } + QString text() const override; bool operator==(const HistoryItem &rhs) const override; QMimeData *mimeData() const override; diff --git a/klipper/klipper.cpp b/klipper/klipper.cpp index 0635e05d5..af5bca6cb 100644 --- a/klipper/klipper.cpp +++ b/klipper/klipper.cpp @@ -605,7 +605,7 @@ HistoryItemPtr Klipper::applyClipChanges(const QMimeData *clipData) Ignore lock(m_locklevel); if (!(history()->empty())) { - if (m_bIgnoreImages && history()->first()->mimeData()->hasImage()) { + if (m_bIgnoreImages && history()->first()->type() == HistoryItemType::Image) { history()->remove(history()->first()); } }