From 81c26b4dd3c3d11471bacfe7a4a83d2a8edac751 Mon Sep 17 00:00:00 2001
From: Chris Xiong <chirs241097@gmail.com>
Date: Mon, 2 Dec 2019 11:55:52 +0800
Subject: No more creepy blank action buttons that cause crashes if clicked.

If a plugin has been removed and the toolbar is reconfigured afterwards,
a blank button will appear in the toolbar, which will cause a crash when
clicked.
---
 qmidiplayer-desktop/qmpcustomizewindow.cpp | 1 +
 qmidiplayer-desktop/qmpmainwindow.cpp      | 5 ++---
 qmidiplayer-desktop/qmpmainwindow.hpp      | 6 +++---
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/qmidiplayer-desktop/qmpcustomizewindow.cpp b/qmidiplayer-desktop/qmpcustomizewindow.cpp
index b7017b7..a2ff19c 100644
--- a/qmidiplayer-desktop/qmpcustomizewindow.cpp
+++ b/qmidiplayer-desktop/qmpcustomizewindow.cpp
@@ -44,6 +44,7 @@ void qmpCustomizeWindow::launch(int w)
 	std::set<std::string> s;
 	for(auto i=v.begin();i!=v.end();++i)
 	{
+		if(m.find(*i)==m.end())continue;
 		s.insert(*i);
 		QListWidgetItem* it=new QListWidgetItem(
 			m[*i].icon(),
diff --git a/qmidiplayer-desktop/qmpmainwindow.cpp b/qmidiplayer-desktop/qmpmainwindow.cpp
index 1715539..1df2d8e 100644
--- a/qmidiplayer-desktop/qmpmainwindow.cpp
+++ b/qmidiplayer-desktop/qmpmainwindow.cpp
@@ -625,10 +625,9 @@ void qmpMainWindow::setupWidget()
 	i->second.setAssignedControl((QReflectiveAction*)nullptr),
 	i->second.setAssignedControl((QReflectivePushButton*)nullptr);
 	QList<QWidget*>w=ui->buttonwidget->findChildren<QWidget*>("",Qt::FindDirectChildrenOnly);
-	for(unsigned i=0;i<w.size();++i)
-	delete w[i];
+	qDeleteAll(w);
 	QList<QAction*>a=ui->lbFileName->actions();
-	for(unsigned i=0;i<a.size();++i)
+	for(int i=0;i<a.size();++i)
 	{
 		ui->lbFileName->removeAction(a[i]);
 		delete a[i];
diff --git a/qmidiplayer-desktop/qmpmainwindow.hpp b/qmidiplayer-desktop/qmpmainwindow.hpp
index ea5209c..c8f3827 100644
--- a/qmidiplayer-desktop/qmpmainwindow.hpp
+++ b/qmidiplayer-desktop/qmpmainwindow.hpp
@@ -86,12 +86,12 @@ class QReflectivePushButton:public QPushButton
 class qmpFuncPrivate
 {
 	private:
-		qmpFuncBaseIntf* _i;
+		qmpFuncBaseIntf* _i=nullptr;
 		QIcon _icon;
 		std::string des;
 		bool _checkable,checked;
-		QReflectiveAction* asgna;
-		QReflectivePushButton* asgnb;
+		QReflectiveAction* asgna=nullptr;
+		QReflectivePushButton* asgnb=nullptr;
 	public:
 		qmpFuncPrivate(){}
 		qmpFuncPrivate(qmpFuncBaseIntf* i,std::string _desc,const char* icon,int iconlen,bool checkable);
-- 
cgit v1.2.3