mirror of
https://github.com/JakubMelka/PDF4QT.git
synced 2025-01-01 02:58:08 +01:00
Soft memory leak bugfix
This commit is contained in:
parent
91f1779053
commit
23a1275b9f
@ -45,6 +45,11 @@ QByteArray PDFObjectStorage::getDecodedStream(const PDFStream* stream) const
|
|||||||
return PDFStreamFilterStorage::getDecodedStream(stream, std::bind(QOverload<const PDFObject&>::of(&PDFObjectStorage::getObject), this, std::placeholders::_1), getSecurityHandler());
|
return PDFStreamFilterStorage::getDecodedStream(stream, std::bind(QOverload<const PDFObject&>::of(&PDFObjectStorage::getObject), this, std::placeholders::_1), getSecurityHandler());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PDFDocument::~PDFDocument()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
bool PDFDocument::operator==(const PDFDocument& other) const
|
bool PDFDocument::operator==(const PDFDocument& other) const
|
||||||
{
|
{
|
||||||
// Document is considered equal, if storage is equal
|
// Document is considered equal, if storage is equal
|
||||||
|
@ -391,6 +391,7 @@ class PDFFORQTLIBSHARED_EXPORT PDFDocument
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
explicit PDFDocument() = default;
|
explicit PDFDocument() = default;
|
||||||
|
~PDFDocument();
|
||||||
|
|
||||||
bool operator==(const PDFDocument& other) const;
|
bool operator==(const PDFDocument& other) const;
|
||||||
bool operator!=(const PDFDocument& other) const { return !(*this == other); }
|
bool operator!=(const PDFDocument& other) const { return !(*this == other); }
|
||||||
|
@ -85,6 +85,7 @@ PDFViewerMainWindow::PDFViewerMainWindow(QWidget* parent) :
|
|||||||
m_progress(new pdf::PDFProgress(this)),
|
m_progress(new pdf::PDFProgress(this)),
|
||||||
m_taskbarButton(new QWinTaskbarButton(this)),
|
m_taskbarButton(new QWinTaskbarButton(this)),
|
||||||
m_progressTaskbarIndicator(nullptr),
|
m_progressTaskbarIndicator(nullptr),
|
||||||
|
m_futureWatcher(nullptr),
|
||||||
m_progressDialog(nullptr),
|
m_progressDialog(nullptr),
|
||||||
m_isBusy(false),
|
m_isBusy(false),
|
||||||
m_isChangingProgressStep(false),
|
m_isChangingProgressStep(false),
|
||||||
@ -287,7 +288,6 @@ PDFViewerMainWindow::PDFViewerMainWindow(QWidget* parent) :
|
|||||||
connect(m_progress, &pdf::PDFProgress::progressStarted, this, &PDFViewerMainWindow::onProgressStarted);
|
connect(m_progress, &pdf::PDFProgress::progressStarted, this, &PDFViewerMainWindow::onProgressStarted);
|
||||||
connect(m_progress, &pdf::PDFProgress::progressStep, this, &PDFViewerMainWindow::onProgressStep);
|
connect(m_progress, &pdf::PDFProgress::progressStep, this, &PDFViewerMainWindow::onProgressStep);
|
||||||
connect(m_progress, &pdf::PDFProgress::progressFinished, this, &PDFViewerMainWindow::onProgressFinished);
|
connect(m_progress, &pdf::PDFProgress::progressFinished, this, &PDFViewerMainWindow::onProgressFinished);
|
||||||
connect(&m_futureWatcher, &QFutureWatcher<AsyncReadingResult>::finished, this, &PDFViewerMainWindow::onDocumentReadingFinished);
|
|
||||||
connect(this, &PDFViewerMainWindow::queryPasswordRequest, this, &PDFViewerMainWindow::onQueryPasswordRequest, Qt::BlockingQueuedConnection);
|
connect(this, &PDFViewerMainWindow::queryPasswordRequest, this, &PDFViewerMainWindow::onQueryPasswordRequest, Qt::BlockingQueuedConnection);
|
||||||
connect(ui->actionFind, &QAction::triggered, this, [this] { m_toolManager->setActiveTool(m_toolManager->getFindTextTool()); });
|
connect(ui->actionFind, &QAction::triggered, this, [this] { m_toolManager->setActiveTool(m_toolManager->getFindTextTool()); });
|
||||||
|
|
||||||
@ -862,7 +862,7 @@ void PDFViewerMainWindow::updateUI(bool fullUpdate)
|
|||||||
|
|
||||||
void PDFViewerMainWindow::updateActionsAvailability()
|
void PDFViewerMainWindow::updateActionsAvailability()
|
||||||
{
|
{
|
||||||
const bool isBusy = m_futureWatcher.isRunning() || m_isBusy;
|
const bool isBusy = (m_futureWatcher && m_futureWatcher->isRunning()) || m_isBusy;
|
||||||
const bool hasDocument = m_pdfDocument;
|
const bool hasDocument = m_pdfDocument;
|
||||||
const bool hasValidDocument = !isBusy && hasDocument;
|
const bool hasValidDocument = !isBusy && hasDocument;
|
||||||
bool canPrint = false;
|
bool canPrint = false;
|
||||||
@ -957,7 +957,9 @@ void PDFViewerMainWindow::openDocument(const QString& fileName)
|
|||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
m_future = QtConcurrent::run(readDocument);
|
m_future = QtConcurrent::run(readDocument);
|
||||||
m_futureWatcher.setFuture(m_future);
|
m_futureWatcher = new QFutureWatcher<AsyncReadingResult>();
|
||||||
|
connect(m_futureWatcher, &QFutureWatcher<AsyncReadingResult>::finished, this, &PDFViewerMainWindow::onDocumentReadingFinished);
|
||||||
|
m_futureWatcher->setFuture(m_future);
|
||||||
updateActionsAvailability();
|
updateActionsAvailability();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -966,6 +968,10 @@ void PDFViewerMainWindow::onDocumentReadingFinished()
|
|||||||
QApplication::restoreOverrideCursor();
|
QApplication::restoreOverrideCursor();
|
||||||
|
|
||||||
AsyncReadingResult result = m_future.result();
|
AsyncReadingResult result = m_future.result();
|
||||||
|
m_future = QFuture<AsyncReadingResult>();
|
||||||
|
m_futureWatcher->deleteLater();
|
||||||
|
m_futureWatcher = nullptr;
|
||||||
|
|
||||||
switch (result.result)
|
switch (result.result)
|
||||||
{
|
{
|
||||||
case pdf::PDFDocumentReader::Result::OK:
|
case pdf::PDFDocumentReader::Result::OK:
|
||||||
@ -1122,7 +1128,7 @@ int PDFViewerMainWindow::adjustDpiX(int value)
|
|||||||
|
|
||||||
void PDFViewerMainWindow::closeEvent(QCloseEvent* event)
|
void PDFViewerMainWindow::closeEvent(QCloseEvent* event)
|
||||||
{
|
{
|
||||||
if (m_futureWatcher.isRunning())
|
if (m_futureWatcher && m_futureWatcher->isRunning())
|
||||||
{
|
{
|
||||||
// Jakub Melka: Do not allow to close the application, if document
|
// Jakub Melka: Do not allow to close the application, if document
|
||||||
// reading is running.
|
// reading is running.
|
||||||
@ -1226,7 +1232,7 @@ void PDFViewerMainWindow::updateUndoRedoSettings()
|
|||||||
|
|
||||||
void PDFViewerMainWindow::updateUndoRedoActions()
|
void PDFViewerMainWindow::updateUndoRedoActions()
|
||||||
{
|
{
|
||||||
const bool isBusy = m_futureWatcher.isRunning() || m_isBusy;
|
const bool isBusy = (m_futureWatcher && m_futureWatcher->isRunning()) || m_isBusy;
|
||||||
const bool canUndo = !isBusy && m_undoRedoManager->canUndo();
|
const bool canUndo = !isBusy && m_undoRedoManager->canUndo();
|
||||||
const bool canRedo = !isBusy && m_undoRedoManager->canRedo();
|
const bool canRedo = !isBusy && m_undoRedoManager->canRedo();
|
||||||
|
|
||||||
|
@ -174,7 +174,7 @@ private:
|
|||||||
PDFFileInfo m_fileInfo;
|
PDFFileInfo m_fileInfo;
|
||||||
|
|
||||||
QFuture<AsyncReadingResult> m_future;
|
QFuture<AsyncReadingResult> m_future;
|
||||||
QFutureWatcher<AsyncReadingResult> m_futureWatcher;
|
QFutureWatcher<AsyncReadingResult>* m_futureWatcher;
|
||||||
|
|
||||||
QProgressDialog* m_progressDialog;
|
QProgressDialog* m_progressDialog;
|
||||||
bool m_isBusy;
|
bool m_isBusy;
|
||||||
|
Loading…
Reference in New Issue
Block a user