Delete emote popup when it is closed.

This commit is contained in:
fourtf
2019-08-13 16:39:22 +02:00
parent 18f3a816ed
commit 7bf5a79f8a
6 changed files with 83 additions and 5 deletions
+74
View File
@@ -0,0 +1,74 @@
#pragma once
#include <QObject>
#include <type_traits>
namespace chatterino
{
/// Holds a pointer to a QObject and resets it to nullptr if the QObject
/// gets destroyed.
template <typename T>
class QObjectRef
{
public:
QObjectRef()
{
static_assert(std::is_base_of_v<QObject, T>);
}
explicit QObjectRef(T* t)
{
static_assert(std::is_base_of_v<QObject, T>);
this->swap(t);
}
~QObjectRef()
{
this->swap(nullptr);
}
QObjectRef& operator=(T* t)
{
this->swap(t);
return *this;
}
operator bool()
{
return t_;
}
T* operator->()
{
return t_;
}
T* get()
{
return t_;
}
QObject* swap(T* other)
{
// old
if (this->conn_)
{
QObject::disconnect(this->conn_);
}
// new
if (other)
{
QObject::connect(other, &QObject::destroyed,
[this]() { this->swap(nullptr); });
}
return std::exchange(this->t_, other);
}
private:
T* t_{};
QMetaObject::Connection conn_;
};
} // namespace chatterino