ubuntu-touch-coreapps-reviewers team mailing list archive
-
ubuntu-touch-coreapps-reviewers team
-
Mailing list archive
-
Message #10119
[Merge] lp:~renatofilho/ubuntu-filemanager-app/fix-network-crash into lp:ubuntu-filemanager-app
Renato Araujo Oliveira Filho has proposed merging lp:~renatofilho/ubuntu-filemanager-app/fix-network-crash into lp:ubuntu-filemanager-app.
Requested reviews:
Ubuntu File Manager Developers (ubuntu-filemanager-dev)
Related bugs:
Bug #1609051 in Ubuntu File Manager App: "File Manager crashes when Network is selected"
https://bugs.launchpad.net/ubuntu-filemanager-app/+bug/1609051
For more details, see:
https://code.launchpad.net/~renatofilho/ubuntu-filemanager-app/fix-network-crash/+merge/314870
--
Your team Ubuntu File Manager Developers is requested to review the proposed merge of lp:~renatofilho/ubuntu-filemanager-app/fix-network-crash into lp:ubuntu-filemanager-app.
=== modified file 'src/plugin/folderlistmodel/diriteminfo.cpp'
--- src/plugin/folderlistmodel/diriteminfo.cpp 2015-12-12 12:30:47 +0000
+++ src/plugin/folderlistmodel/diriteminfo.cpp 2017-01-16 19:31:06 +0000
@@ -23,6 +23,8 @@
#include "locationurl.h"
#include <sys/types.h>
#include <sys/stat.h>
+#include <QMetaMethod>
+#include <QDebug>
QMimeDatabase DirItemInfoPrivate::mimeDatabase;
@@ -151,6 +153,15 @@
DirItemInfo::~DirItemInfo()
{
+ qDebug() << "Destroing" << (void*) this;
+ Q_FOREACH(const DestructionSlot &slot, d_ptr->_destructionSlots) {
+ if (slot.first) {
+ qDebug() << "Notify" << slot.first << slot.second;
+ const QMetaObject *mObject = slot.first->metaObject();
+ QMetaMethod method = mObject->method(slot.second);
+ method.invoke(slot.first.data(), Qt::DirectConnection);
+ }
+ }
}
@@ -602,3 +613,14 @@
{
d_ptr->_isNetworkShare = true;
}
+
+void DirItemInfo::connectDestructionSignal(QObject *obj, const QByteArray &slot)
+{
+ int index = obj->metaObject()->indexOfSlot(slot.constData()+1);
+ if (index == -1) {
+ qWarning() << "Object" << obj << "does not has slot named:" << slot;
+ } else {
+ qDebug() << "Will register destruction signal" << obj << slot;
+ d_ptr->_destructionSlots.append(qMakePair(QPointer<QObject>(obj), index));
+ }
+}
=== modified file 'src/plugin/folderlistmodel/diriteminfo.h'
--- src/plugin/folderlistmodel/diriteminfo.h 2015-12-12 12:30:47 +0000
+++ src/plugin/folderlistmodel/diriteminfo.h 2017-01-16 19:31:06 +0000
@@ -30,6 +30,9 @@
#include <QDir>
#include <QMimeType>
#include <QMimeDatabase>
+#include <QPair>
+#include <QPointer>
+#include <QByteArray>
class DirItemInfoPrivate;
@@ -114,6 +117,7 @@
void fillFromStatBuf(const struct stat& statBuffer);
void setAsHost();
void setAsShare();
+ void connectDestructionSignal(QObject *obj, const QByteArray &slot);
public:
static QString removeExtraSlashes(const QString &url, int firstSlashIndex = -1);
@@ -134,6 +138,7 @@
};
typedef QVector<DirItemInfo> DirItemInfoList;
+typedef QPair<QPointer<QObject>, int> DestructionSlot;
Q_DECLARE_SHARED(DirItemInfo)
Q_DECLARE_METATYPE(DirItemInfo)
@@ -180,6 +185,8 @@
QString _normalizedPath;
QString _authenticationPath;
+ QVector<DestructionSlot> _destructionSlots;
+
static QMimeDatabase mimeDatabase;
};
=== modified file 'src/plugin/folderlistmodel/location.h'
--- src/plugin/folderlistmodel/location.h 2015-12-12 13:59:49 +0000
+++ src/plugin/folderlistmodel/location.h 2017-01-16 19:31:06 +0000
@@ -91,6 +91,9 @@
virtual void setAuthentication(const QString& user,
const QString& password);
+private slots:
+ void onParentDestroyed();
+
public: //pure functions
/*!
=== modified file 'src/plugin/folderlistmodel/networklistworker.cpp'
--- src/plugin/folderlistmodel/networklistworker.cpp 2015-12-12 14:32:18 +0000
+++ src/plugin/folderlistmodel/networklistworker.cpp 2017-01-16 19:31:06 +0000
@@ -23,8 +23,10 @@
#include "locationitemdiriterator.h"
#include "locationurl.h"
+#include <QDebug>
+
NetworkListWorker::NetworkListWorker(LocationItemDirIterator * dirIterator,
- DirItemInfo * mainItemInfo, const DirItemInfo *parent) :
+ DirItemInfo * mainItemInfo, DirItemInfo *parent) :
DirListWorker(dirIterator->path(),
dirIterator->filters(),
dirIterator->flags() == QDirIterator::Subdirectories ? true : false),
@@ -33,6 +35,7 @@
m_parent(parent)
{
mLoaderType = NetworkLoader;
+ parent->connectDestructionSignal(this, SLOT(onParentDestroyed()));
}
@@ -42,6 +45,12 @@
delete m_mainItemInfo;
}
+void NetworkListWorker::onParentDestroyed()
+{
+ qDebug() << "Parent destroiedddddd";
+ m_parent = 0;
+}
+
DirItemInfoList NetworkListWorker::getNetworkContent()
{
=== modified file 'src/plugin/folderlistmodel/networklistworker.h'
--- src/plugin/folderlistmodel/networklistworker.h 2015-12-12 14:32:18 +0000
+++ src/plugin/folderlistmodel/networklistworker.h 2017-01-16 19:31:06 +0000
@@ -40,11 +40,15 @@
public:
NetworkListWorker(LocationItemDirIterator * dirIterator,
DirItemInfo * mainItemInfo,
- const DirItemInfo * parent = 0);
+ DirItemInfo * parent = 0);
~NetworkListWorker();
+public slots:
+ void onParentDestroyed();
+
protected:
virtual DirItemInfoList getNetworkContent();
void setSmbItemAttributes();
+
protected:
LocationItemDirIterator * m_dirIterator;
DirItemInfo * m_mainItemInfo;
References