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,34 +3,34 @@
#include <QObject> #include <QObject>
#include <type_traits> #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>
class QObjectRef
{ {
/// Holds a pointer to a QObject and resets it to nullptr if the QObject public:
/// gets destroyed.
template <typename T>
class QObjectRef
{
public:
QObjectRef() QObjectRef()
{ {
static_assert(std::is_base_of_v<QObject, T>); static_assert(std::is_base_of_v<QObject, T>);
} }
explicit QObjectRef(T* t) explicit QObjectRef(T *t)
{ {
static_assert(std::is_base_of_v<QObject, T>); static_assert(std::is_base_of_v<QObject, T>);
this->swap(t); this->set(t);
} }
~QObjectRef() ~QObjectRef()
{ {
this->swap(nullptr); this->set(nullptr);
} }
QObjectRef& operator=(T* t) QObjectRef &operator=(T *t)
{ {
this->swap(t); this->set(t);
return *this; return *this;
} }
@ -39,17 +39,18 @@ namespace chatterino
return t_; return t_;
} }
T* operator->() T *operator->()
{ {
return t_; return t_;
} }
T* get() T *get()
{ {
return t_; return t_;
} }
QObject* swap(T* other) private:
void set(T *other)
{ {
// old // old
if (this->conn_) if (this->conn_)
@ -60,15 +61,15 @@ namespace chatterino
// new // new
if (other) if (other)
{ {
this->conn_ =
QObject::connect(other, &QObject::destroyed, 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_{};
T* t_{};
QMetaObject::Connection conn_; QMetaObject::Connection conn_;
}; };
} // namespace chatterino } // namespace chatterino

View file

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