gcc Pepega

This commit is contained in:
fourtf 2019-08-13 18:48:22 +02:00
parent 7bf5a79f8a
commit 4679fd6753
2 changed files with 61 additions and 59 deletions

View file

@ -3,8 +3,7 @@
#include <QObject>
#include <type_traits>
namespace chatterino
{
namespace chatterino {
/// Holds a pointer to a QObject and resets it to nullptr if the QObject
/// gets destroyed.
template <typename T>
@ -20,17 +19,18 @@ namespace chatterino
{
static_assert(std::is_base_of_v<QObject, T>);
this->swap(t);
this->set(t);
}
~QObjectRef()
{
this->swap(nullptr);
this->set(nullptr);
}
QObjectRef &operator=(T *t)
{
this->swap(t);
this->set(t);
return *this;
}
@ -49,7 +49,8 @@ namespace chatterino
return t_;
}
QObject* swap(T* other)
private:
void set(T *other)
{
// old
if (this->conn_)
@ -60,14 +61,14 @@ namespace chatterino
// new
if (other)
{
this->conn_ =
QObject::connect(other, &QObject::destroyed,
[this]() { this->swap(nullptr); });
[this](QObject *) { this->set(nullptr); });
}
return std::exchange(this->t_, other);
this->t_ = other;
}
private:
T *t_{};
QMetaObject::Connection conn_;
};

View file

@ -2,6 +2,7 @@
#include "util/QObjectRef.hpp"
#include "widgets/BaseWidget.hpp"
#include "widgets/dialogs/EmotePopup.hpp"
#include <QHBoxLayout>
#include <QLabel>