Fix crash when closing windows via the X title bar button

On OSX clicking the X title bar button immediately destroys "all" native
windows (after sending a close event) which causes
[NSSurface _disposeSurface] to crash if invoked while GL is using
the surface
This commit is contained in:
Palana 2014-04-17 17:18:51 +02:00
parent 9894bb4357
commit d56432304e
3 changed files with 21 additions and 2 deletions

View file

@ -539,8 +539,13 @@ void OBSBasic::ResizePreview(uint32_t cx, uint32_t cy)
void OBSBasic::closeEvent(QCloseEvent *event)
{
/* TODO */
UNUSED_PARAMETER(event);
QWidget::closeEvent(event);
if (!event->isAccepted())
return;
// remove draw callback in case our drawable surfaces go away before
// the destructor gets called
obs_remove_draw_callback(OBSBasic::RenderMain, this);
}
void OBSBasic::changeEvent(QEvent *event)

View file

@ -21,6 +21,7 @@
#include "qt-wrappers.hpp"
#include "display-helpers.hpp"
#include <QCloseEvent>
#include <QScreen>
#include <QWindow>
@ -109,6 +110,18 @@ void OBSBasicProperties::timerEvent(QTimerEvent *event)
}
}
void OBSBasicProperties::closeEvent(QCloseEvent *event)
{
QDialog::closeEvent(event);
if (!event->isAccepted())
return;
// remove draw callback in case our drawable surfaces go away before
// the destructor gets called
obs_display_remove_draw_callback(display,
OBSBasicProperties::DrawPreview, this);
}
void OBSBasicProperties::Init()
{
gs_init_data init_data = {};

View file

@ -52,4 +52,5 @@ public:
protected:
virtual void resizeEvent(QResizeEvent *event) override;
virtual void timerEvent(QTimerEvent *event) override;
virtual void closeEvent(QCloseEvent *event) override;
};