Summary:
Fixes crash when hiding devices. The crash is caused by
KStandardItem::setDataValue which calls the
KStandardItemModel::onItemChanged function, and that function will
delete the KStandardItem if the data value being set is the hidden
attribute being set to true. To fix this KStandardItem now derives
QObject so that we can use deleteLater.
Test Plan:
Right click a device in the places panel and select hide
Right click the places panel and select show hidden
Right click the hidden device and select show
Right click the same device and select hide
BUG: 403064
Reviewers: #dolphin, elvisangelaccio
Reviewed By: #dolphin, elvisangelaccio
Subscribers: kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D21050
#include "kstandarditemmodel.h"
KStandardItem::KStandardItem(KStandardItem* parent) :
#include "kstandarditemmodel.h"
KStandardItem::KStandardItem(KStandardItem* parent) :
- m_parent(parent),
- m_children(),
m_model(nullptr),
m_data()
{
}
KStandardItem::KStandardItem(const QString& text, KStandardItem* parent) :
m_model(nullptr),
m_data()
{
}
KStandardItem::KStandardItem(const QString& text, KStandardItem* parent) :
- m_parent(parent),
- m_children(),
m_model(nullptr),
m_data()
{
m_model(nullptr),
m_data()
{
}
KStandardItem::KStandardItem(const QString& icon, const QString& text, KStandardItem* parent) :
}
KStandardItem::KStandardItem(const QString& icon, const QString& text, KStandardItem* parent) :
- m_parent(parent),
- m_children(),
m_model(nullptr),
m_data()
{
m_model(nullptr),
m_data()
{
-KStandardItem::KStandardItem(const KStandardItem& item) :
- m_parent(item.m_parent),
- m_children(item.m_children),
- m_model(item.m_model),
- m_data(item.m_data)
-{
-}
-
KStandardItem::~KStandardItem()
{
}
KStandardItem::~KStandardItem()
{
}
-void KStandardItem::setParent(KStandardItem* parent)
-{
- // TODO: not implemented yet
- m_parent = parent;
-}
-
-KStandardItem* KStandardItem::parent() const
-{
- return m_parent;
-}
-
void KStandardItem::setData(const QHash<QByteArray, QVariant>& values)
{
const QHash<QByteArray, QVariant> previous = m_data;
void KStandardItem::setData(const QHash<QByteArray, QVariant>& values)
{
const QHash<QByteArray, QVariant> previous = m_data;
-QList<KStandardItem*> KStandardItem::children() const
-{
- return m_children;
-}
-
void KStandardItem::onDataValueChanged(const QByteArray& role,
const QVariant& current,
const QVariant& previous)
void KStandardItem::onDataValueChanged(const QByteArray& role,
const QVariant& current,
const QVariant& previous)
#include <QByteArray>
#include <QHash>
#include <QByteArray>
#include <QHash>
#include <QVariant>
class KStandardItemModel;
#include <QVariant>
class KStandardItemModel;
* used roles. It is possible to assign values for custom
* roles by using setDataValue().
*/
* used roles. It is possible to assign values for custom
* roles by using setDataValue().
*/
-class DOLPHIN_EXPORT KStandardItem
+class DOLPHIN_EXPORT KStandardItem : public QObject
public:
explicit KStandardItem(KStandardItem* parent = nullptr);
explicit KStandardItem(const QString& text, KStandardItem* parent = nullptr);
KStandardItem(const QString& icon, const QString& text, KStandardItem* parent = nullptr);
public:
explicit KStandardItem(KStandardItem* parent = nullptr);
explicit KStandardItem(const QString& text, KStandardItem* parent = nullptr);
KStandardItem(const QString& icon, const QString& text, KStandardItem* parent = nullptr);
- KStandardItem(const KStandardItem& item);
virtual ~KStandardItem();
/**
virtual ~KStandardItem();
/**
void setDataValue(const QByteArray& role, const QVariant& value);
QVariant dataValue(const QByteArray& role) const;
void setDataValue(const QByteArray& role, const QVariant& value);
QVariant dataValue(const QByteArray& role) const;
- void setParent(KStandardItem* parent);
- KStandardItem* parent() const;
-
void setData(const QHash<QByteArray, QVariant>& values);
QHash<QByteArray, QVariant> data() const;
void setData(const QHash<QByteArray, QVariant>& values);
QHash<QByteArray, QVariant> data() const;
- QList<KStandardItem*> children() const;
-
protected:
virtual void onDataValueChanged(const QByteArray& role,
const QVariant& current,
protected:
virtual void onDataValueChanged(const QByteArray& role,
const QVariant& current,
const QHash<QByteArray, QVariant>& previous);
private:
const QHash<QByteArray, QVariant>& previous);
private:
- KStandardItem* m_parent;
- QList<KStandardItem*> m_children;
KStandardItemModel* m_model;
QHash<QByteArray, QVariant> m_data;
KStandardItemModel* m_model;
QHash<QByteArray, QVariant> m_data;
onItemRemoved(index, item);
onItemRemoved(index, item);
item = nullptr;
emit itemsRemoved(KItemRangeList() << KItemRange(index, 1));
item = nullptr;
emit itemsRemoved(KItemRangeList() << KItemRange(index, 1));