Unless QFileDialog does some magic in addToolButton() we have a memory 
leak here. Can some Qt expert please tell whether this patch is OK?


Georg
Index: src/frontends/qt3/FileDialog_private.h
===================================================================
--- src/frontends/qt3/FileDialog_private.h	(Revision 13893)
+++ src/frontends/qt3/FileDialog_private.h	(Arbeitskopie)
@@ -14,6 +14,9 @@
 
 
 #include "frontends/FileDialog.h"
+
+#include <boost/noncopyable.hpp>
+
 #include <qfiledialog.h>
 
 namespace lyx {
@@ -27,7 +30,7 @@ class FileFilterList;
 
 class QToolButton;
 
-class LyXFileDialog : public QFileDialog
+class LyXFileDialog : public QFileDialog, boost::noncopyable
 {
 	Q_OBJECT
 public:
@@ -36,6 +39,7 @@ public:
 		      std::string const & title,
 		      FileDialog::Button const & b1,
 		      FileDialog::Button const & b2);
+	~LyXFileDialog();
 public slots:
 	void buttonClicked();
 private:
Index: src/frontends/qt3/FileDialog_private.C
===================================================================
--- src/frontends/qt3/FileDialog_private.C	(Revision 13893)
+++ src/frontends/qt3/FileDialog_private.C	(Arbeitskopie)
@@ -71,6 +71,15 @@ LyXFileDialog::LyXFileDialog(string cons
 }
 
 
+LyXFileDialog::~LyXFileDialog()
+{
+	if (b1_)
+		delete b1_;
+	if (b2_)
+		delete b2_;
+}
+
+
 void LyXFileDialog::buttonClicked()
 {
 	if (sender() == b1_)
Index: src/frontends/qt4/FileDialog_private.h
===================================================================
--- src/frontends/qt4/FileDialog_private.h	(Revision 13893)
+++ src/frontends/qt4/FileDialog_private.h	(Arbeitskopie)
@@ -14,6 +14,9 @@
 
 
 #include "frontends/FileDialog.h"
+
+#include <boost/noncopyable.hpp>
+
 #include <QFileDialog>
 
 namespace lyx {
@@ -27,7 +30,7 @@ class FileFilterList;
 
 class QToolButton;
 
-class LyXFileDialog : public QFileDialog
+class LyXFileDialog : public QFileDialog, boost::noncopyable
 {
 	Q_OBJECT
 public:
@@ -36,6 +39,7 @@ public:
 		      lyx::support::FileFilterList const & filters,
 		      FileDialog::Button const & b1,
 		      FileDialog::Button const & b2);
+	~LyXFileDialog();
 public slots:
 	void buttonClicked();
 private:
Index: src/frontends/qt4/FileDialog_private.C
===================================================================
--- src/frontends/qt4/FileDialog_private.C	(Revision 13893)
+++ src/frontends/qt4/FileDialog_private.C	(Arbeitskopie)
@@ -74,6 +74,15 @@ LyXFileDialog::LyXFileDialog(string cons
 }
 
 
+LyXFileDialog::~LyXFileDialog()
+{
+	if (b1_)
+		delete b1_;
+	if (b2_)
+		delete b2_;
+}
+
+
 void LyXFileDialog::buttonClicked()
 {
 	if (sender() == b1_)

Reply via email to