diff --git a/obs/window-basic-interaction.cpp b/obs/window-basic-interaction.cpp
index 9cf5499d224da8120c0707f6ae5bf601da656626..d5528926b9241524a51c3d65e79611e3bcfc30be 100644
--- a/obs/window-basic-interaction.cpp
+++ b/obs/window-basic-interaction.cpp
@@ -34,7 +34,8 @@ OBSBasicInteraction::OBSBasicInteraction(QWidget *parent, OBSSource source_)
 	  ui            (new Ui::OBSBasicInteraction),
 	  source        (source_),
 	  removedSignal (obs_source_get_signal_handler(source), "remove",
-	                 OBSBasicInteraction::SourceRemoved, this)
+	                 OBSBasicInteraction::SourceRemoved, this),
+	  eventFilter   (BuildEventFilter())
 {
 	int cx = (int)config_get_int(App()->GlobalConfig(), "InteractionWindow",
 			"cx");
@@ -45,8 +46,7 @@ OBSBasicInteraction::OBSBasicInteraction(QWidget *parent, OBSSource source_)
 
 	ui->preview->setMouseTracking(true);
 	ui->preview->setFocusPolicy(Qt::StrongFocus);
-	eventFilter = BuildEventFilter();
-	ui->preview->installEventFilter(eventFilter);
+	ui->preview->installEventFilter(eventFilter.get());
 
 	if (cx > 400 && cy > 400)
 		resize(cx, cy);
@@ -68,8 +68,7 @@ OBSBasicInteraction::~OBSBasicInteraction()
 {
 	// since QT fakes a mouse movement while destructing a widget
 	// remove our event filter
-	ui->preview->removeEventFilter(eventFilter);
-	delete eventFilter;
+	ui->preview->removeEventFilter(eventFilter.get());
 }
 
 OBSEventFilter *OBSBasicInteraction::BuildEventFilter()
diff --git a/obs/window-basic-interaction.hpp b/obs/window-basic-interaction.hpp
index 7f358e64b59c6fb2305d1677be0ca8d75f141be6..4c8e3c208c45d0d57cfd7fb167421a287cc766ad 100644
--- a/obs/window-basic-interaction.hpp
+++ b/obs/window-basic-interaction.hpp
@@ -42,7 +42,7 @@ private:
 	OBSSource  source;
 	OBSDisplay display;
 	OBSSignal  removedSignal;
-	OBSEventFilter *eventFilter;
+	std::unique_ptr<OBSEventFilter> eventFilter;
 
 	static void SourceRemoved(void *data, calldata_t params);
 	static void DrawPreview(void *data, uint32_t cx, uint32_t cy);