Fix potential memory leak: According to the docs, setModel() creates and sets a new SelectionModel, so we need to remember and delete the "old" SelectionModel.

This commit is contained in:
LoRd_MuldeR 2012-04-06 16:15:19 +02:00
parent 3b2892b2fd
commit d16a116a1d
4 changed files with 444 additions and 452 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -30,7 +30,7 @@
#define VER_LAMEXP_MINOR_LO 4 #define VER_LAMEXP_MINOR_LO 4
#define VER_LAMEXP_TYPE Beta #define VER_LAMEXP_TYPE Beta
#define VER_LAMEXP_PATCH 13 #define VER_LAMEXP_PATCH 13
#define VER_LAMEXP_BUILD 954 #define VER_LAMEXP_BUILD 955
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// Tool versions (minimum expected versions!) // Tool versions (minimum expected versions!)

View File

@ -78,6 +78,7 @@
#define TEMP_HIDE_DROPBOX(CMD) { bool __dropBoxVisible = m_dropBox->isVisible(); if(__dropBoxVisible) m_dropBox->hide(); {CMD}; if(__dropBoxVisible) m_dropBox->show(); } #define TEMP_HIDE_DROPBOX(CMD) { bool __dropBoxVisible = m_dropBox->isVisible(); if(__dropBoxVisible) m_dropBox->hide(); {CMD}; if(__dropBoxVisible) m_dropBox->show(); }
#define USE_NATIVE_FILE_DIALOG (lamexp_themes_enabled() || ((QSysInfo::windowsVersion() & QSysInfo::WV_NT_based) < QSysInfo::WV_XP)) #define USE_NATIVE_FILE_DIALOG (lamexp_themes_enabled() || ((QSysInfo::windowsVersion() & QSysInfo::WV_NT_based) < QSysInfo::WV_XP))
#define CENTER_CURRENT_OUTPUT_FOLDER_DELAYED QTimer::singleShot(125, this, SLOT(centerOutputFolderModel())) #define CENTER_CURRENT_OUTPUT_FOLDER_DELAYED QTimer::singleShot(125, this, SLOT(centerOutputFolderModel()))
#define SET_MODEL(VIEW, MODEL) { QItemSelectionModel *_tmp = (VIEW)->selectionModel(); (VIEW)->setModel(MODEL); LAMEXP_DELETE(_tmp); }
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
// Constructor // Constructor
@ -475,8 +476,9 @@ MainWindow::~MainWindow(void)
} }
//Unset models //Unset models
sourceFileView->setModel(NULL); SET_MODEL(sourceFileView, NULL);
metaDataView->setModel(NULL); SET_MODEL(outputFolderView, NULL);
SET_MODEL(metaDataView, NULL);
//Free memory //Free memory
LAMEXP_DELETE(m_tabActionGroup); LAMEXP_DELETE(m_tabActionGroup);
@ -2372,7 +2374,7 @@ void MainWindow::sourceModelChanged(void)
*/ */
void MainWindow::outputFolderViewClicked(const QModelIndex &index) void MainWindow::outputFolderViewClicked(const QModelIndex &index)
{ {
if(outputFolderView->currentIndex() != index) if(index.isValid() && (outputFolderView->currentIndex() != index))
{ {
outputFolderView->setCurrentIndex(index); outputFolderView->setCurrentIndex(index);
} }
@ -2655,20 +2657,8 @@ void MainWindow::showFolderContextActionTriggered(void)
*/ */
void MainWindow::refreshFolderContextActionTriggered(void) void MainWindow::refreshFolderContextActionTriggered(void)
{ {
//force re-initialization
QTimer::singleShot(0, this, SLOT(initOutputFolderModel())); QTimer::singleShot(0, this, SLOT(initOutputFolderModel()));
/*
const QString path = m_fileSystemModel->filePath(outputFolderView->currentIndex());
m_fileSystemModel->flushCache();
outputFolderView->reset();
QModelIndex index = (!path.isEmpty()) ? m_fileSystemModel->index(path) : QModelIndex();
if(index.isValid())
{
outputFolderView->setCurrentIndex(index);
CENTER_CURRENT_OUTPUT_FOLDER_DELAYED;
}
*/
} }
/* /*
@ -2764,12 +2754,14 @@ void MainWindow::initOutputFolderModel(void)
if(m_outputFolderNoteBox->isHidden()) if(m_outputFolderNoteBox->isHidden())
{ {
m_outputFolderNoteBox->show(); m_outputFolderNoteBox->show();
m_outputFolderNoteBox->repaint();
m_outputFolderViewInitCounter = 4; m_outputFolderViewInitCounter = 4;
if(m_fileSystemModel) if(m_fileSystemModel)
{ {
outputFolderView->setModel(NULL); SET_MODEL(outputFolderView, NULL);
LAMEXP_DELETE(m_fileSystemModel); LAMEXP_DELETE(m_fileSystemModel);
outputFolderView->repaint();
} }
if(m_fileSystemModel = new QFileSystemModelEx()) if(m_fileSystemModel = new QFileSystemModelEx())
@ -2778,7 +2770,7 @@ void MainWindow::initOutputFolderModel(void)
connect(m_fileSystemModel, SIGNAL(directoryLoaded(QString)), this, SLOT(outputFolderDirectoryLoaded(QString))); connect(m_fileSystemModel, SIGNAL(directoryLoaded(QString)), this, SLOT(outputFolderDirectoryLoaded(QString)));
connect(m_fileSystemModel, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(outputFolderRowsInserted(QModelIndex,int,int))); connect(m_fileSystemModel, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(outputFolderRowsInserted(QModelIndex,int,int)));
outputFolderView->setModel(m_fileSystemModel); SET_MODEL(outputFolderView, m_fileSystemModel);
outputFolderView->header()->setStretchLastSection(true); outputFolderView->header()->setStretchLastSection(true);
outputFolderView->header()->hideSection(1); outputFolderView->header()->hideSection(1);
outputFolderView->header()->hideSection(2); outputFolderView->header()->hideSection(2);