mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-06 14:54:56 +01:00
Release NSGLView, fixes heap-use-after-free
This commit is contained in:
parent
2c01adbeb0
commit
4866baacf5
4 changed files with 21 additions and 1 deletions
|
|
@ -562,6 +562,16 @@ GtkCanvas::GtkCanvas ()
|
||||||
Gdk::KEY_PRESS_MASK | Gdk::KEY_RELEASE_MASK);
|
Gdk::KEY_PRESS_MASK | Gdk::KEY_RELEASE_MASK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GtkCanvas::~GtkCanvas ()
|
||||||
|
{
|
||||||
|
_in_dtor = true;
|
||||||
|
#ifdef __APPLE__
|
||||||
|
if (_nsglview) {
|
||||||
|
Gtkmm2ext::nsglview_destroy (_nsglview);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
GtkCanvas::set_single_exposure (bool yn)
|
GtkCanvas::set_single_exposure (bool yn)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -218,7 +218,7 @@ class LIBCANVAS_API GtkCanvas : public Canvas, public Gtk::EventBox, public Gtkm
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GtkCanvas ();
|
GtkCanvas ();
|
||||||
~GtkCanvas () { _in_dtor = true ; }
|
~GtkCanvas ();
|
||||||
|
|
||||||
void use_nsglview (bool retina = true);
|
void use_nsglview (bool retina = true);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,9 +26,11 @@ namespace Gtkmm2ext
|
||||||
class CairoCanvas;
|
class CairoCanvas;
|
||||||
|
|
||||||
void* nsglview_create (CairoCanvas*, bool use_backing_scale);
|
void* nsglview_create (CairoCanvas*, bool use_backing_scale);
|
||||||
|
void nsglview_destroy (void*);
|
||||||
void nsglview_overlay (void*, GdkWindow*);
|
void nsglview_overlay (void*, GdkWindow*);
|
||||||
void nsglview_resize (void*, int x, int y, int w, int h);
|
void nsglview_resize (void*, int x, int y, int w, int h);
|
||||||
void nsglview_queue_draw (void*, int x, int y, int w, int h);
|
void nsglview_queue_draw (void*, int x, int y, int w, int h);
|
||||||
void nsglview_set_visible (void*, bool);
|
void nsglview_set_visible (void*, bool);
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -396,6 +396,14 @@ Gtkmm2ext::nsglview_create (Gtkmm2ext::CairoCanvas* canvas, bool use_backing_sca
|
||||||
return gl_view;
|
return gl_view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Gtkmm2ext::nsglview_destroy (void* glv)
|
||||||
|
{
|
||||||
|
ArdourCanvasOpenGLView* gl_view = (ArdourCanvasOpenGLView*) glv;
|
||||||
|
[gl_view removeFromSuperview];
|
||||||
|
[gl_view release];
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Gtkmm2ext::nsglview_overlay (void* glv, GdkWindow* window)
|
Gtkmm2ext::nsglview_overlay (void* glv, GdkWindow* window)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue