summaryrefslogtreecommitdiffstats
path: root/logic
diff options
context:
space:
mode:
Diffstat (limited to 'logic')
-rw-r--r--logic/QObjectPtr.h29
-rw-r--r--logic/forge/ForgeVersionList.cpp4
-rw-r--r--logic/net/NetAction.h2
-rw-r--r--logic/net/NetJob.h2
4 files changed, 27 insertions, 10 deletions
diff --git a/logic/QObjectPtr.h b/logic/QObjectPtr.h
index 32e59bd9..b81b3234 100644
--- a/logic/QObjectPtr.h
+++ b/logic/QObjectPtr.h
@@ -1,26 +1,43 @@
#pragma once
#include <memory>
+#include <QObject>
+
+namespace details
+{
+struct DeleteQObjectLater
+{
+ void operator()(QObject *obj) const
+ {
+ obj->deleteLater();
+ }
+};
+}
+/**
+ * A unique pointer class with unique pointer semantics intended for derivates of QObject
+ * Calls deleteLater() instead of destroying the contained object immediately
+ */
+template<typename T> using unique_qobject_ptr = std::unique_ptr<T, details::DeleteQObjectLater>;
/**
- * A pointer class with the usual shared pointer semantics intended for derivates of QObject
+ * A shared pointer class with shared pointer semantics intended for derivates of QObject
* Calls deleteLater() instead of destroying the contained object immediately
*/
template <typename T>
-class QObjectPtr
+class shared_qobject_ptr
{
public:
- QObjectPtr(){}
- QObjectPtr(T * wrap)
+ shared_qobject_ptr(){}
+ shared_qobject_ptr(T * wrap)
{
reset(wrap);
}
- QObjectPtr(const QObjectPtr<T>& other)
+ shared_qobject_ptr(const shared_qobject_ptr<T>& other)
{
m_ptr = other.m_ptr;
}
template<typename Derived>
- QObjectPtr(const QObjectPtr<Derived> &other)
+ shared_qobject_ptr(const shared_qobject_ptr<Derived> &other)
{
m_ptr = other.unwrap();
}
diff --git a/logic/forge/ForgeVersionList.cpp b/logic/forge/ForgeVersionList.cpp
index 7f2176fd..a05ced99 100644
--- a/logic/forge/ForgeVersionList.cpp
+++ b/logic/forge/ForgeVersionList.cpp
@@ -424,7 +424,7 @@ void ForgeListLoadTask::listDownloaded()
void ForgeListLoadTask::listFailed()
{
- auto reply = listDownload->m_reply;
+ auto &reply = listDownload->m_reply;
if (reply)
{
qCritical() << "Getting forge version list failed: " << reply->errorString();
@@ -437,7 +437,7 @@ void ForgeListLoadTask::listFailed()
void ForgeListLoadTask::gradleListFailed()
{
- auto reply = gradleListDownload->m_reply;
+ auto &reply = gradleListDownload->m_reply;
if (reply)
{
qCritical() << "Getting forge version list failed: " << reply->errorString();
diff --git a/logic/net/NetAction.h b/logic/net/NetAction.h
index faf4dbe0..1d7eb94b 100644
--- a/logic/net/NetAction.h
+++ b/logic/net/NetAction.h
@@ -61,7 +61,7 @@ public:
public:
/// the network reply
- QObjectPtr<QNetworkReply> m_reply;
+ unique_qobject_ptr<QNetworkReply> m_reply;
/// the content of the content-type header
QString m_content_type;
diff --git a/logic/net/NetJob.h b/logic/net/NetJob.h
index 85a8bf83..45f6dacf 100644
--- a/logic/net/NetJob.h
+++ b/logic/net/NetJob.h
@@ -27,7 +27,7 @@
#include "multimc_logic_export.h"
class NetJob;
-typedef QObjectPtr<NetJob> NetJobPtr;
+typedef shared_qobject_ptr<NetJob> NetJobPtr;
class MULTIMC_LOGIC_EXPORT NetJob : public Task
{