From 78fecef02d269554ab286e6ebfd2568f968d00ae Mon Sep 17 00:00:00 2001
From: Nicolas Pope <nwpope@utu.fi>
Date: Sun, 26 Jul 2020 09:58:20 +0300
Subject: [PATCH] Fix add source dispose bug

---
 applications/gui2/src/modules/addsource.cpp | 9 +++++++--
 applications/gui2/src/modules/addsource.hpp | 1 +
 applications/gui2/src/views/addsource.cpp   | 5 +++--
 3 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/applications/gui2/src/modules/addsource.cpp b/applications/gui2/src/modules/addsource.cpp
index 166d76a91..89eef76af 100644
--- a/applications/gui2/src/modules/addsource.cpp
+++ b/applications/gui2/src/modules/addsource.cpp
@@ -13,14 +13,19 @@ void AddCtrl::init() {
 }
 
 void AddCtrl::show() {
-	if (screen->childIndex(window) == -1) {
+	if (!window || screen->childIndex(window) == -1) {
 		window = new ftl::gui2::AddSourceWindow(screen, this);
 	}
-	window->requestFocus();
 	window->setVisible(true);
+	window->requestFocus();
 	screen->performLayout();
 }
 
+void AddCtrl::disposeWindow() {
+	window->dispose();
+	window = nullptr;
+}
+
 ftl::Configurable *AddCtrl::add(const std::string &uri) {
 	try {
 		if (io->feed()->sourceActive(uri)) {
diff --git a/applications/gui2/src/modules/addsource.hpp b/applications/gui2/src/modules/addsource.hpp
index b76daad9b..eab8fef9d 100644
--- a/applications/gui2/src/modules/addsource.hpp
+++ b/applications/gui2/src/modules/addsource.hpp
@@ -18,6 +18,7 @@ public:
 
 	virtual void init() override;
 	virtual void show();
+	void disposeWindow();
 
 	ftl::Configurable *add(const std::string &uri);
 
diff --git a/applications/gui2/src/views/addsource.cpp b/applications/gui2/src/views/addsource.cpp
index 362eb2a4f..e698d2dcd 100644
--- a/applications/gui2/src/views/addsource.cpp
+++ b/applications/gui2/src/views/addsource.cpp
@@ -32,7 +32,7 @@ AddSourceWindow::AddSourceWindow(nanogui::Widget* parent, AddCtrl *ctrl) :
 	auto close = new nanogui::Button(buttonPanel(), "", ENTYPO_ICON_CROSS);
 	close->setTheme(dynamic_cast<ftl::gui2::Screen*>(screen())->getTheme("window_dark"));
 	close->setBackgroundColor(theme()->mWindowHeaderGradientBot);
-	close->setCallback([this](){ dispose();});
+	close->setCallback([this](){ this->close();});
 
 	rebuild();
 
@@ -267,7 +267,8 @@ void AddSourceWindow::rebuild() {
 
 void AddSourceWindow::close() {
 	setVisible(false);
-	dispose();
+	//dispose();
+	ctrl_->disposeWindow();
 }
 
 void AddSourceWindow::draw(NVGcontext *ctx) {
-- 
GitLab